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

我是C#的C ++ / CLI包装新手,在将数组传递给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”关键字?

参考方案

这描述了如何copy between managed and unmanaged arrays。
示例From this question:

System::Runtime::InteropServices::Marshal::Copy( IntPtr( ( void * ) sourcePointer), targetManagedArray, 0, dataSize ); 

如评论中所述,您绝对需要知道源数组中的项目数。

在Java中,执行“ ++++++++”表达式,编译器未报告任何错误并且可以正确执行? - java

我用eclipse编写了这段代码,用war写过,结果为3d。public static void main(String[] args) { double a = 5d + + + + + +-+3d; System.out.println(a); } 参考方案 您的表情可以改写为(5d) + (+ + + + +-+3d) 其中第一个+是应用于两个操作数的…

在Python和C++之间传输数据而无需写入Windows和Unix文件 - python

我有预先存在的python和C ++文件,其中python文件定义了许多点,而C ++代码利用其现有库进行了所需的计算。最终产品是C ++代码写入的文件。我正在寻找一种在python中获取2000点列表的方法,将其传递给函数,然后执行所有C ++代码并输出我需要的文件。其他注意事项。这必须是可以在Linux或Windows机器上工作的东西,并且最少安装新插件…

Java值加变量++ - java

考虑以下代码int val1 = 3; val1++; int val2 = val1++; System.out.println(val1); System.out.println(val2); Val1值= 5;Val2值= 4;为什么Val1的值是“ 5”?据我了解,应该为4,因为:在第1行,它的赋值为3,在第2行,通过val1 ++加上1,结果val…

如何锁定终端运行的perl,obj c,c++,python和ruby等脚本的源代码? - python

我想出售我在perl,obj c,c ++,python,ruby,bash,php等中制作的脚本等它们都在终端中运行。 (Linux)如何锁定源代码,以便无需人们访问源代码即可分发我的脚本..?换句话说,如何将在Terminal中运行的程序的源代码锁定,以便人们可以使用该程序(如果该代码已下载到他们的Linux机器上,但他们无法访问实际的源代码)?例:ex…

为什么C++中的void方法可以返回void值,而在其他语言中却不能呢? - java

该程序可以用C ++编译并运行,但不能使用多种不同的语言,例如Java和C#。#include <iostream> using namespace std; void foo2() { cout << "foo 2.\n"; } void foo() { return foo2(); } int main() {…