我是 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.");
}
原生 header
const double *GetOutputAverage() const;
包装 header
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
};
我打算将 native 返回转换为 CLI 数组,但我无法传递该数组。
你能指出我缺少什么吗?
我是否还需要在 CLI 中携带“const”关键字?
最佳答案
这描述了如何copy between managed and unmanaged arrays 。 示例From this question :
System::Runtime::InteropServices::Marshal::Copy( IntPtr( ( void * ) sourcePointer), targetManagedArray, 0, dataSize );
正如评论中提到的,您绝对需要知道源数组中的项目数。
关于c# - 将数组从非托管 C++ 传递到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60864640/