将复杂的C Typedef语句转换为Delphi记录

fru*_*ugi 2 c delphi

对于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?

Dav*_*nan 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;
Run Code Online (Sandbox Code Playgroud)

请注意,与C不同,Delphi过程类型是隐式的指针.