我正在尝试将 C-Header 转换为 Pascal,但我正在努力处理以下行:
typedef struct GLFWwindow GLFWwindow;
由于我不是很擅长 C,所以我什至无法弄清楚这句话是什么意思。所以我也无法翻译它。
它是某种匿名结构还是句柄?在后续的代码中通常是这样引用的:
typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int);
最让我困惑的是,结构没有在任何地方定义(它没有成员?!)。我认为答案非常简单,但我希望有人能帮助我 :)
最佳答案
Afaik 是的,它是一个前向定义,使结构不透明,但最终的结构应该在实现中使用之前声明。
此构造在 Pascal 中没有直接等效项,最好由单个“指针”或指向空记录的指针代替。
第二个构造是过程类型声明
type
PGLFWWindow = ^GLFWWindow; // pointer types need explicit declaration
// in most modern pascals
TGLFWwindowposfun = Procedure (param1:PGLFFwindowposfun;
param2,param3:integer);cdecl;
注意
- 前缀“P”、“T”,delphi 风格,因为所有标识符共享一个命名空间,标识符的基类由匈牙利前缀符号(P=指针、T=类型等)分隔。 为了保持一致性,GLFWindow 类型最好也加上 T 前缀。
- 整数类型通常与 C 相同,但例如在默认模式下 FreePascal整数是 16 位(为了 TP 兼容性)。如果使用 FPC,ctypes.cint 最适合 C 的整数。
- 由于默认的 Pascal 调用约定通常与 x86 上的 C 不同,我应用了调用约定修饰符 cdecl,意思是“C 调用约定”。
附录要清楚,GLFWINDOW 将是一个空记录(GLWINDOW= 记录结束;),而不是指向空记录的指针。
关于将 typedef 结构从 C 转换为 Pascal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19302075/