是否可以從C頭文件自動生成接口單元?特別是,我想包裝HDF5庫,如果我可以避免手動編寫接口單元,那將是一件好事。從C頭文件自動創建Delphi/Freepascal接口單元
回答
免費pascal包括H2PAS工具。
h2pas嘗試將C頭文件轉換爲pascal單元。它可以處理大多數在C頭文件中找到的C結構,並且 會嘗試將它們轉換爲它們的pascal對應文件。
它比我使用的其他工具要好,但實際上您仍然需要手動進行大量後期處理。 –
這看起來像是要走的路。我會看到它實際上得到了多少... –
鮑勃·斯沃特()有一個工具,它會轉換成大量的頭文件(雖然通常有參與以及一些體力勞動)呼籲HeaderConvert。我從來沒有將它與工具@RRUZ鏈接進行比較,但它是另一種選擇。
Project JEDI也有一個;我從未測試過它。你可以找到它here。
傑迪一個基本上是headconv一樣。 –
一般而言全自動平移C頭到別的(即不是所需要的C功能的有效超集)很難不可能。
這是因爲由於宏而無法看到如何翻譯它們。宏常常只從上下文中獲得它們的意義。實施例
#define uglymacro 1,2,3,4
而且(這是一個更常見的):
SCARYAPIMACRO void func(int c);
SCARYAPIMACRO然後經常用於測試OS定義以選擇合適的OS /架構的權利調用約定的宏。
儘管如此,這並不意味着這些工具並不是真正的時間檔。但結果是更半自動的,我對h2pas有最多最好的體驗。
我翻譯了很多Windows頭文件(包括FPC的commctrl,每隔幾行都有一個sendmessage宏)。
我通常所做的是製作一個小型pascal程序,它掃描源代碼行並使用啓發式方法將代碼拆分爲大部分均勻的部分(所有結構或常量,宏,過程聲明等)。然後我看着源頭,經常做一些全球替代品。
只有當我通過翻譯器運行它時,這個過程通常是迭代的(細化分離,做全局替換,嘗試翻譯,如果失敗,再試一次等)。
不幸的是,這個過程需要掌握C語言,編譯指示等。
您可以用源代碼和略加修改hdf5dll從我的頁面下載HDF5 API頭德爾福翻譯,德爾福XE2 HDF5表測試程序: http://www.astro.ff.vu.lt/index.php?option=com_content&task=view&id=46&Itemid=63
- 1. 從c頭自動創建C#包裝?
- 2. 從C++頭文件生成Java接口
- 3. 自動從C創建CSV ++文件
- 4. C++/cli接口頭文件
- 5. 停止Xcode自動生成Objective-C頭文件的Swift接口
- 6. 從c頭創建mod文件
- 7. 從頭自動生成C++文件?
- 8. Excel VBA:如何從單元格值自動創建超鏈接?
- 9. 從Gtk C++源文件和頭文件創建Glade XML文件
- 10. Installshield自動化接口參考創建文件夾
- 11. 自動從Excel創建文本文件
- 12. C++ - 自動將函數從頭文件移動到cpp文件
- 13. C++在頭文件空接口析
- 14. 自動創建文件名C++
- 15. 用C自動創建多個文件
- 16. 如何從C++中的文件創建自定義QML元素?
- 17. C#創建DLL插件,實現接口
- 18. 創建接口來自類
- 19. 在C#中爲接口自動創建存根屬性?
- 20. 頭文件(.h)中創建C編程
- 21. 在C++中創建頭文件
- 22. 錯誤而在C++創建頭文件
- 23. 如何創建C頭文件
- 24. 關於C頭文件創建錯誤++
- 25. 從QTableWidget行/單元格在Windows中創建可拖放文件鏈接拖動
- 26. 自動創建單元測試(半)?
- 27. 如何使用Resharper從類內自動創建接口成員?
- 28. 創建Android活動類的頭文件
- 29. 如何創建手動php頭文件?
- 30. Linux C創建無頭文件庫的自定義printf函數
這看起來像一個非常龐大而複雜的圖書館。我會自信地預測,沒有一種工具可以做出一個好的和全面的翻譯。 –
hdf庫[here](http://dspatial.sourceforge.net/)的第4版的Delphi有部分翻譯。你會在'Drivers'文件夾下找到它。它可以作爲翻譯的第一步。 –
問題是HDF4和HDF5除了名稱中的* HDF *之外不共享任何內容...... –