簡體   English   中英

將typedef結構從C轉換為Pascal

[英]Convert typedef struct from C to Pascal

我正在嘗試將C-Header轉換為pascal,但是我在以下行中苦苦掙扎:

typedef struct GLFWwindow GLFWwindow;

由於我不太擅長CI,所以我什至無法弄清楚這句話的意思。 因此,我也無法翻譯。

它是某種匿名結構還是句柄? 在后續代碼中,通常將其稱為:

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

最讓我困惑的是,結構沒有在任何地方定義(它沒有成員?!)。 我認為答案非常簡單,但我希望有人能幫助我:)

Afaik是的,它是一個前向定義,使struct變得模糊,但是最終struct應該在實現中使用之前聲明。

此構造在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 =記錄結束;),而不是指向空記錄的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM