[英]Passing an array from unmanaged C++ to C#
我是 C++/CLI 包装到 C# 的新手,我在将数组传递给 C# 时遇到了一些问题。
本机 C++
const double *NDimInversion::GetOutputAverage() const
{
if ( mOutputOk )
return mAvgY.data().begin();
else
throw runtime_error("Error in NDimInversion::GetOutputAverage(): output not available.");
}
本机标头
const double *GetOutputAverage() const;
包装头
public ref class NDimInversion
public:
array<double>^ GetOutputAverage();
包装器 C++
array<double>^ NDimInversion::GetOutputAverage() {
array<double> tempArr = nDimInversion->GetOutputAverage(); // ????
const int SIZE = tempArr.size();
array<double>^ tempReturn = gcnew array<double>(SIZE);
for (int i = 0; i < SIZE; i++)
{
tempReturn[i] = tempArr[i];
}
return tempReturn
};
我打算将本机返回转换为 CLI 数组,但我无法传递该数组。 你能指出我缺少什么吗?
我是否还需要在 CLI 中携带“const”关键字?
这描述了如何在托管和非托管阵列之间进行复制。 示例来自这个问题:
System::Runtime::InteropServices::Marshal::Copy( IntPtr( ( void * ) sourcePointer), targetManagedArray, 0, dataSize );
正如评论中提到的,您绝对需要知道源数组中的项目数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.