使用dllimport接收的void指针[MSVS c++ 2010]

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

本文关键字:MSVS c++ 2010 指针 void dllimport 使用      更新时间:2023-10-16

我需要写一个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. 我如何使用这些信息来设置usecallback变量从DLL?你能举个例子吗?
  2. 我应该如何解除引用void* SomeFunction到exeStructure?
  3. 我需要复制和包括结构。h文件在我的DLL项目?

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

你可以通过static_cast(更好):

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

或者通过c风格的强制转换(本质上是相同的,但不建议):

exeStructure * exeStrPtr = (exeStructure *)voidPtr;

那么你就可以按照你的期望使用合适的指针了。

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

有关c++中最常见类型的强制转换之间的差异的更多详细信息,请参阅这个问题: