質問: こんにちは。質問させていただきます。 現在、Linux/GCC3.2.3系でC言語の開発をしています。 私自身のレベルとしては、C言語での実務は1年未満。C++はゼロ。本業はJavaプログラマを数年やっております。 さっそく本題です。 既にC++で作成されたある一連のプログラム群(20本程度)があり、これらC++の関数をC言語で作成されたプログラムから呼び出して使用したいと思っています。 C++プログラムは既にテスト済みなので、これらのソースは基本的には手を加えず、そのままライブラリ化などして使用したいと考えています。 そこで質問なのですが、C言語から呼び出せるような形式でC++ソースをライブラリ化する方法と、C言語からの呼び出し方を教えていただけないでしょうか?
回答: 基本的には、extern "C"によってC結合を指定した関数を間に挟むことになります。 他に注意すべき点としては、C++にはあるが、Cにはない型があるので、それらを適切にマッピングする必要があります。例えば、 bool → _Boolまたはint 参照型 → ポインタ型 クラス → 不完全型のポインタを用いるなどの方法でハンドル化する(クライアントコードから内部を隠蔽する) という具合です。 また、多分大丈夫だとは思いますが、列挙型を使用している場合には、若干の不安が残ります。int型に置き換えるなどした方がよいでしょう。 もう一点、C++の例外が外部に送出されても、Cプログラムではどうすることもできませんので、ラッパ関数内部でcatchした上で、エラーコードを返すなどの方法に置き換える必要があります。