繁体   English   中英

将数组从非托管 C++ 传递到 C#

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM