• ベストアンサー

Cの関数からC++の関数(DLL)を呼ぶ方法について

C++関数からCの関数を呼ぶには extern "C" を使うのはわかるのですが C関数からC++の関数を呼ぶ方法がわかりません。 『外部参照 1 が未解決』になってリンクが出来ません。 ちなみにC++の関数はDLLで、他のC++関数からは呼ぶことも実行出来ることも 確認済みです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

基本的に、呼ぶことができません。と言うのも、c++ には、関数のオーバーロードと 言う機能があって、同じ関数名でも、引数の並び(型や個数)が違うと別の関数として 扱われます。 この機能は c にはありませんから、たとえひとつしかその名前の関数を書いてなくても オーバーロードの仕組みを持った関数になるわけですから、それは c から呼ぶことは できません。 > C++関数からCの関数を呼ぶには extern "C" を使うのはわかる 正確には、そうじゃないんです。 c++ は、型のチェックが厳密ですから、関数を呼ぶ場合には、そのプロトタイプ宣言が 必須です。 普通に書くと、c の関数なのか、c++ の関数なのかの区別が付かないので、c の 関数なんだよ、と宣言をするのが extern "C" なんです。 で、本題に戻って、「c++ で記述した関数を c から呼ぶには?」ということなの ですが、答えは「extern "C" で宣言をした、c++ の関数を作る」ということに なります。 例えば、以下の関数は思いっきり c++ で記述した関数ですから、関数自体は c++ じゃないとコンパイルできませんが、c から呼ぶことが可能です。 ★ヘッダ #ifdef __cplusplus extern "C" { #endif void print_string(char*); #ifdef __cplusplus } #endif ★ソース #include "ヘッダファイル" #include <iostream.h> void print_string(char* str) { cout << str << endl; }

y_panda
質問者

お礼

早速の回答ありがとうございました。 例示もあってとても助かりました。 これを参考にプログラムを修正します。 突然プロトタイプの担当者に指名されて パニック状態なので本当に助かりました。 ありがとうございます。

関連するQ&A