在 C++/CLI 中将 void* 取消引用到基本类型

Dereferencing a void* to a basic type in C++/CLI

如何取消引用 void* 在 C++/CLI 中指向的值,特别是,我想将其分配给 int。

int Callback(void* returnValue)
{
   int lookUpValue = *returnValue; // How to do this??

   if(lookUpValue==1)
     DoSomething();
   if(lookUpValue==2)
     DoSomethingElse();

    return CALLBACK_SUCCESS; // Defined elsewhere.
}

我试过了:

{
    GCHandle h = GCHandle::FromIntPtr(IntPtr(voidPtr));
    Object^ result = h.Target;
    lookUpValue = (int)result;
    h.Free();
}

来自示例: CLI/C++: void* to System::Object

但发现在某些情况下 h.Target 未定义,我会遇到崩溃。所以不要认为我已经能够正确地做到这一点。

提前致谢。

您不能直接取消对 void* 的引用,因为结果类型是未知的。在取消引用之前,您必须将 void* 转换为 int*

int lookUpValue = *static_cast<int*>(returnValue);

您发现的相关 post 不适用,因为 int 不是在 GC 堆上管理的对象,因此您无法获得它的 GC 句柄。