在 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 句柄。
如何取消引用 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 句柄。