独自の DLL ヘッダーに宣言があります。
class CJDummyClass
{
};
typedef CJDummyClass * J_IMG_CALLBACK_OBJECT;
#ifdef __BORLANDC__
typedef void (__stdcall*J_IMG_CALLBACK_FUNCTION)(J_tIMAGE_INFO * pAqImageInfo);
#else
typedef void (CJDummyClass::*J_IMG_CALLBACK_FUNCTION)(J_tIMAGE_INFO * pAqImageInfo);
#endif
また、コールバック関数を DLL にリンクするためのエクスポートされた関数があり、ポインタ pAqImageInfo によってメモリに配置された一部のデータを処理することが可能です。
FreePascal でこの DLL を使用してアプリケーションを作成しています。必要なほとんどすべてが正常に変換され、動的にリンクされ、クラスにラップされていますが、コールバック関数に問題があります。ここに私のコードの一部があります:
interface
type
pJ_tIMAGE_INFO = ^J_tIMAGE_INFO;
TJ_IMG_CALLBACK_FUNCTION = procedure( const pAqImageInfo: pJ_tIMAGE_INFO ) of object; cdecl;
PJ_IMG_CALLBACK_FUNCTION = ^TJ_IMG_CALLBACK_FUNCTION;
TJaiFactory = class( TObject )
.....
procedure ImageCallback( const pAqImageInfo: pJ_tIMAGE_INFO ); cdecl;
.....
end;
implementation
procedure TJaiFactory.ImageCallback(pAqImageInfo: pJ_tIMAGE_INFO); cdecl;
begin
// some data processing here
end;
私の ImageCallback の中で、実際のポインターの代わりに pAqImageInfo = nil を取得しました。コールバックの型またはパラメーターを別の方法で定義する必要があると思われますが、その方法がわかりません。
最初の質問: C++ に void 関数がある場合、私が理解している限り、それは Pascal で言えば手続きであり、手続きとして、または何らかのポインター結果を持つ関数として定義する必要があります (ただし、実際の結果はありません)。
2 番目の質問: 関数が C++ でクラスのメンバーとして宣言されている場合、この関数の型を Pascal に変換する正しい方法は何ですか? 「この」ポインターで何が起こっているのかわかりません。
ありがとうございました。