ビルドエラー

[戻る]
アテネ 2004/07/09(金) 12:05:25
Win32 APIで"hello Windows"と表示するだけの簡単なプログラムをサンプル通りに作成し
たのですが、ビルドする際に以下のようなエラーがでます。

LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です
Debug/hellowindows.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー

開発環境はWindows XP, VC++ 6.0, Win32 Applicationです。
原因、解決方法がわかる方がいらっしゃいましたら、教えてください。

ソースは少し長いのですが、以下のものです。
#include <windows.h>

LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );        //ウィンドウプロ
シージャの宣言

int WINAPI Winmain( HINSTANCE hi, HINSTANCE, LPSTR, int )    //第1引数以外は使わな
い
{
    WNDCLASSEX    wc;                                //新しく
つくるウィンドウクラス用
    wc.cbSize            = sizeof(WNDCLASSEX);        //WNDCLASSEXの大
きさ
    wc.style            = 0;                        //拡張ス
タイルなし
    wc.lpfnWndProc        = WndProc;                    //このク
ラスの持つウィンドウプロシージャ
    wc.cbClsExtra        = 0;                        //追加領
域なし
    wc.cbWndExtra        = 0;                        //追加領
域なし
    wc.hInstance        = hi;
    wc.hIcon            = LoadIcon ( NULL, IDI_APPLICATION );
    wc.hIconSm            = LoadIcon ( NULL, IDI_WINLOGO );
    wc.hCursor            = LoadCursor ( NULL, IDC_ARROW );
    wc.hbrBackground    = (HBRUSH)GetStockObject( WHITE_BRUSH );
    wc.lpszMenuName        = NULL;                    //メニュ
ーなし
    wc.lpszClassName    = "wh04";                //このウィンドウクラス
の名前
    if(! RegisterClassEx( & wc )) return 0;        //ウィンドウクラスの登
録

    //できないと終了
    CreateWindow( "wh04",                            //クラス
の名前
                "定番hello",                        //キャプ
ションの内容
                WS_OVERLAPPEDWINDOW | WS_VISIBLE,    //ウィンドウの属
性、初期状態は表示
                CW_USEDEFAULT, CW_USEDEFAULT,        //位置、大きさは
指定しない
                CW_USEDEFAULT, CW_USEDEFAULT,    
    //WS_OVERRAPPEDWINDOWのときのみ可
                HWND_DESKTOP,                        //
親はデスクトップ
                NULL,                                //
メニューハンドルなし
                hi,                                
    //インスタンス
                NULL );                            
    //ウィンドウプロシージャへ
                                                
    //渡すパラメータなし
    MSG    msg;
    while( GetMessage( &msg, NULL, 0, 0 ) ) {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    }

    return msg.wParam ;
}

LRESULT CALLBACK WndProc( HWND hwnd, UINT imsg, WPARAM wp, LPARAM lp )
{
    switch( imsg ){

    case WM_PAINT:{
        PAINTSTRUCT ps;
        char *p =  "hello Windows";

        BeginPaint( hwnd, &ps );
        TextOut( ps.hdc, 10, 10, 0, strlen( p ));
        EndPaint( hwnd, &ps );
        break;
    }
    case WM_DESTROY:                    //必ず必要、dEFwINDOWpROCで
は処理されない
        PostQuitMessage( 0 );        //メッセージループを終了させる
        break;

    default:
        return DefWindowProc( hwnd, imsg, wp, lp );
    }
    return 0;
}

SunPac 2004/07/09(金) 12:08:50
WinMainがないですけど・・・
WinmainとWinMainは別の関数とみなされますよ。

古いスレッドには追加発言できません。