先说说下正常的dll。
-
动态库显试调用一般3个文件.h .lib .dll ,隐式调用 只需要2个文件:.h(函数定义) .dll
-
静态库2个文件:.h .lib
先说C++正常dll显式调用
#include "BYD_MES/MES2Interface.h" //#include 是以当前文件所在路径为当前目录
#pragma comment(lib,"Mes/BYD_MES/MES2Interface.lib") //#pragma comment 是以当前工程所在路径为当前目录
把dll复制到VS工作目录
c++隐式调用dll
在C++中,可以通过使用动态链接库(DLL)来实现动态加载和调用函数。要使用DLL,需要使用Windows API中的LoadLibrary函数加载DLL,并使用GetProcAddress函数获取DLL中导出的函数地址。使用这些函数,可以在运行时动态地加载DLL并调用其中的函数。
下面是一个示例代码,演示了如何使用DLL并调用其中的函数:
复制#include <iostream> #include <windows.h> typedef int (*AddFunc)(int, int); int main() { HINSTANCE hDLL = LoadLibrary("mydll.dll"); if (hDLL == NULL) { std::cout << "Failed to load DLL." << std::endl; return 1; } AddFunc add = (AddFunc)GetProcAddress(hDLL, "Add"); if (add == NULL) { std::cout << "Failed to get function address." << std::endl; return 1; } int result = add(1, 2); std::cout << "Result: " << result << std::endl; FreeLibrary(hDLL); return 0; }
在上面的代码中,我们首先使用LoadLibrary函数加载名为mydll.dll的DLL。然后,使用GetProcAddress函数获取名为Add的导出函数的地址。最后,我们调用Add函数,并输出其返回值。注意,我们使用了typedef来定义了一个函数指针类型AddFunc,这是为了方便地使用函数指针调用Add函数。
需要注意的是,在使用DLL时需要确保DLL文件已经被正确地编译和链接。否则,可能会出现链接错误或运行时错误。
c++调用dll出现LNK2001 无法解析的外部符号 几种可能:
1.编译参数等不一致:
(1)平台类型不一致。x86编译的dll,在x64下调用会出现
(2)在静态库中使用MFC 要一致。
(3)字符集不一致
2.调用名字写错了。