3

この投稿の情報を使用しました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整数をマーシャルバックすることができます。

4

1 に答える 1

4

Safecall と StdCall は同じものではありません。Delphi 側でも StdCall を使用してみてください。

于 2013-03-04T04:47:14.013 に答える