- ベストアンサー
VC++のエラーについて
- Windows XPのVC++ 6.0でコンパイル時にエラーが発生します。
- エラーメッセージには、'WinMain'関数のオーバーロードに関する問題が指摘されています。
- 正しい宣言を確認する必要があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Win32 applicationを作成する場合は、インスタンス ハンドルの型はHINSTANCEになります。HANDLEはWin16アプリ の場合です。 HANDLEをHINSTANCEに書きかえればOKです。 > D:\VC\aaadf\fdfdfdf.cpp(7) : error C2731: > 'WinMain' : 関数はオーバーロードできません。 これはですね。 まず、VCではWinMain関数のオーバーロード(引数や戻り値が 違う同名の関数の複数定義)は禁止されています。 ソースにはWinMain関数を一つしか書いてないのに・・・と 思われるかもしれませんが、 > #include <windows.h> の行でヘッダーを読み込む事により、Win32用のWinMain 関数のプロトタイプ(前宣言)が読み込まれているんですよ。 ヘッダーをたどってみればわかりますが、 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd); といった風になっています。ここで、引数の型に注目して 下さい。HINSTANCEになっていますよね。 なのでarcsinさんが打ち込んだ、 > int WINAPI WinMain( HANDLE hInstance , > HANDLE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) > { は引数の型が違うから、別の同名の関数を新たに定義しようと している事(オーバーロード)になり、WinMain関数はオーバー ロードできませんよ!ってコンパイラに注意されてしまう訳です。 ところで、参考にされているHPの他のページにこれに関して 書かれてましたのでとりあえず目を通しておくといいですよ。 (場所がわかりにくいかもしれないですが、参考URLのページの 一番下辺りです)
お礼
わかりやすい解説ありがとうございました。 解決しました^^