无效*到对象^在C ++ / CLI(void* to Object^ in C++/CLI)

2019-09-19 17:14发布

我的工作从本地C ++来托管C ++为在C#中引用的.dll最终使用包裹大量的.h和.lib文件。

一些原生C ++函数是void *的返回类型。 我不知道如何处理这个时候我的价值传回给我的调用代码。 例如:如果一个C#应用程序调用我的DLL包装,有什么事我从本地调用返回:

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

目前我正在试图框在一个通用的系统返回:对象^没有运气。 这是在包装的呼叫:

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

任何人都可以提供一个解决方案?

Answer 1:

你可以把它一个IntPtr? 你期望在客户端与void *的呢?



Answer 2:

如果您的托管代码需要看到void *的数据:

你不能投一个void *非托管内存的管理对象引用。 把它变成管理的内存,你不得不使用Marshal.Copy()或Marshal.PtrToStructure()。 当然,这将只有当你知道数据的类型的空*点的工作。 资源

如果您的托管代码并不需要看到void *的数据:

它存放在一个IntPtr,如果你的托管代码并不需要看它是什么,只是其传递回非托管代码以后。 资源



文章来源: void* to Object^ in C++/CLI