0

文字列パラメータを取るデルファイ関数があります:

function a(param: string): integer;
begin
{do something}
end

その関数を C++ から呼び出すにはどうすればよいですか? 文字列を pchar または pansichar に切り替えましたが、うまくいきませんでした。C++ typedef は

typedef int (*StringFunction) (char *a);

私はそれを次のように実行します

char *b = "abc";
StringFunction sf;
//loading sf
cout << sf(b);
4

1 に答える 1

4

その関数を C++ から呼び出すことはできません。Delphistring型はプライベート Delphi 型です。相互運用のために、null で終わる文字配列へのポインターを使用する必要があります。C++ ではchar*、Delphi では ですPAnsiChar

さらに、Delphi 関数registerは、レジスタ ベースのfastcall規則である呼び出し規則を使用します。繰り返しますが、他の言語からはアクセスできません。標準の呼び出し規約のいずれかを使用する必要があります。

C++ コードの関数ポインターは既に を渡し、呼び出し規約char*を使用しています。cdeclしたがって、Delphi 関数を一致させるだけで済みます。

function a(param: PAnsiChar): integer; cdecl;

上記の宣言は、質問の C++ コードと互換性があります。


使用stdcallしたい場合は、Delphi と C++ コードの両方を変更する必要があります。

デルファイ

function a(param: PAnsiChar): integer; stdcall;

C++

typedef int (__stdcall *StringFunction) (char *a);
于 2013-07-02T08:00:38.537 に答える