写一个c++调用dll动态连接库类的调用的例子
时间: 2024-10-24 22:03:31 浏览: 13
在C++中,通过`std::shared_ptr`和`GetProcAddress`函数可以动态地调用DLL(动态链接库)中的函数。这里是一个简单的例子:
首先,假设我们有一个名为`MyDll.dll`的动态链接库,其中包含一个公开的函数`AddNumbers(int a, int b)`。
```cpp
// 引入必要的头文件
#include <windows.h>
#include <iostream>
#include <memory>
// DLL导入声明,告诉编译器我们要使用这个函数
#pragma comment(lib, "MyDll.lib") // 如果是lib文件
#pragma comment(lib, "MyDll.dll.lib") // 如果是动态链接库
// 定义函数原型,用于GetProcAddress
extern "C" __declspec(dllexport) int AddNumbers(int a, int b);
int main() {
// 动态加载DLL
HMODULE hModule = LoadLibrary("MyDll.dll");
if (hModule == nullptr) {
std::cerr << "Failed to load library!" << std::endl;
return 1;
}
// 获取函数地址
typedef int (*AddNumbersFunc)(int, int);
AddNumbersFunc pAddNumbers = reinterpret_cast<AddNumbersFunc>(GetProcAddress(hModule, "AddNumbers"));
if (pAddNumbers == nullptr) {
std::cerr << "Failed to get function address!" << std::endl;
return 1;
}
// 调用函数并处理结果
int result = pAddNumbers(5, 7);
std::cout << "Result: " << result << std::endl;
// 关闭DLL
FreeLibrary(hModule);
return 0;
}
```
在这个例子中,我们首先使用`LoadLibrary`函数加载DLL,然后使用`GetProcAddress`获取指定函数的地址,并将其转换为指向函数的指针。最后,我们可以像调用普通函数一样调用这个函数。
阅读全文