使用dllimport收到的void指针[MSVS C ++ 2010]

时间:2015-10-24 12:29:51

标签: c++ visual-studio-2010 dllimport void-pointers

我需要编写一个DLL(使用MSVS 2010 PS1)来调用从exe导出的函数:

(dll.h):  extern "C" __declspec(dllimport) void*  __stdcall SomeFunction();

问题是void指针可以指向任何数据类型,exe开发人员不提供有关如何使用此函数的任何指导。幸运的是exe项目是开源的,我可以看到SomeFunction实际上返回一个结构的指针,该结构在structures.h文件中声明,用于编译exe:

struct exeStructure {int    useme;  int usecallback; <...> };
  1. 如何使用此信息从DLL设置usecallback变量?你能举个例子吗?
  2. 我应该如何取消引用void * SomeFunction到exeStructure?
  3. 我是否需要在我的DLL项目中复制并包含structures.h文件?

1 个答案:

答案 0 :(得分:0)

您应该将 void * 的值指定为 exeStructure * 类型。

你可以通过static_cast(更好)来做到这一点:

exeStructure * exeStrPtr = static_cast<exeStructure*>(voidPtr);

或通过C风格的演员表(基本上为此目的有效,但不建议):

exeStructure * exeStrPtr = (exeStructure *)voidPtr;

然后你可以按照预期使用正确的指针。

exeStrPtr->usecallback = 1;
exeStrPtr->useme = 334;

有关C ++中最常见类型的转换之间差异的更多详细信息,请参阅this question