アプリ版:「スタンプのみでお礼する」機能のリリースについて

C++関数からCの関数を呼ぶには extern "C" を使うのはわかるのですが
C関数からC++の関数を呼ぶ方法がわかりません。
『外部参照 1 が未解決』になってリンクが出来ません。

ちなみにC++の関数はDLLで、他のC++関数からは呼ぶことも実行出来ることも
確認済みです。

よろしくお願いします。

A 回答 (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;
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/10/17 09:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!