私はC++プロジェクトから形成されたナゲットを持っています - そのナゲットの中に別のプロジェクトの(C#)RESTサービスコールで呼び出す静的クラスFileAccess.csの内部にGetBytes
いくつかのデータを取得します。私はこのC#RESTサービスからGetBytes
extern
メソッドを呼び出すときはいつも何らかの理由でAccessViolationException
を取得します。このメソッドは2つの文字列と複数のint値を取り、IntPtr
を返します。直接的にexternメソッドを呼び出すときにAccessViolationExceptionが発生する
違反を起こさない同様の呼び出しがあるので、私は混乱しています。主な違いは、このバージョンはexternメソッドを直接呼び出さないという点です。代わりに、externメソッドを呼び出す関数を含むC#DataGroupクラス(ナゲットの一部)を呼び出します。 DataGroupクラスメソッドは、byte[,]
を返しますが、externメソッドを呼び出してデータをマーシャリングした後にのみ返します。
// AccessViolationもたらすバージョン:
IntPtr
としてのextern方法に
- RESTコール(
IntPtr ptr = FileAccess.getBytes(...);
- のextern方法は
IntPtr
AccessViolationException
を返すは//と作業バージョンを
を発生します余分なクラス:
byte[,]
を返すデータグループメソッドへのREST呼び出し。 (例えばdataGroupInstance.getDataGroupBytes();
- のextern方法は方法
getDataGroupBytes
- のexternメソッド内部と呼ばれているが
IntPtr
からIntPtr
- 方法
getDataGroupBytes
マーシャリングデータを返し、基本的byte[,]
- エラーなし
を返し、理由でありますexternメソッドを直接呼び出してAccessViolationException
?
'FileAccess.getBytes(...);'メソッドがvarargsをとる場合は、PInvokeシグネチャに 'CallingConvention.Cdecl'を設定してください。 – Peter