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

标签 c# c++ c++-cli

我是 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/

相关文章:

C# 方法类似于 Base64String,但只有字母数字(没有加号或斜线)

c# - 使用 LINQ 从文件中读取前 10 行

c++ - GCC/CLang 不同意模板模板参数的部分特化

c++ - cmath std::pow 函数在分配给变量时给出错误的值?

c++ - 在没有visual studio的电脑上运行opencv dll

c++ - 在 .cpp 文件中包含头文件时基类未定义

如果 volatile 不是一个好主意,C# 替代锁定

c# - 当我更新一行时,gridview 中的所有行都会更新

c++ - 用C++、EWS通过exchange服务器发送邮件

.net - 如何在 WindowsC++/CLI 中获取应用程序的可执行文件名?