OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.152285
  • 閲覧数663
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 100% (2/2)

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

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

よろしくお願いします。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

基本的に、呼ぶことができません。と言うのも、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

お礼率 100% (2/2)

早速の回答ありがとうございました。
例示もあってとても助かりました。
これを参考にプログラムを修正します。
突然プロトタイプの担当者に指名されて
パニック状態なので本当に助かりました。
ありがとうございます。
投稿日時 - 2001-10-17 09:00:57
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ