• 締切済み

VC++.NET2003でユーザー関数内でMessageBox::Show()が使えません??

VC++.NET 2003 のヘルプの、「チュートリアル : 簡単な Windows フォームの作成」に MessageBox::Show()関数を使ってHello,worldを表示させる例が書いていますが、 この関数を、自分で作った関数(フォームのクラスのメンバ関数で、 関数のコードはインライン関数でなく、cppファイル側に書いています)に持っていくと、 error C2653: 'MessageBoxA' : 識別子がクラス名でも名前空間名でもありません。 error C2660: 'System::Windows::Forms::Control::Show' : 関数に 1 個の引数を指定できません。 と、コンパイルエラーが出てしまいます。 MessageBox::Show()を自前の関数で使う方法を、 どなたか教えていただけないでしょうか?

みんなの回答

  • tkamz
  • ベストアンサー率0% (0/0)
回答No.4

VC++.NET 2003を使っているので実験してみました。同様のエラーメッセージを確認しました。 どうやらWin32 APIのMessageBox関数と.NET FrameworkのSystem::Windows::Forms::MessageBox::Show関数との区別がコンパイラではできないみたいですね。 私はcppファイル側には.NETのコードを書かないので分かりませんが解決策はないと思います。 .NETを使う場合にアプリケーションの終了処理を書きたいなら、 Form1.hのDispose関数にMessageBoxコードを実装する方が正しいのかな?と思います。

すると、全ての回答が全文表示されます。
回答No.3

プロジェクトを、どれで作りました? 「.NET/Windowsフォームアプリケーション」で作りましたが、何もしなくても表示されますよ?

yasu54321
質問者

補足

ヘッダでインラインで書かずに、 ソースファイルのほうでやってみてください。

すると、全ての回答が全文表示されます。
回答No.2

>文字列をUnicodeに変換する簡単な仕組みは >VC++.NETにはついていないでしょうか?(^^; http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2005&forum=7 これで解決する?

yasu54321
質問者

補足

MessageBox::Show(System::Text::Encoding::GetEncoding("Hello")); とやってもやはり、コンパイルエラーは出るようです。。。

すると、全ての回答が全文表示されます。
回答No.1

 サフィックスAは、Ansiの意味で、Ansi文字を使う時に付加されます。渡している文字列をUnicodeに変換してから呼び出してみてください。  それか、明示的にサフィックスAをつけた、Ansi文字列を処理する関数を追加します。  私はC#やVB.NETから呼び出すためのラッパークラスを作るために利用しただけなので詳しくは読んでいませんが、MSDNに書いてあります。

yasu54321
質問者

お礼

お返事ありがとうございます。 今の所、ソースに#undef MessageBoxといれると コンパイルが通ることがわかりました。 文字列をUnicodeに変換する簡単な仕組みは VC++.NETにはついていないでしょうか?(^^;

すると、全ての回答が全文表示されます。

関連するQ&A