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

时间:2013-01-03 09:55:13

标签: c delphi

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

1 个答案:

答案 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过程类型隐含为指针。