如何将 cli::array 从本机代码转换为本机数组?
我正在围绕用 C++\CLI 编写的托管组件编写本机包装器。
我在托管代码中有以下函数:
array<Byte>^ Class::Function();
我想从具有以下签名的本机 C++ 类公开此函数:
shared_array<unsigned char> Class::Function();
我已经从本机代码调用托管函数,但我不确定如何安全地复制将托管数组转换为非托管数组。
gcroot<cli::array<System::Byte>^> managedArray = _managedObject->Function();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
有两种常用方法:
使用本机代码执行封送处理,这需要使用
pin_ptr
:使用托管代码执行封送处理,这需要使用 Marshal 类:< /p>
通常我更喜欢后一种方法,因为如果数组很大,前者会阻碍 GC 的效率。
There are two usual approaches:
Perform the marshaling with native code, which requires use of
pin_ptr<>
:Perform the marshaling with managed code, which requires use of the Marshal class:
Generally I would prefer the latter approach, as the former can hinder the GC's effectiveness if the array is large.
看看
pin_ptr
,它允许您将托管类的地址传递给非托管函数。Take a look at
pin_ptr
, it lets you pass address of a managed class to an unmanaged function.