私は、いくつかのライブラリのC APIを宣言するヘッダファイルを持っています。このライブラリ用のOCamlバインディングを作成したいと思います。私はcamlidlがIDLファイルからスタブを作成できることを発見しましたが、*.h
ファイルからIDLへの自動変換はないので、CヘッダファイルからOCamlバインディング用のスタブを生成する方法が他にあるのでしょうか?CヘッダファイルからOcamlバインディングスタブを生成する
6
A
答えて
6
別の言語のバインディングを書き込むための情報がCヘッダーファイルにありません。非常に単純なケースでは(例えば、すべての関数は整数引数または浮動小数点引数のみを取る)可能ですが、ポインタが関与するとすぐに、より多くの情報を提供する必要があります:関数が指し示された値から読み込み、それとも、その両方?インタフェースはヌルポインタを許可する必要がありますか?これは実際に配列へのポインタですか、そしてサイズはどこですか? char*
はゼロ終端文字列へのポインタですか?
IDLはこれらのすべての点をカバーするために、Cの関数宣言を余分な注釈で展開します。だから、camlidl
はIDLで動作し、Cヘッダには直接動作しません。あなたは、痛みの少ないものはほとんど見つけられません。
もう1つのアプローチは、空の拡張子を持つマクロであなたの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ライブラリ(Ubuntu用)を作成するには?
- 2. Vim C++ヘッダファイルに基づいてソースファイルを生成する
- 3. OCamlモックモジュールの生成
- 4. 共有ライブラリファイル(* .so)のヘッダファイル(* .h)を生成
- 5. CMakeを使ってCヘッダファイルを自動的に生成するには?
- 6. C++生成コード(MATLABから)
- 7. JNI - OSGIバンドルのヘッダファイルを生成する方法
- 8. Javaヘッダファイルを生成中にエラーが発生しました
- 9. C++ ::ヘッダファイルに
- 10. CoqからOcamlへの抽出で生成された関数を使用
- 11. OCaml:関数からレコードを作成する
- 12. OpenGL Cプログラムからビデオを生成
- 13. Visual Studio - C++プロジェクトからUMLを生成
- 14. C#でDLLからカスタムイベントを生成
- 15. C#クラスからUML図を生成
- 16. Objective-CからLaTeXとPDFを生成
- 17. C++ヘッダファイルのインクルードとコンパイルC
- 18. C++ヘッダファイル封入エラー
- 19. Cヘッダファイルとコンパイル/リンク
- 20. C++でヘッダファイルを整理する
- 21. ラムダコードの改善OCamlがアサーション用に生成する
- 22. アンドロイドアクティビティクラスのヘッダファイルを作成する
- 23. 見つからないヘッダファイル
- 24. ASP.NetとC#.Netコードからフローダイアグラムを生成するには?
- 25. .cpp/.cから.hを自動生成する
- 26. データからマークアップを生成するためのC#のHTMLテンプレートオプション
- 27. XMLからXmlWriter c#コードを生成する
- 28. WSDLからWebサービスプロキシを生成するC#
- 29. ブックマークをサーバー側から生成するAsp.netとc#
- 30. Cでライブラリからアプリケーションにコールバック(イベント)を生成する方法#