【发布时间】:2018-02-14 22:49:51
【问题描述】:
我从 C 调用一个 DLL,但是当我调用 GetProcAddress 时,GCC 说:
warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
DLL 接受一个指向双精度数组的指针并返回一个指向双精度数组的指针。这是C代码的相关部分:
typedef double* (*dllfunc1)(double*);
double *return_pointer;
hinstLib = LoadLibrary(dllname);
dll_handle = GetModuleHandle(dllname);
return_pointer = (dllfunc1)(GetProcAddress(dll_handle, "Main_Entry_fn"));
最后一行是失败的那一行。我尝试了许多不同的排列,但没有一个奏效。网上有大量关于函数指针的 typedef 原型的信息,但在 GetProcAddress 的上下文中调用 DLL 函数的信息很少。
当我将 return_pointer 的定义更改为:
int return_pointer
我明白了:
warning: assignment makes integer from pointer without a cast
所以看起来问题出在变量“return_pointer”中。很可能需要将其定义为 int 并转换为指针,但我无法将其转换为指针。最初的定义 (*double) 是因为它返回一个指向双精度数组的指针。
我哪里错了?任何想法将不胜感激。谢谢。
【问题讨论】:
-
return_pointer是保存指向函数本身的指针,还是保存函数返回的指针?在显示的代码中,您实际上还没有调用该函数。 -
(另外,我认为您不需要调用 LoadLibrary 和 GetModuleHandle,只是其中一个,但我可能错了。)
-
它保存了指向函数的指针,但在获得函数指针之前我无法调用该函数,这就是我遇到问题的地方。
标签: c dll function-pointers