在使用DLL中的函数或类,变量时使用 __declspec(dllexport) 和 __declspec(dllimport)。
如果DLL和使用DLL的项目是在一个解决方案中,并产生了依赖关系,则使用DLL的项目只需要包含相关的“*.h”,并在项目的属性中添加.h文件所在的目录。
如果仅仅是使用一个DLL(假设是一个exe文件使用),我们 首先包含“*.h”,然后#pragma comment(lib, "*.lib"),并且exe文件和dll文件要放在一个目录,即是输出目录是一个。
上面两段是告诉我们如何引入DLL文件。
但是.h文件是怎么书写呢?
在DLL文件中,VC中win32项目的DLL项目自动生成时,可以产生一个标准的例子。如
dll.h:
#ifdef DLLWIN32_EXPORTS//命令行定义的
#define DLLWIN32_API __declspec(dllexport)
#else
#define DLLWIN32_API __declspec(dllimport)
#endif
// 此类是从 dllwin32.dll 导出的
class DLLWIN32_API Cdllwin32 {
public:
Cdllwin32(void);
// TODO: 在此添加您的方法。
};
extern DLLWIN32_API int ndllwin32;
DLLWIN32_API int fndllwin32(void);
我们使用这个DLL时,就是要包含这里的dll.h,这里的宏在.h里值是__declspec(dllexport),但是在我们调用它的.cpp里,由于没有DLLWIN32_EXPORTS,所以值为__declspec(dllimport),这样就是很标准的写法了,如果我们不使用自动生成的方法,我们可以参考这么写。
注意:MFC类除了扩展类,其他的不能作导出。
我今天干了四个小时,才弄明白,真是笨啊。