能被动态加载的dll库的C语言源码怎么编写
时间: 2024-03-22 21:39:06 浏览: 111
c++动态加载c#编写生成的dll代码
编写能被动态加载的dll库的C语言源码需要遵循以下步骤:
1. 定义导出函数:需要在源码中定义需要导出的函数,并使用特定的关键字进行标记,以便编译器能够正确地导出这些函数。
2. 编译dll库:需要使用特定的编译器来编译dll库,并使用特定的选项来生成dll库文件。
3. 加载dll库:在主程序中使用特定的函数来加载dll库,并获取dll库中导出函数的指针,以便在主程序中调用这些函数。
下面是一个简单的示例:
```
// 定义导出函数
__declspec(dllexport) int add(int a, int b)
{
return a + b;
}
// 编译dll库
// 使用Visual Studio编译时,需要选择“Win32 Dynamic-Link Library”项目类型,然后将导出函数定义在dllmain.cpp文件中
// 加载dll库
#include <windows.h>
#include <stdio.h>
int main()
{
HINSTANCE hDll = LoadLibrary("mydll.dll"); // 加载dll库
if (hDll == NULL) {
printf("Failed to load dll\n");
return -1;
}
FARPROC addFunc = GetProcAddress(hDll, "add"); // 获取导出函数指针
if (addFunc == NULL) {
printf("Failed to get add function\n");
return -1;
}
int result = ((int(*)(int,int))addFunc)(1, 2); // 调用导出函数
printf("1 + 2 = %d\n", result);
FreeLibrary(hDll); // 卸载dll库
return 0;
}
```
需要注意的是,dll库与主程序需要使用相同的编译器、C运行时库等,才能正常使用。
阅读全文