1

我正在尝试将 C-Header 转换为 pascal,但我正在努力处理以下行:

typedef struct GLFWwindow GLFWwindow;

由于我不太擅长 CI,因此我什至无法弄清楚这句话的含义。因此我也无法翻译。

它是某种匿名结构还是句柄?在后面的代码中,通常这样称呼它:

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

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

4

1 回答 1

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=pointer,T=type 等)分开。GLFWindow 类型最好也以 T 为前缀,以保持一致性。
  2. 整数类型通常与 C 相同,但例如在默认模式下FreePascal整数是 16 位(为了 TP 兼容性)。如果使用 FPC,ctypes.cint 最适合 C 的整数。
  3. 由于默认的 Pascal 调用约定通常与 x86 上的 C 不同,因此我应用了调用约定修饰符 cdecl,意思是“C 调用约定”。

补充要清楚,GLFWINDOW 将是一个空记录(GLWINDOW= 记录结束;),而不是指向空记录的指针。

于 2013-10-11T13:52:24.927 回答