2

For the use of a DLL I have only the C Header Files available. Now I am converting these header files to Delphi Interface Files. That works quite well till there occur complex C Typedef like this one:

  typedef struct _IFSDK_PAUSE
  {
    int version;
    FPDF_BOOL (*NeedToPauseNow) (struct _IFSDK_PAUSE* pThis);
    void*       user;
  } IFSDK_PAUSE;

that converts to:

type
  IFSDK_PAUSE = record

    version: Integer;

    pThis: <----- Problem!!!

    user: Pointer;
  end

How do I convert these complex Typedefs correctly?

4

1 回答 1

7

那是一个函数指针。它接收一个指向结构的指针,并返回一个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 过程类型隐含地是一个指针。

于 2013-01-03T10:05:08.600 回答