我有一個頭文件爲某個庫聲明瞭一個C API,我想爲這個lib創建一個OCaml綁定。我發現camlidl可以從IDL文件創建存根,但據我所知,沒有從*.h
文件自動轉換爲IDL,所以現在我想知道是否有任何其他方式從C頭文件爲OCaml綁定生成存根?從C頭文件生成Ocaml綁定存根
6
A
回答
6
C頭文件中沒有足夠的信息來爲另一種語言編寫綁定。在非常簡單的情況下(例如,所有函數只採用整數或浮點參數),這是可能的,但是一旦涉及指針,就需要提供更多信息:函數將從指向的值讀取,寫對它還是兩者兼而有之?該接口是否允許空指針?這實際上是一個指向數組的指針,大小在哪裏?這是char*
一個指向零終止字符串的指針嗎?
IDL擴展了帶有額外註釋的C函數聲明以涵蓋所有這些要點。這就是爲什麼camlidl
在IDL上工作,而不是直接在C頭上工作。你不會找到任何明顯不那麼痛苦的事情。
還有另一種方法,即用擴展名爲空的宏自由註釋C頭,但提供額外的類型信息。
int memmove(void ANN_OUT ANN_SIZE(n) ANN_NOT_NULL *dest,
const void ANN_IN ANN_SIZE(n) ANN_NOT_NULL *src,
size_t n);
這樣的註釋不是標準化的,所以如果你走這條路線,你必須編寫自己的工具。 (如果要解析C,請查找Cil)。我建議您將IDL聲明視爲主要對象,並根據它們生成C頭文件。
0
會Swig會有幫助嗎?
相關問題
- 1. 從C++頭文件生成Java接口
- 2. 從頭自動生成C++文件?
- 3. 從目標文件生成頭文件
- 4. 插件生成存根文件
- 5. 如何從頭文件生成C依賴文件
- 6. 從WSDL生成JavaScript存根
- 7. C庫,生成文件頭的依賴
- 8. 如何自動生成C++頭文件
- 9. 在MVC中生成SOAP頭文件C#
- 10. _從PSDK IDL文件生成PASCAL綁定文件的問題
- 11. 存根生成
- 12. 接口和生成的綁定文件
- 13. 從.c文件生成.i文件
- 14. JNI頭文件生成類
- 15. 停止xsd.exe從xsd模式自動生成C++頭文件
- 16. 生成的類型列表從C++頭文件
- 17. 從頭文件自動生成C代碼
- 18. 從實現中自動生成Objective-C方法頭文件?
- 19. 如何從mli文件自動生成存根?
- 20. 生成C#委託方法存根
- 21. 在Ocaml中生成C代碼
- 22. OCaml的Sqlite綁定
- 23. OCaml未綁定值
- 24. 自動爲IDE中的C源文件生成頭文件
- 25. 解析C頭文件以生成文件
- 26. 使用綁定文件從JAXB WSDL生成C#客戶端代碼
- 27. 需要從綁定文件生成package-info.java中的JAXB提示
- 28. Rails Generator:根據已經存在的rails文件生成文件
- 29. xtext:從工作流生成Scala存根
- 30. 從WADL生成java存根(stub)