通过宏定义将__declspec(dllexport)与__declspec(dllimport)的转化,实现库代码和使用代码使用同一份头文件
2018-01-24 21:19
639 查看
我们知道,在VC编程中,如果要编译成动态链接库,需要将函数、变量、类等导出,这时使用__declspec(dllexport)。使用动态链接库时,需要在声明的时候有使用__declspec(dllimport)导入外部符号。这样,在库的编写时需要使用一份带__declspec(dllexport)的头文件,而在使用库时,又要使用另一份带__declspec(dllimport)的头文件,有没有什么办法实现编写库和使用库都只使用同一份头文件呢?这时候,预定义宏有帮了大忙了。
解决办法:使用条件编译:定义一个变量,针对提供者和使用者,设置不同的预编译值。
1 #ifndef DLL_H_ 2 #define DLL_H_ 3 4 #ifdef DLLProvider 5 #define DLL_EXPORT_IMPORT __declspec(dllexport) 6 #else 7 #define DLL_EXPORT_IMPORT __declspec(dllimport) 8 #endif 9 10 DLL_EXPORT_IMPORT int add(int ,int); 11 12 #endif
很多库如OpenCV等,都是通过这个实现的。当然,他们也是通过预编译宏实现跨平台的。
相关文章推荐
- 在代码中使用 _declspec(dllimport) 和 _declspec(dllexport)
- 在代码中使用 _declspec(dllimport) 和 _declspec(dllexport)
- _declspec(dllexport) 与__declspec(dllimport) 的使用说明
- C# 通过Reflection代码实现载入内置的(dll)资源文件
- 使用def文件从dll导出和_declspec(dllexport)导出区别以及调用示例
- dll项目中_declspec(dllimport)和_declspec(export)使用
- 使用def文件从dll导出和_declspec(dllexport)导出区别以及调用示例
- declspec(dllexport)和declspec(dllimport) 的使用说明
- 程序中使用动态连接库 && _declspec(dllexport)与_declspec(dllimport)
- svn通过多次拖拉子文件实现export 代码的方法
- 通过python的import hooks实现像引用代码一样使用配置文件
- class _declspec(dllexport) class_name与class _declspec(dllimport) class_name的配套使用
- class _declspec(dllexport) class_name与class _declspec(dllimport) class_name的配套使用
- 通过代码实现EXE文件图标的替换
- android中通过代码实现文件权限修改(chmod)
- PHP通过header实现文本文件下载的代码
- __declspec(dllimport)与__declspec(dllexport)
- (转)使用CGIC实现Web文件上传的服务端代码
- 【asp.net 】使用js结合hidden控件实现在后台运行一段程序后提示确认,确认通过后继续执行后台代码~~~
- __declspec(dllexport) & __declspec(dllimport)