将typedef结构从C转换为Pascal

时间:2013-10-10 17:11:33

标签: c struct typedef pascal

我正在尝试将C-Header转换为pascal,但我正在努力解决以下问题:

typedef struct GLFWwindow GLFWwindow;

由于我不擅长C,我甚至无法弄清楚这句话的意思。因此我也无法翻译它。

是某种匿名结构还是句柄?在随后的代码中,它通常被称为如下:

typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int);

让我最困惑的是,结构没有在任何地方定义(它没有成员?!)。我认为答案非常简单,但我希望有人能帮助我:)。

1 个答案:

答案 0 :(得分:1)

Afaik是的,它是一个前向定义,使结构变得模糊,但最终的结构应该在实现之前使用之前声明。

此构造在Pascal中没有直接等效,最好用单个“指针”或指向空记录的指针替换。

第二个构造是一个过程类型声明

type
   PGLFWWindow = ^GLFWWindow;  // pointer types need explicit declaration 
                                           // in most modern pascals
   TGLFWwindowposfun = Procedure (param1:PGLFFwindowposfun; 
                                             param2,param3:integer);cdecl;

请注意

  1. 前缀“P”,“T”,delphi样式,因为所有标识符共享一个名称空间基类标识符由匈牙利前缀表示法分开(P =指针,T =类型等)。 为了保持一致性,GLFWindow类型最好也使用T作为前缀。
  2. 整数类型通常与C相同,但是例如在默认模式下FreePascal整数是16位(用于TP兼容性)。如果使用FPC,ctypes.cint最适合C的整数。
  3. 由于默认的Pascal调用约定通常与x86上的C不同,我应用了一个调用约定修饰符cdecl,这意味着“C调用约定”。
  4. 附录要明确,GLFWINDOW将是一个空记录(GLWINDOW =记录结束;),而不是指向空记录的指针。