将 typedef 结构从 C 转换为 Pascal

标签 c struct typedef pascal

我正在尝试将 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;

注意

  1. 前缀“P”、“T”,delphi 风格,因为所有标识符共享一个命名空间,标识符的基类由匈牙利前缀符号(P=指针、T=类型等)分隔。 为了保持一致性,GLFWindow 类型最好也加上 T 前缀。
  2. 整数类型通常与 C 相同,但例如在默认模式下 FreePascal整数是 16 位(为了 TP 兼容性)。如果使用 FPC,ctypes.cint 最适合 C 的整数。
  3. 由于默认的 Pascal 调用约定通常与 x86 上的 C 不同,我应用了调用约定修饰符 cdecl,意思是“C 调用约定”。

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

关于将 typedef 结构从 C 转换为 Pascal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19302075/

相关文章:

c - 在 Contiki 程序中使用 malloc

c++ - 指向结构对象的指针作为函数的参数 - 打印时出现奇怪的文本

c - 尝试将整个结构从最高等级排序到最低等级

arrays - fscanf 一个数字并将每个数字存储在数组中

c - 为什么即使ASLR开启,__ libc_start_main的地址在GDB中也总是相同?

c# - 在结构中使用 boolean 值的一些 P/Invoke C# 到 C 编码问题

c - 预期标识符 - C

C++ 类型定义错误

c++ - 什么时候有人会使用 union ?它是C-only时代的残余吗?

C fscanf 输入验证