【发布时间】:2011-10-13 19:50:28
【问题描述】:
我正在围绕一个用 C++\CLI 编写的托管组件编写本机包装器。
我在托管代码中有以下功能:
array<Byte>^ Class::Function();
我想使用以下签名从本机 C++ 类公开此函数:
shared_array<unsigned char> Class::Function();
我已经从本机代码调用托管函数,但我不确定如何安全地将托管数组复制到非托管数组中。
gcroot<cli::array<System::Byte>^> managedArray = _managedObject->Function();
【问题讨论】:
-
你希望如何从函数中返回一个不可复制、不可移动的对象?
-
这是一个很好的观点 - 我想我实际上没有:S。应该是一个 shared_array。
-
我假设
shared_array来自 boost,对吗? -
@R.MartinhoFernandes - 正确。出于这个问题的目的,尽管它可以很容易地成为
unsigned char*。 -
请注意,如果您使用的是 VC++ 2010(或 VC11 预览版),
std::unique_ptr<unsigned char[]>将是理想的高效返回类型。
标签: .net c++ c++-cli marshalling