在Visual Studio 2015中构建dll时,我似乎可以互换使用__declspec(dllexport)
和__declspec(dllimport)
。在制作 DLL 时,我会认为需要dllexport
命令,但似乎dllexport
或dllimport
就足够了。我有以下头文件声明一个简单的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
,因为这是最合理的错误解决方案。
最好将编译器警告视为错误。