No.18024![]() |
初心すぎるのですが・・・ 投稿者---電話番(2004/11/12 14:47:02) |
||
いつもお世話になっています。 VC6.0環境でボタンを押すと外部関数をコールして 表示をさせるプログラムを作成したいのですが どうしても出来ません。 <呼び出し側> #include "Test.h" : : void CTestRTCDlg::OnButton1() { short ret; ret = SubMain(); afx_msg(ret); } <呼ばれる関数> #include "Test.h" /*テストモジュール宣言関数*/ short int SubMain(void) { short int i; return 1; } <作成ヘッダー> extern short int SubMain(void); short int SubMain(void); を実行すると rror LNK2001: 外部シンボル ""short __cdecl SubMain(void)" (?SubMain@@YAFXZ)" は未解決です というエラーが出ます。 どなたかご教授願います。 |
No.18025![]() |
Re:初心すぎるのですが・・・ 投稿者---επιστημη(2004/11/12 14:51:18) |
||
><pre>いつもお世話になっています。 V<呼ばれる関数> #include "Test.h" /*テストモジュール宣言関数*/ short int SubMain(void) { short int i; return 1; } この関数の実装は C(Test.c)ですか? C++(Test.cpp)ですか? |
No.18026![]() |
Re:初心すぎるのですが・・・ 投稿者---電話番(2004/11/12 14:54:30) |
||
<呼ばれる関数> >#include "Test.h" /*テストモジュール宣言関数*/ >short int SubMain(void) >{ > short int i; > return 1; >} >この関数の実装は C(Test.c)ですか? C++(Test.cpp)ですか? > 呼ばれる側はcです。 |
No.18027![]() |
Re:初心すぎるのですが・・・ 投稿者---επιστημη(2004/11/12 14:57:15) |
||
>>この関数の実装は C(Test.c)ですか? C++(Test.cpp)ですか? >呼ばれる側はcです。 だからです。C++からCを呼ぶには extern "C" short int SubMain(void); と宣言しなければなりません。 |
No.18029![]() |
Re:初心すぎるのですが・・・ 投稿者---電話番(2004/11/12 15:07:08) |
||
>extern "C" short int SubMain(void); > >と宣言しなければなりません。 実行してみたところ RTC_TestMain.c error C2059: 構文エラー : 'string' コードを生成中... コンパイル中... TestDlg.cpp error C2732: リンケージ指定は、別の 'SubMain' に対する指定と矛盾しています。 e:\test\ 'SubMain' の宣言を確認してください。 コードを生成中... cl.exe の実行エラー というエラーが出てきました。 extern部分のみの書き換えではいけなかったのでしょうか? |
No.18031![]() |
Re:初心すぎるのですが・・・ 投稿者---επιστημη(2004/11/12 15:29:42) |
||
>extern部分のみの書き換えではいけなかったのでしょうか? Test.h になんと書いたのですか? |
No.18032![]() |
Re:初心すぎるのですが・・・ 投稿者---電話番(2004/11/12 15:32:26) |
||
>>extern部分のみの書き換えではいけなかったのでしょうか? > >Test.h になんと書いたのですか? > short int SubMain(void); extern "C" short int SubMain(void); です。 |
No.18033![]() |
Re:初心すぎるのですが・・・ 投稿者---επιστημη(2004/11/12 15:36:44) |
||
>short int SubMain(void); >extern "C" short int SubMain(void); マチガイ。これではCが通してくれない。 CとC++の両方で#includeできるように書かなくてはなりません。 正しくは: #ifdef __cplusplus extern "C" { #endif short int SubMain(void); #ifdef __cplusplus } #endif |
No.18034![]() |
CPPソースからCソース内に書かれた外部関数の呼び出し方法 投稿者---電話番(2004/11/12 15:42:44) |
||
>マチガイ。これではCが通してくれない。 >CとC++の両方で#includeできるように書かなくてはなりません。 >正しくは: > >#ifdef __cplusplus >extern "C" { >#endif > short int SubMain(void); >#ifdef __cplusplus >} >#endif 成功しました。ありがとうございます! ご教授、ありがとうございました。 |
No.18028![]() |
Re:初心すぎるのですが・・・ 投稿者---επιστημη(2004/11/12 15:00:39) |
||
> いつもお世話になっています。 であればマナー/ルールはわきまえておいででしょう。 「初心すぎるのですが・・・」などというタイトルは避けてください。 【掲示板ご利用上の注意】の第一項に: ※題名は具体的に! とあります。 |
No.18030![]() |
Re:初心すぎるのですが・・・ 投稿者---電話番(2004/11/12 15:08:49) |
||
>> いつもお世話になっています。 > >であればマナー/ルールはわきまえておいででしょう。 >「初心すぎるのですが・・・」などというタイトルは避けてください。 > >【掲示板ご利用上の注意】の第一項に: ※題名は具体的に! とあります。 本当に申し訳ないです。 今後、気をつけます。 |