dllexport和dllimport使用的问题
最近在修改一个程序,结构是这样的:
程序包括三个部分:动态链接库Lib1, 动态链接库Lib2, 主程序Prog1。其中Lib2需要用到Lib1,Prog1需要用到Lib1和Lib2。
现在需要把Lib1和Lib2改成静态链接库,让Prog1直接调用Lib1和Lib2。
其中Lib1中使用了以下宏,并且在很多类或函数前使用了宏EXPORT_LIB1:
#if defined DLL_EXPORT_LIB1
#define EXPORT_LIB1 __declspec(dllexport)
#else
#define EXPORT_LIB1 __declspec(dllimport)
#endif
Lib2中使用了以下宏,并且在很多类或函数前使用了宏EXPORT_LIB2:
#if defined DLL_EXPORT_LIB2
#define EXPORT_LIB2 __declspec(dllexport)
#else
#if defined DLL_EXPORT_LIB2_PROG
#define EXPORT_LIB2 __declspec(dllimport)
#else
#define EXPORT_LIB2
#endif
#endif
现在想把Lib1和Lib2编译成为静态Lib,请问:
1. 想要生成静态LIB,需要把这两个动态链接库项目的dllmain函数删除吗?
2. 编译时是否只需要把编译器中预定义的宏DLL_EXPORT_LIB1和DLL_EXPORT_LIB2去除,这样程序就不会以dllexport方式将函数输出?
3. 如果把编译器中预定义的宏DLL_EXPORT_LIB1和DLL_EXPORT_LIB2去除,dllimport起什么作用?需不需要将dllimport注释掉?
4. dllimport是不是可有可无?也就是#define EXPORT_LIB2 __declspec(dllimport)可以直接写成#define EXPORT_LIB2 吗?
5. 根据Lib2中对宏DLL_EXPORT_LIB2_PROG的定义,在编译程序Prog1时,编译器中加入宏DLL_EXPORT_LIB2_PROG和不加这个宏,结果会有什么不同?
谢谢各位高手!