使用 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; <...> };
- 如何使用此信息从 DLL 设置 usecallback 变量?你能举个例子吗?
- 我应该如何将 void* SomeFunction 取消引用到 exeStructure 中?
- 我是否需要在我的 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:
我需要编写一个 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; <...> };
- 如何使用此信息从 DLL 设置 usecallback 变量?你能举个例子吗?
- 我应该如何将 void* SomeFunction 取消引用到 exeStructure 中?
- 我是否需要在我的 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: