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