使用dllimport程序

Ram*_*amy 7 c++ windows

我正在尝试编写一个DLL,这是我的头文件的样子:

#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */


DLLIMPORT void HelloWorld (void);


#endif /* _DLL_H_ */
Run Code Online (Sandbox Code Playgroud)

在.cpp文件中我包含此头文件,我尝试以这种方式声明一个dll导入过程:

DLLIMPORT void HelloWorld ()
{
   MessageBox (0, "Hello World from DLL!n", "Hi", MB_ICONINFORMATION);
}
Run Code Online (Sandbox Code Playgroud)

但编译器(我在Windows 7 64位上有mingw32)一直给我这个错误:

E:\Cpp\Sys64\main.cpp|7|error: function 'void HelloWorld()' definition is marked dllimport|
E:\Cpp\Sys64\main.cpp||In function 'void HelloWorld()':|
E:\Cpp\Sys64\main.cpp|7|warning: 'void HelloWorld()' redeclared without dllimport attribute: previous dllimport ignored|
||=== Build finished: 1 errors, 1 warnings ===|
Run Code Online (Sandbox Code Playgroud)

我不明白为什么.

har*_*per 4

declspec(dllimport)在模块的模块导入表中生成条目。该导入表用于在链接时解析对符号的引用。在加载时,这些引用由加载器固定。

declspec(dllexport)在 DLL 的 DLL 导出表中生成条目。此外,您需要实现用它声明的符号(函数、变量)。

由于您实现了 DLL,因此必须定义 BUILDING_DLL。这可以完成#define,但应该在项目设置中更好地设置。