C ヘッダー ファイルからインターフェイス ユニットを自動的に生成することは可能ですか? 特に HDF5 ライブラリをラップしたいのですが、インターフェースユニットを手動で書くことを避けることができれば素晴らしいと思います。
4 に答える
フリー パスカルにはH2PASツールが含まれています。
h2pasは、C ヘッダー ファイルをパスカル単位に変換しようとします。Cヘッダーファイルで見つかるほとんどのC構造を処理でき、それらを対応するパスカルに変換しようとします。
Bob Swart(Dr Bob )には、 HeaderConvertと呼ばれる多くのヘッダーファイルを変換するユーティリティがあります(通常、いくつかの手動作業も含まれます)。私はそれをツール@RRUZリンクと比較したことがありませんが、それは別のオプションです。
プロジェクトJEDIにも1つあります。私はそれをテストしたことがありません。ここで見つけることができます。
一般に、C ヘッダーを別のもの (必要な C 機能の効果的なスーパーセットではない) に完全に自動変換することは、ほとんど不可能です。
これは、マクロが原因で、それらを翻訳する方法がわからないためです。多くの場合、マクロはコンテキストからのみ意味を取得します。例
#define uglymacro 1,2,3,4
だけでなく(これはより一般的です):
SCARYAPIMACRO void func(int c);
SCARYAPIMACRO は、多くの場合、OS 定義をテストして、適切な OS/アーキテクチャに適した呼び出し規約を選択するマクロです。
とはいえ、ツールが時間の節約にならないというわけではありません。しかし、結果はより半自動で、私は h2pas の経験が最も豊富です。
多くの Windows ヘッダー (数行ごとに sendmessage マクロを持つ FPC の commctrl を含む) を翻訳しました。
私が通常行うことは、行ベースでソースをスキャンし、ヒューリスティックを使用してほとんど同種の部分 (すべての構造体または定数、マクロ、プロシージャ宣言など) に分割する小さなパスカル プログラムを作成することです。次に、ソースを見て、グローバルな代用を行うことがよくあります。
その後、トランスレータを介して実行します。このプロセスはしばしば反復的です (分離を改良し、グローバルな置換を行い、翻訳を試み、失敗した場合は再試行するなど)。
残念ながら、このプロセスには C の十分な理解が必要であり、プラグマも含まれています。
HDF5 APIヘッダーDelphiの翻訳、ソースコードと多少変更されたhdf5dllを含むDelphi XE2 HDF5テーブルテストプログラムを私のページからダウンロードできます: http ://www.astro.ff.vu.lt/index.php?option = com_content&task = view&id = 46&Itemid = 63