首页
学习
活动
专区
工具
TVP
发布

MFC(C++)中 __declspec(dllexport) 和 __declspec(dllimport)的作用

本文链接:https://blog.csdn.net/acoolgiser/article/details/99735282 从static变量导出问题解析 __declspec(dllexport)...和 __declspec(dllimport)的作用 这段时间要把tinyxml从静态库弄成动态库,要用到__declspec(dllexport)和__declspec(dllimport...比如一个项目中的Class中含有一个静态变量,生成dll的时候只采用了__declspec(dllexport) 如下: dll工程 A1.h:   #define OS_API_EXPORT __declspec...(dllexport)   class OS_API_EXPORT A {static int a;} A.cpp:   #include “A.h”   static A::a=0; //静态变量的初始化要写在...头文件可以写为如下形式: A.h    #define OS_API_IMPORT __declspec(dllimport) #define OS_API_EXPORT __declspec(dllexport

1.3K10
您找到你想要的搜索结果了吗?
是的
没有找到

关于protobuf近期版本(v20v3.20+)和 gRPC v1.54版本在某些编译环境下的一些链接和编译问题

然而这两个版本在Linux的ELF ABI和MacOS的Macho ABI下都出现了一些符号未定义的问题(当然也包含Android和iOS)。...触发条件比较多: 需要编译成动态库 默认符号隐藏(Windows默认隐藏,Linux默认可见) 使用 dllexport_decl= 来设置导出符号 在Windows中个,每一个dll和exec都有自己的符号表和堆管理...所以当使用dll时,需要把要导出的符号设置为 __declspec(dllexport)/__attribute__((__dllexport__)), 导入的时候设置为 __declspec((dllimport...而在Linux里,默认是共享且全局可见的。而很多构建系统中会把Windows版本依赖使用静态库,所以很多同学不会碰到这些问题。...那么为了实现上面的流程,protobuf 提供了一个生成选项 dllexport_decl,用来对要导出的符号指定这个宏。

54220

关于opentelemetry-cpp社区对于C++ Head Only组件单例和符号可见性的讨论小记

背景 三大主流平台(macOS,Linux和Windows )中用的ABI规范都不太一样。...其中macOS的Mach-O和Linux下的ELF差别不是很大,但是它们Windows下PE ABI的差异很大。 对动态库而言,实际上所有写在 header 里的接口和全局变量都有一份自己的实例。...而标记为 __declspec(dllimport) 的函数不会生成本地实例,所以会要求必须要有某个模块申明了 __declspec(dllexport) 来导出实际的实例。...最后 通过上面的例子,Linux和macOS下我们可以通过一定的约定和规范避免问题,但是Windows下仍然没有一个完美的解决方案。...当然,有的同学说,我只用Linux/macOS,不用考虑Windows。然而我们做基础性功能库的时候不能定死用户的使用场景和限制使用平台,所以对接口的规范和约定设计会更加偏向保守。

90930

visual studio静态,动态链接库开发工具简单使用

EXT_H #ifdef Import #define Dll __declspec(dllimport) #else #ifdef Export #define Dll __declspec(dllexport...对比之下,linux下的gcc,若是动态链接库,需要的是.so+.h 文件(.so相当于.dll),这是显著的差异。...3y1sfaz2(v=vs.100).aspx)可知,和静态链接不同的是,动态链接需要对库的源代码进行改动,添加 1 __declspec( dllimport )  或 1 __declspec( dllexport...这个时候要注意,__declspec( dllimport )和__declspec( dllexport ) 的使用是不一样的,在库里导出的符号(函数,变量等,可以用dumpbin查看)应该使用__declspec...( dllexport ) ,而使用库的代码,在包含头文件后,要有这些符号的声明,要看到__declspec( dllimport )形式的声明,所以这是有区别的。

89940

windows虚拟显示器SDK开发和提供

插入虚拟显示器 * @param handle[in]:CreateMonitorDevice返回的设备句柄 * @return 见返回错误码 * @remark */ __declspec(dllexport...[in]:需要设置的分辨率,宽度最小值为800,高度最小值为600 * @return 见返回错误码 * @remark 设置低于800*600的分辨率会返回失败 */ __declspec(dllexport...屏幕画面有更新才返回 * @param handle[in]:CreateMonitorDevice返回的设备句柄 * @return 见返回错误码 * @remark */ __declspec(dllexport...拔出虚拟显示器 * @param handle[in]:CreateMonitorDevice返回的设备句柄 * @return 见返回错误码 * @remark */ __declspec(dllexport...CreateMonitorDevice返回的设备句柄 * ¶n pInfo[out]:返回的虚拟显示器信息 * @return 见返回错误码 * @remark */ __declspec(dllexport

64040
领券