私はC#ライブラリを呼び出す必要があるネイティブC++アプリケーションを持っています。さまざまなオプションを調べた後、C++/CLIライブラリをラッパーとして追加して、2つの間のダイレクトインターフェイスを処理するようにしました。私は非常に大きな配列を持っているので、私はC++からC#に渡しています(Marshal :: Copyでコピーを作るのは大変です)。私は構文を解決することができませんでした。C++/CLIによるC#配列へのネイティブC++配列
Cは#関数宣言:
void Computation::passInVolume(int size, short volume[])
C++/CLI機能:
void Wrapper::passInVolume(int size, short volume[])
{
//this call succeeds, but does not contain my data
array<short>^ locArray = gcnew array<short>(size);
// This line produces: error C2440: 'type cast' : cannot convert from
// 'short []' to 'cli::array<Type> ^'
array<short>^ locArray2 = (array<short>^)volume;
// call requires array<short>^ as input type
Computation::passInVolume(size, locArray);
}
C++コード:
volImage = (short*)malloc(size*sizeof(short));
...
wrapper->passInVolume(size, volImage);
私は行方不明です、これをキャストする方法はありますか?私はこれを他の方法で成功させました。C#をC#から呼び出しました。元帥::コピーを経由してコピーを作成すること
私はリファクタリングをC#のポインタを使用して終了しました。努力は私が最初に考えたほど悪くはなかった。 – Beast