この投稿の情報を使用しましたDelphi-型指定されていないポインターなどから入力された動的配列からのデータへのアクセスに加えて、RobertGieseckeのUnmanagedExportsを使用して、すばらしいコードを記述しました-皆さんに感謝します。たとえば、C#からDelphiに複雑なバイトストリームを返すメソッドを作成しました。しかし、私は問題を抱えています。最も単純なこと、つまり関数呼び出しから整数を返すことです。
したがって、このプロトタイプをDelphiで定義します。
TReturnIntFunc = function(AnInteger: Integer): Integer; safecall;
そしてこれはC#で:
[DllExport("NegateInt", CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.I4)]
static Int32 NegateInt([MarshalAs(UnmanagedType.I4)] Int32 AnInteger)
{
return AnInteger * -1;
}
私が書いた他のメソッドと同様に、C#DLLを動的にロードし、関数を問題なく見つけますが、Delphiから実行すると、「セーフコールメソッドの例外」というメッセージとともに例外がスローされます。
誰か手がかりはありますか?戻り値としてではなく、outまたはref整数をマーシャルバックすることができます。