0
これはこの関数のC++ヘッダーです。私はそのコールバックを除いて既にすべてをインポートしました。私はそれを行う方法を知らない。以前の質問の知識に基づいてデルファイへのC++コールバック関数のインポート
struct abs_operation;
typedef struct abs_operation ABS_OPERATION; /* forward declaration */
typedef void (BSAPI *ABS_CALLBACK) (const ABS_OPERATION*, ABS_DWORD, void*);
struct abs_operation {
ABS_CALLBACK Callback; ///< Pointer to application-defined function, implementing operation callback.
} ;
Delphiの宣言でのconstを使用する権利はありません。 C++では、constは変更できません。 (オペレーション:PBASOperation、...)または(constオペレーション:TABSOperaion ...) –
@Stefano実際には、 'const'はRemyによる編集で追加されました。しかし、ここでは問題ありません。実際には 'const'を含めるかどうかは関係ありません。あなたは、デルファイの「const」は「ref by passed」を意味します。その声明は偽です。 'const'を使うと、パラメータの大きさがポインタの大きさより大きければ、refによるパスを誘導します。実際、これは64ビットに移植するときの非常に微妙なバグの原因です。サイズ8の 'record'を考えてみましょう。 32ビットで 'const R:TRecord'を渡し、refで渡します。そのように64ビットで渡し、値渡しされます。 –
ありがとう、私はその微妙な違いを知らなかった。 D7でレコードサイズ<= 4バイトを使用し、レコード> 8を使用して(CPUビューを使用して)あなたのケースをテストしました。最初のケースでは、引数はAX(al、axまたはeaxの大きさに応じて)で渡されます。 2番目のケースでは、入力アドレスがEDXに渡されます。しかし、私の意見は同じです:Cの関数宣言を翻訳するときにconstパラメータを使用しないでください。あなたはコンパイラの実装とCPUアーキテクチャに依存します。 "struct abs_operation"に別のフィールドがあった場合は、32ビットの値と64ビットのデルファイのrefで渡されます。 –