使用 dllimport 代替 dllexport



在Visual Studio 2015中构建dll时,我似乎可以互换使用__declspec(dllexport)__declspec(dllimport)。在制作 DLL 时,我会认为需要dllexport命令,但似乎dllexportdllimport就足够了。我有以下头文件声明一个简单的add((函数:

添加 H

#pragma once
#ifdef ADDDLL_EXPORTS
#define ADDDLL_API __declspec(dllexport)
#else
#define ADDDLL_API __declspec(dllimport)
#endif
ADDDLL_API int add(int x, int y);

在 cpp 文件中具有以下定义:

添加.cpp

#include "add.h"
int add(int x, int y)
{
return x + y;
}

我似乎可以使用构建的 DLL,无论是否在预处理器>预处理器定义的配置属性>ADDDLL_EXPORTS。例如,在一个包含 .lib 文件作为附加依赖项的单独项目中(>链接器>输入>其他依赖项的配置属性(,我有以下代码运行

主.cpp

#include <iostream>
#include "add.h"
int main()
{
int sum = add(4, 5);
std::cout << "sum = " << sum << std::endl;
std::system("pause");
return 0;
}

任何见解都值得赞赏。如果需要更多信息,请告诉我。提前感谢!

如果您仔细查看,您会发现您的 DLL 项目编译时带有警告,如下所示:

c:yourprojectadd.cpp(3,1):warning C4273: 'add': inconsistent dll linkage

编译器知道你没有好处。不应定义dllimport函数,而应仅声明。因此,当编译器看到定义时,它会假设应该改用dllexport,因为这是最合理的错误解决方案。

最好将编译器警告视为错误。

相关内容

  • 没有找到相关文章

最新更新