私はC++を学んでおり、戻り値の型として配列を持つことは不可能です。これは本当ですか?C++で戻り値の型として配列を持つことはできませんか?代替案?
int foo(){}
正常に動作しますが、
int[] foo(){}
はしていません。これには一般に認められている作業は何ですか?
私は現在、C#とC++の両方を使用するプロジェクトに取り組んでいます。 .cppファイルがあるの内側に
TEST_DLL BYTE[][] getBytes(std::string filePath, std::string dataGroup);
/* This throws an error since I can't use an array as a return type. */
と私の実装:
TEST_DLL BYTE[][] getBytes(std::string filePath, std::string dataGroup)
{
printf("getBytes entered."
/* More code here...*/
}
/* This also throws an error due to the array use. */
基本的には、
[DllImport("Test.dll")]
public static extern byte[,] getBytes(
[In] string filePath,
[In] string dataGroup);
私のヘッダファイルがあります:私はいくつかのDLLのコードにアクセスするC#ファイルを持っています私は、DLLコードから2Dバイト配列を返すことを試みています。つまり、C#側で何かを変換する必要はありません。つまり、getBytesに関連するすべてのコード実行がC++コードで発生するはずです。
私は配列を使用せず、むしろvoid *を使用していますが、これは私が理解しているところから戻ってくる配列へのポインタです。次に、IntPtrとMarshal.Copyを使用してバイト配列を取得するC#関数があります。私は2つの方法のオーバーヘッドの違いを判断しようとしています。追加のC#変換コード(私が使用しているデータセットは巨大です - 500GBを超えるもので、最適化カウントを少しずつ)を使用するのではなく、C++コードから2Dバイト配列を直接返す方がはるかに速いと思います。
基本的に、私はC++でコードを変換せずに2Dバイト配列を純粋にC++コードから取得できますか?
int * foo(){}は動作します – Steve
C++では、* you *は配列を返すことができないので、 'std :: vector'を使用してください。 –
それはC#と相互作用するつもりはないと思いますが、私は考えていませんか? –