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

2024-03-06

我正在致力于将大量 .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(使用前将#替换为@)

C++/CLI 中的 void* 到 Object^ 的相关文章

随机推荐