2013-10-10 51 views
1

我想一个C-头转换为帕斯卡,但我有以下行挣扎:转换typedef结构帕斯卡

typedef struct GLFWwindow GLFWwindow; 

因为我不是在CI很好的可我甚至不知道这个说法是什么意思。因此我也无法翻译它。

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

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

它混淆了我最多的是,该结构不被任何定义(它没有成员?!)的事情。我认为答案非常简单,但我希望有人能帮助我:)

+0

那是一个前向声明。很难说没有更多的代码。 – 2013-10-10 17:13:28

+0

完整的源代码可以在这里找到:http://sourceforge.net/projects/glfw/files/glfw/3.0.3/glfw-3.0.3.zip/download 也许我只是失明,但我不能找到任何以下定义。 – Oelfrachter

回答

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调用约定”。

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