C++ 动态加载dll
//dll头文件 #ifndef MYDLL_H #define MYDLL_H #ifndef MYDLL_EXPORT #define MYDLL _declspec(dllexport) #else #define MYDLL _declspec(dllimport) #endif //dll导出函数 在普通导出函数中加上exturn "C" 即可 extern "C" MYDLL int add(int a, int b); #endif
//cpp文件,需要实现的函数功能 求2个变量的和 #include "mydll.h" MYDLL int add(int a, int b) { return a + b; }
//生成dll后,新建一个控制台程序,并将生成的dll和头文件放到新的工程的目录下
//写一个exe来动态加载头文件,并添加dll的头文件
#include <iostream> #include <windows.h> #include "mydll.h" using namespace std; int main() { //动态加载dll HINSTANCE handle = LoadLibrary("mydll.dll"); //判断是否能成功加载 if (handle == NULL) { cout << "未成功加载dll\n"; return 0; } else { //定义要找的函数原型,并查找函数原型地址 typedef int(*Add)(int, int); Add add = (Add)GetProcAddress(handle, "add"); if (!add) { cout << "未找到函数原型!\n"; } else { //函数调用 int reslut = add(1, 2); cout << reslut << endl; //卸载dll FreeLibrary(handle); } return 0; } }
得到的结果为3