2012-10-17 55 views
8

是否可以從C頭文件自動生成接口單元?特別是,我想包裝HDF5庫,如果我可以避免手動編寫接口單元,那將是一件好事。從C頭文件自動創建Delphi/Freepascal接口單元

+0

這看起來像一個非常龐大而複雜的圖書館。我會自信地預測,沒有一種工具可以做出一個好的和全面的翻譯。 –

+1

hdf庫[here](http://dspatial.sourceforge.net/)的第4版的Delphi有部分翻譯。你會在'Drivers'文件夾下找到它。它可以作爲翻譯的第一步。 –

+0

問題是HDF4和HDF5除了名稱中的* HDF *之外不共享任何內容...... –

回答

11

免費pascal包括H2PAS工具。

h2pas嘗試將C頭文件轉換爲pascal單元。它可以處理大多數在C頭文件中找到的C結構,並且 會嘗試將它們轉換爲它們的pascal對應文件。

+0

它比我使用的其他工具要好,但實際上您仍然需要手動進行大量後期處理。 –

+0

這看起來像是要走的路。我會看到它實際上得到了多少... –

5

鮑勃·斯沃特()有一個工具,它會轉換成大量的頭文件(雖然通常有參與以及一些體力勞動)呼籲HeaderConvert。我從來沒有將它與工具@RRUZ鏈接進行比較,但它是另一種選擇。

Project JEDI也有一個;我從未測試過它。你可以找到它here

+0

傑迪一個基本上是headconv一樣。 –

5

一般而言全自動平移C頭到別的(即不是所需要的C功能的有效超集)很難不可能

這是因爲由於宏而無法看到如何翻譯它們。宏常常只從上下文中獲得它們的意義。實施例

#define uglymacro 1,2,3,4 

而且(這是一個更常見的):

SCARYAPIMACRO void func(int c); 

SCARYAPIMACRO然後經常用於測試OS定義以選擇合適的OS /架構的權利調用約定的宏。

儘管如此,這並不意味着這些工具並不是真正的時間檔。但結果是更半自動的,我對h2pas有最多最好的體驗。

我翻譯了很多Windows頭文件(包括FPC的commctrl,每隔幾行都有一個sendmessage宏)。

我通常所做的是製作一個小型pascal程序,它掃描源代碼行並使用啓發式方法將代碼拆分爲大部分均勻的部分(所有結構或常量,宏,過程聲明等)。然後我看着源頭,經常做一些全球替代品。

只有當我通過翻譯器運行它時,這個過程通常是迭代的(細化分離,做全局替換,嘗試翻譯,如果失敗,再試一次等​​)。

不幸的是,這個過程需要掌握C語言,編譯指示等。