WinMain関数のオーバーロードについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
宗一郎

WinMain関数のオーバーロードについて

#1

投稿記事 by 宗一郎 » 14年前

いつもお世話になっております。

【環境】
VC++2010

苦Cで一通りのことを学んで、
今現在、猫でもわかるプログラミングで勉強しています。
http://www.kumei.ne.jp/c_lang/intro/no_57.htm
そこでのWindowsプログラムが出てきたのですが、以下がコードです。

コード:

#include <windows.h>

int WINAPI WinMain( HANDLE hInstance , 
        HANDLE hPrevInstance , LPSTR  lpCmdLine , int  nCmdShow )
{
    MessageBox(NULL,
        (LPCSTR)"メッセージ・ボックスのテストです。",
        (LPCSTR)"猫でもわかるプログラミング",
        MB_OK);
    return 0;
}
                           「猫でもわかるプログラミングより転載」

”main.cpp(7): error C2731: 'WinMain' : 関数はオーバーロードできません。”
”main.cpp(5) : 'WinMain' の宣言を確認してください。”

といったエラーが出てきます。
このプログラムのどこでWinMain関数を多重に定義しているのでしょうか?


また、MessageBox関数においても、

コード:

MessageBox(NULL,
        (LPCSTR)"メッセージ・ボックスのテストです。",
        (LPCSTR)"猫でもわかるプログラミング",
        MB_OK);
                           「猫でもわかるプログラミングより転載」

(LPCSTR)において、LPCWSTR型のパラメーターと互換性がないといったエラーが出ます。
(LPCWSTR型でキャストしたら、エラーは出ませんでした)
VC++のVer.が上がってMessageBox関数に変更があったのでしょうか?

どうかご教授お願いします。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: WinMain関数のオーバーロードについて

#2

投稿記事 by ISLe » 14年前

WinMainに関しては、hInstance引数とhPrevInstance引数の型をHINSTANCEに変更してください。
C言語としてコンパイルすれば警告で済むようですけど。

MessageBoxに関してはマルチバイト文字セットを対象にしたコードになっています。
VC++2010は既定でUNICODE文字セットを使用する設定になりますので
プロジェクトのプロパティを開いて、
『構成プロパティ』→『全般』→『文字セット』を『マルチバイト文字セットを使用する』に変更してください。

宗一郎

Re: WinMain関数のオーバーロードについて

#3

投稿記事 by 宗一郎 » 14年前

無事実行することができました。

型のことなどはあまり分かっていませんが、
そちらはWindowsプログラムを本格的にやり始めてから調べてみます。

ISLeさん
いつも解答してくださってありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る