gpt4 book ai didi

将 typedef 结构从 C 转换为 Pascal

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:03 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com