• ベストアンサー

コンパイルできません

#include <windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ MessageBox(NULL, "Kitty on your lap","メッセージです", MB_OK); return 0; } の様なプログラムを組んだところ Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照) の様にエラーになってしまいました。 どんな理由でエラーになっているのか調べたのですがよくわかりません。 一番初めのwin32APIを使ったプログラムで上手くコンパイルできないと 勉強が進まないので、わかる方教えてください。

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★オプション設定について >win32プロジェクト→windowsアプリケーション  この設定は正しいです。  bcc developer でのエラーは回答者 No.1 さんのアドバイスにあるとおりです。 >コンパイル時のオプションとはどのように設定するのでしょうか? >宜しくお願いしますm(_ _)m  VC++2005 から文字セットの初期設定が Unicode に変わりました。  今回のエラーは文字セットが原因です。 ・解決策1  オプション設定のプロパティを開き『文字セット』を『マルチ バイト文字セットを使用する』に  変更します。これでコンパイル可能になります。 ・解決策2  ソースファイルの文字列定数を TEXT() マクロを使って記述します。  間違い⇒MessageBox(NULL, "Kitty on your lap","メッセージです", MB_OK);  正しい⇒MessageBox(NULL, TEXT("Kitty on your lap"), TEXT("メッセージです"), MB_OK );  これでコンパイル可能になります。 ・解決策1か、解決策2のどちらかを行えばコンパイルできます。  お勧めは解決策2です。理由は下の『参考URL』を読んでみて下さい。 ・以上。

参考URL:
http://www.ruche-home.net/program/tips/tchar.php
flicker
質問者

お礼

BCC Developer、VC++2005、両方でコンパイルすることができました。 VC++2005では9x系、NT系、両方に対応したプログラムを記述する上で 解決策2の方法のほうがいいということですね。 どうも有り難うございます。助かりましたm(_ _)m

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

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

提示されたコードがWindowsアプリケーション用であるのに対して、 コンパイル時のオプションがコンソールアプリケーション用に なっているためではないでしょうか。

flicker
質問者

補足

御回答ありがとうございます。 コンパイル時のオプションについてですが visual c++ 2005などの統合開発環境などで プロジェクト作成時の設定のことでしょうか? win32プロジェクト→windowsアプリケーション の設定でソースを作成してコンパイルしています。 先ほどのエラー表示はbcc developerのものです。 visual c++ 2005だとこのようなエラーになります。 error C2664: 'MessageBoxW' : 2 番目の引数を 'const char [18]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 コンパイル時のオプションとはどのように設定するのでしょうか? 宜しくお願いしますm(_ _)m

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