void * to C ++ / CLI中的Object ^

时间:2009-07-20 17:49:05

标签: c++-cli wrapper void-pointers

我正在将大量的.h和.lib文件从本机C ++包装到托管C ++,最终用作C#中引用的.dll。

某些本机C ++函数的返回类型为void *。当我将值传回给我的调用代码时,我不确定如何处理这个问题。例如:如果C#app调用我的dll包装器,我将从本机调用返回什么:

void* start(ThreadFunc,void *, unsigned *);

我目前正试图在通用的System :: Object ^中包含返回,但没有运气。这是包装器中的调用:

m_NativeThread->start(cb, 
        GCHandle::ToIntPtr(GCHandle::Alloc(o)).ToPointer(),
        static_cast<unsigned int*>(GCHandle::ToIntPtr(GCHandle::Alloc(u)).ToPointer())));

有人能提供解决方案吗?

2 个答案:

答案 0 :(得分:4)

如果您的托管代码需要查看void *:

中的数据
  

您无法将void *转换为非托管状态   内存到托管对象引用。   要将其转换为托管内存,   你必须使用Marshal.Copy()或   Marshal.PtrToStructure()。那将是   当然只有你知道这种类型才有用   void *指向的数据。   source

如果您的托管代码不需要查看void *:

中的数据
  

如果你的话,将它存储在IntPtr中   托管代码不需要看什么   它只是把它传回了   以后的非托管代码。   source

答案 1 :(得分:0)

你能把它变成IntPtr吗?您希望客户对void *?

做什么