C语言结构体导出为dll并调用
时间: 2023-12-10 13:04:40 浏览: 135
C语言调用DLL
首先,我们需要在C语言中定义一个结构体,并将其导出为动态链接库(DLL)。
例如,我们定义了一个包含两个整数的结构体:
```
typedef struct {
int a;
int b;
} MyStruct;
```
然后,我们将该结构体导出为DLL:
```
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
DLL_EXPORT MyStruct getStruct() {
MyStruct s = {10, 20};
return s;
}
```
在上面的代码中,我们使用了`__declspec(dllexport)`宏来将`getStruct()`函数导出为DLL。如果我们在另一个程序中想要使用该函数,我们需要将其声明为`__declspec(dllimport)`。
现在,我们可以在另一个程序中调用该函数:
```
#include <stdio.h>
#include <windows.h>
typedef struct {
int a;
int b;
} MyStruct;
typedef MyStruct (*GetStructFunc)();
int main() {
HINSTANCE hinstLib;
GetStructFunc getStruct;
MyStruct s;
hinstLib = LoadLibrary(TEXT("MyDll.dll"));
if (hinstLib != NULL) {
getStruct = (GetStructFunc)GetProcAddress(hinstLib, "getStruct");
if (getStruct != NULL) {
s = getStruct();
printf("a: %d\n", s.a);
printf("b: %d\n", s.b);
}
FreeLibrary(hinstLib);
}
return 0;
}
```
在上面的代码中,我们首先加载了MyDll.dll动态链接库,并获取了`getStruct()`函数的地址。然后,我们可以调用该函数并获取结构体的值。
注意,我们需要使用`LoadLibrary()`和`GetProcAddress()`函数来加载并获取动态链接库中的函数。同时需要注意,我们需要使用`__stdcall`调用约定来声明导出函数。
阅读全文