私は、いくつかのライブラリの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. Cythonから生成されたヘッダファイルを使用する
- 2. ヘッダファイルとソースファイルからCライブラリ(Ubuntu用)を作成するには?
- 3. Vim C++ヘッダファイルに基づいてソースファイルを生成する
- 4. OCamlモックモジュールの生成
- 5. 共有ライブラリファイル(* .so)のヘッダファイル(* .h)を生成
- 6. CMakeを使ってCヘッダファイルを自動的に生成するには?
- 7. H2OモデルからC#を生成する
- 8. Cでコンパイルすると、ヘッダファイルにインポートエラーが発生する
- 9. C++生成コード(MATLABから)
- 10. メイクファイルを使って自動ヘッダファイルを生成するには
- 11. C++ ::ヘッダファイルに
- 12. JNI - OSGIバンドルのヘッダファイルを生成する方法
- 13. 可能なOCamlコード生成のバグ
- 14. Javaヘッダファイルを生成中にエラーが発生しました
- 15. ヒストグラムを作成するOCaml
- 16. CoqからOcamlへの抽出で生成された関数を使用
- 17. OCaml:関数からレコードを作成する
- 18. C++ヘッダファイルのインクルードとコンパイルC
- 19. Cヘッダファイルとコンパイル/リンク
- 20. C++ヘッダファイル封入エラー
- 21. 私のヘッダファイルでC++
- 22. Visual Studio - C++プロジェクトからUMLを生成
- 23. Objective-CからLaTeXとPDFを生成
- 24. C#でDLLからカスタムイベントを生成
- 25. OpenGL Cプログラムからビデオを生成
- 26. C#コードからUML図を生成
- 27. C#クラスからUML図を生成
- 28. C++でヘッダファイルを整理する
- 29. C#のメソッドをC#から呼び出し、ヘッダファイルのみを使用します。
- 30. 複数のヘッダファイルを持つCプログラムをコンパイルするとエラーが発生する