使用另一个 .dll 中定义的方法
Using a method defined in another .dll
开发环境:Windows10,Visual Studio2017.
我在 api.h
中定义了以下方法并在 api.cpp
中实现,然后编译成 api.dll
。编译也产生了api.lib
.
extern "C" int validate( int v_mode, char * data, int data_length );
我创建了另一个不同的项目。在那个项目中,我包含了 api.h
,然后从项目设置中,我将 api.lib
添加到附加库到 link 以及设置附加库目录。
这个项目是超级简单的控制台应用程序,我将用它来测试前面提到的 validate
方法。
#include "api.h"
int main() {
char data[] ={1,2,3};
validate(ValidationModes::Video,data,3);
}
我收到以下错误:
error LNK2019: unresolved external symbol validate referenced in function main
编译器告诉它 linking 错误。经过一番搜索后,我将 __declspec(dllexport)
添加到我的 validate
方法中。
extern "C" __declspec(dllexport) int validate( int v_mode, char * data, int data_length );
然后我可以编译 运行 没有任何问题。我的问题如下:
对于 A.dll
中存在的任何方法、class、变量等,如果我尝试从外部来源访问这些方法、classes、变量等作为我的测试应用程序,我是否必须将它们设置为 __declspec
?
我对 Windows 环境中的 c++ 开发相当陌生。我不记得在使用 g++ 时曾经做过类似的事情。提前致谢。
是的,如果您想在 DLL 外部使用那些 "names"(函数、变量、class 等),您必须 "export" 它们。请注意,您只需要在 Windows 上执行此操作(默认情况下符号不会从 DLL 导出)。在 Linux 上则相反 - 所有符号都被导出,您需要隐藏任何您不想导出的内容。
开发环境:Windows10,Visual Studio2017.
我在 api.h
中定义了以下方法并在 api.cpp
中实现,然后编译成 api.dll
。编译也产生了api.lib
.
extern "C" int validate( int v_mode, char * data, int data_length );
我创建了另一个不同的项目。在那个项目中,我包含了 api.h
,然后从项目设置中,我将 api.lib
添加到附加库到 link 以及设置附加库目录。
这个项目是超级简单的控制台应用程序,我将用它来测试前面提到的 validate
方法。
#include "api.h"
int main() {
char data[] ={1,2,3};
validate(ValidationModes::Video,data,3);
}
我收到以下错误:
error LNK2019: unresolved external symbol validate referenced in function main
编译器告诉它 linking 错误。经过一番搜索后,我将 __declspec(dllexport)
添加到我的 validate
方法中。
extern "C" __declspec(dllexport) int validate( int v_mode, char * data, int data_length );
然后我可以编译 运行 没有任何问题。我的问题如下:
对于 A.dll
中存在的任何方法、class、变量等,如果我尝试从外部来源访问这些方法、classes、变量等作为我的测试应用程序,我是否必须将它们设置为 __declspec
?
我对 Windows 环境中的 c++ 开发相当陌生。我不记得在使用 g++ 时曾经做过类似的事情。提前致谢。
是的,如果您想在 DLL 外部使用那些 "names"(函数、变量、class 等),您必须 "export" 它们。请注意,您只需要在 Windows 上执行此操作(默认情况下符号不会从 DLL 导出)。在 Linux 上则相反 - 所有符号都被导出,您需要隐藏任何您不想导出的内容。