我需要编写一个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; <...> };
答案 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: