对于DLL的使用,我只有C头文件可用.现在我将这些头文件转换为Delphi接口文件.这很有效,直到出现像这样的复杂C Typedef:
typedef struct _IFSDK_PAUSE
{
int version;
FPDF_BOOL (*NeedToPauseNow) (struct _IFSDK_PAUSE* pThis);
void* user;
} IFSDK_PAUSE;
Run Code Online (Sandbox Code Playgroud)
转换为:
type
IFSDK_PAUSE = record
version: Integer;
pThis: <----- Problem!!!
user: Pointer;
end
Run Code Online (Sandbox Code Playgroud)
如何正确转换这些复杂的Typedef?
那是一个函数指针.它接收一个指向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;
Run Code Online (Sandbox Code Playgroud)
请注意,与C不同,Delphi过程类型是隐式的指针.