0
這是這個函數的C++頭文件。我已經輸入了所有東西,除了那個calllback,我不知道該怎麼做。將delphi的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.
} ;
這是不正確的德爾福聲明使用常量。在C++中const意味着不可修改;在delphi中表示通過ref傳遞並且不可修改:改爲使用(operation:PBASOperation,...)或(const操作:TABSOperaion ...) – 2012-04-23 08:51:01
@Stefano實際上,'const'是由Remy編輯添加的。但在這裏沒問題,無論你是否包含'const',都沒有關係。你說在Delphi中'const'的意思是「通過ref傳遞」。該陳述是錯誤的。如果參數大於指針的大小,則使用'const'會引起ref傳遞。事實上,當移植到64位時,這是一些非常微妙的錯誤的來源。考慮一個8號的「記錄」,「TRecord」說。在32位傳遞'const R:TRecord',它通過ref傳遞。以64位傳遞,並按值傳遞。 – 2012-04-23 08:58:42
謝謝,我不知道這種細微差別。我使用記錄大小<= 4個字節並使用大於8的記錄在我的D7中測試了您的案例(使用CPU視圖)。在第一種情況下,參數在AX中傳遞(al,ax或者eax,取決於輸入的大小)。在第二種情況下,輸入地址傳入EDX。但是我的看法是一樣的:在翻譯C函數聲明時不要使用const參數。你依賴於編譯器實現和CPU架構。如果「struct abs_operation」有另一個字段,那麼它將通過32位的值和64位的delphi中的ref傳遞! – 2012-04-23 12:41:57