对于DLL的使用,我只有C头文件可用。现在我将这些头文件转换为Delphi接口文件。这很有效,直到出现像这样的复杂C Typedef:
typedef struct _IFSDK_PAUSE
{
int version;
FPDF_BOOL (*NeedToPauseNow) (struct _IFSDK_PAUSE* pThis);
void* user;
} IFSDK_PAUSE;
转换为:
type
IFSDK_PAUSE = record
version: Integer;
pThis: <----- Problem!!!
user: Pointer;
end
如何正确转换这些复杂的Typedef?
答案 0 :(得分:7)
这是一个函数指针。它接收一个指向struct的指针,并返回FPDF_BOOL
。据推测,由于没有指定调用约定,因此cdecl
的默认调用约定适用。
有了这些信息,你会像这样翻译成Delphi:
type
PIFSDK_PAUSE = ^IFSDK_PAUSE;
TNeedToPauseNow = function(pThis: PIFSDK_PAUSE): FPDF_BOOL; cdecl;
IFSDK_PAUSE = record
version: Integer;
NeedToPauseNow: TNeedToPauseNow;
user: Pointer;
end;
请注意,与C不同,Delphi过程类型隐含为指针。