Передача массива из неуправляемого C ++ в C# - PullRequest
3 голосов
/ 26 марта 2020

Я новичок в оболочке 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, но я не смог передать массив. Можете ли вы указать мне, что мне не хватает?
Нужно ли мне также переносить ключевое слово "const" в CLI?

1 Ответ

0 голосов
/ 26 марта 2020

Здесь описывается, как копировать между управляемым и неуправляемым массивами . Пример Из этого вопроса :

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

Как уже упоминалось в комментариях, вам абсолютно необходимо знать количество элементов в исходном массиве.

...