1、创建DLL项目
首先,我们需要一个C++源文件来创建DLL。假设我们的DLL将提供一个简单的函数addNumbers
,该函数接受两个整数并返回它们的和。如:新建dllmain.cpp。
#include <windows.h>
extern "C" __declspec(dllexport) int addNumbers(int a, int b) {
return a + b;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
2、编译DLL
在终端下,输入:
g++ -shared -o mylib.dll dllmain.cpp
其中,-shared指生成动态链接库,-o指生成的.dll文件名,后接源文件。
便可得到mylib.dll的动态链接库,为后续调用。
3、 编写.c程序对DLL进行调用
#include <stdio.h>
#include <windows.h>
// 声明DLL中导出的函数
typedef int (*AddNumbersFunc)(int, int);
int main() {
// 加载DLL
HINSTANCE hDLL = LoadLibrary(TEXT("mylib.dll"));
if (hDLL == NULL) {
printf("Failed to load DLL.\n");
return 1;
}
// 获取函数的地址
AddNumbersFunc addNumbers = (AddNumbersFunc)GetProcAddress(hDLL, "addNumbers");
if (addNumbers == NULL) {
printf("Failed to get function address.\n");
FreeLibrary(hDLL);
return 1;
}
// 调用函数
int result = addNumbers(2, 3);
printf("The result is: %d\n", result);
// 卸载DLL
FreeLibrary(hDLL);
return 0;
}
4、 编译C语言程序
g++ -o myprogram main.c -L"E:\DLL_Test\" -lmylib
其中,-L后接dll文件所在路径,-l后接自定义.dll动态链接库名。
最后,可得到。
5、 运行程序
.\myprogram
在终端看到如下说明,即表示调用成功。