使用 dllimport [MSVS C++ 2010] 接收的空指针

Using void pointer received by dllimport [MSVS C++ 2010]

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

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

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

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

您应该将 void * 的值分配给 exeStructure * 类型。

您可以通过 static_cast(更好):

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

或者通过 C 风格的强制转换(为此目的效果基本相同,但不建议这样做):

exeStructure * exeStrPtr = (exeStructure *)voidPtr;

然后你就可以像你期望的那样使用正确的指针了。

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

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