关于DLL的一个问题
例如:
#ifdef MYLIBDLL
#define MYLIBDLL extern "C" _declspec(dllimport)
#else
#define MYLIBDLL extern "C" _declspec(dllexport)
#endif
MYLIBDLL IUnknown *CreateInstance();
在DLL需要这样写,,但是我不知道#define MYLIBDLL extern "C" _declspec(dllimport) 和#define MYLIBDLL extern "C" _declspec(dllexport) 到底谁在上谁在下, 我们需要在DLL中定义MYLIBDLL吗? 事实上我试了一下不管是调换它们的顺序还是不调换都可以成功运行。。
[解决办法]
_declspec(dllimport)
用于在其他工程中使用 dll 导出的内容.
_declspec(dllexport)
用于在 dll 的工程中指明要导出哪些内容
[解决办法]
这个问题很简单,这整体是一个条件编译。也就是说按照不同的条件,出现不同的情况:导出、导入。
如果想问题中所说的情况
#ifdef MYLIBDLL
#define MYLIBDLL extern "C" _declspec(dllimport)
#else
#define MYLIBDLL extern "C" _declspec(dllexport)
#endif
MYLIBDLL IUnknown *CreateInstance();
那么,如果在文件中我添加这样一句:#define MYLIBDLL。此时就意味着,MYLIBDLL是导入。
如果我没有#define MYLIBDLL这样一句定义。MYLIBDLL就是导出。
所以很简单。在需要导出的类、函数等文件中不要添加#define MYLIBDLL,在需要导入DLL的文件中,添加#define MYLIBDLL一句就可以了。
如果上下两句反过来了,那么就在导入的地方添加#define MYLIBDLL一句就可以了。