何らかの理由で、C++ で記述された共有ライブラリのかなりの数の関数を、正しく呼び出すために C 関数によって「ラップ」する必要があります。さて、このプロセスを自動化できるかどうか疑問に思っています (せいぜい私の CMake-build-process にうまく統合されています)。
例: 関数定義があるとします。
extern "C" void foo(Somestruct myinfo, char const * const data, char const * const data2)
私の.hppファイルで。ここで、この定義を次のように変更します。
C_WRAPPER void foo(Somestruct myinfo, ARG(1) data, ARG(3) data2)
いくつかのマクロを使用すると、これを問題なく元の形式に変換できます。したがって、機能的な観点から hpp ファイルは変更されません。
一部のパーサーは、このファイルを読み取り、(たとえば) を含む新しい c ファイルを生成する必要があります。
extern void foo(Somestruct myinfo, char const * const, char const*const);
void foo_wrapper(Array everything) {
char * data1 = fromArray(array, 1);
char * data3 = fromArray(arary, 3);
foo(fromArray(0), data1, data3);
}
境界条件: 一般的なレイアウトは常に同じに見えます。唯一の違いは、 の数ARG
が必ず一定であることです。の引数はARG
、データが配置されている配列内の位置を示します。
現在、ラッパー ファイルは手動で作成されているため、過去のインターフェイスの変更により、時間のかかるエラーが発生しました。それが、このステップを自動化したい理由です。
自分でパーサーを作成せずに、このようなものをアーカイブする方法を知っていますか? 前述のように、CMake を使用した私のビルド プロセスにうまく適合するものが望ましいです。