gpt4 book ai didi

c++ - 使用 dllimport 过程

转载 作者:可可西里 更新时间:2023-11-01 13:25:47 25 4
gpt4 key购买 nike

我正在尝试编写一个 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_ */

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

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

但是编译器(我在 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 ===|

我不明白为什么。

最佳答案

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

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

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

关于c++ - 使用 dllimport 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4644758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com