我正在致力于将大量 .h 和 .lib 文件从本机 C++ 包装到托管 C++,以便最终用作 C# 中引用的 .dll。
一些本机 C++ 函数的返回类型为 void*。当我将值传回调用代码时,我不确定如何处理这个问题。例如:如果 C# 应用程序调用我的 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())));
谁能提供解决方案吗?
如果您的托管代码需要查看 void* 中的数据:
您不能将 void* 转换为非托管
内存到托管对象的引用。
要将其转换为托管内存,
你必须使用 Marshal.Copy() 或
Marshal.PtrToStructure()。那个意志
课程只有在您知道类型的情况下才有效
void* 指向的数据。source http://bytes.com/groups/net-vc/649329-void-pointer-managed-object-type
如果您的托管代码不需要查看 void* 中的数据:
如果您将其存储在 IntPtr 中
托管代码不需要查看什么
它是,只是将其传递回
稍后非托管代码。source http://www.tech-archive.net/pdf/Archive/DotNet/microsoft.public.dotnet.languages.vc/2007-05/msg00195.pdf
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)