开发环境:Windows 10,Visual Studio 2017。
我在中定义了以下方法
api.h
并在
api.cpp
然后编译成
api.dll
. 编译也产生了
api.lib
.
extern "C" int validate( int v_mode, char * data, int data_length );
我创建了另一个不同的项目。在那个项目中我包括
API
,然后从项目设置中,我添加了
AIP.LIB
到其他要链接的库以及我设置的附加库目录中。
这个项目是非常简单的控制台应用程序,我将用它测试前面提到的
validate
方法。
#include "api.h"
int main() {
char data[] ={1,2,3};
validate(ValidationModes::Video,data,3);
}
我得到以下错误:
错误LNK2019:函数main中引用的未解析外部符号validate
编译程序也告诉它链接错误。经过一番搜索,我补充说
__declspec(dllexport)
对我
验证
方法。
extern "C" __declspec(dllexport) int validate( int v_mode, char * data, int data_length );
然后我可以编译和运行而不产生任何问题。我的问题是:
对于存在于
A.dll
,如果我试图从外部源(如测试应用程序)访问这些方法、类、变量等,是否必须将它们设置为
__declspec
?
对于Windows环境下的C++开发,我是相当新的。我不记得在使用G++时做过类似的事情。事先谢谢。