出力パラメーターとして列挙型の配列へのポインターと配列の長さを受け取り、変更された値の数を返す、事前に構築された C++ API があります。この関数の目的は、後で使用するために配列に値を設定することです。独自のバージョンの列挙型を含む C# コードからこの関数を呼び出そうとしています。
C++ 関数のシグネチャは次のようになります。
static int DoAThing(SomeEnum outArray[], int length)
私のC#関数呼び出しは現在次のようになっています:
[DLLImport("API.dll", EntryPoint="DoAThing")]
public static extern int DoAThing([MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U4, SizeParamIndex = 1)]ref WrappedEnum[] outArray, int length);
私の呼び出しコードは次のようになります。
int length = 10;
WrappedEnum[] outArray = new WrappedEnum[length];
DoAThing(ref outArray, length);
関数を問題なく呼び出すことができますが、有用なコールスタックや情報がないマネージ コードに戻ろうとするたびに、NullReferenceException が発生し続けます。また、GCHandle.Alloc を使用して GCHandle に outArray をラップしようとしましたが、うまくいきませんでした。何か案は?