写一个可以动态加载的c语言dll库
时间: 2024-02-06 19:03:12 浏览: 21
以下是一个简单的动态加载C语言DLL库的示例代码:
首先,我们创建一个包含一个函数的C语言DLL库,例如:
```c
// mylib.c
#include <stdio.h>
int myFunction(int x) {
printf("myFunction was called with argument %d\n", x);
return x * 2;
}
```
然后,我们使用GCC编译该DLL库:
```
gcc -shared -o mylib.dll mylib.c
```
接下来,我们可以编写一个程序来动态加载并调用myFunction函数:
```c
#include <stdio.h>
#include <windows.h>
int main() {
// 加载 DLL 文件
HINSTANCE hDll = LoadLibrary("mylib.dll");
if (hDll == NULL) {
printf("Failed to load DLL!\n");
return 1;
}
// 获取函数指针
typedef int (*MyFunction)(int);
MyFunction myFunction = (MyFunction)GetProcAddress(hDll, "myFunction");
if (myFunction == NULL) {
printf("Failed to get function address!\n");
FreeLibrary(hDll);
return 1;
}
// 调用函数
int result = myFunction(42);
printf("Result: %d\n", result);
// 释放 DLL 文件
FreeLibrary(hDll);
return 0;
}
```
在上面的示例中,我们使用LoadLibrary函数加载mylib.dll文件,并使用GetProcAddress函数获取myFunction函数的地址。然后,我们将获取的函数指针转换为函数类型,以便调用该函数。最后,我们使用FreeLibrary函数释放mylib.dll文件。
编译并运行上面的程序,输出应该类似于以下内容:
```
myFunction was called with argument 42
Result: 84
```
这表明我们已成功动态加载C语言DLL库,并成功调用其中的函数。