none
visual studio 2005 / windowsプログラムがコンパイルできない RRS feed

  • 質問

  • はじめまして。windowsプログラムに挑戦し始めたばかりの初心者ですがvisual studio 2005でのWidowsプログラムがコンパイルできなくて悩んでいます。自分なりに調べては見たのですがさっぱり分かりません(64Bitプログラムに移植しない設定とか文法ミスとか)
    以下が問題のソースです。
    #include <windows.h>

    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    char szclassName[] = "sample02";

    int WINAPI WndMain (HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow)
    {
        MSG msg;
        BOOL bRet;
        WNDCLASSEX wc;
        HWND hWnd;
       
        wc.cdSize = sizeof(HWNDCLASSEX);
        wc.style = CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc = WndProc;
        wc.cdClsExtra = 0;
        wc.cdWndExtra = 0;
        wc.hInstance = hCurInst;
        wc.hIcon = (HICON)LoadImage(NULL,
            MAKEINTRESOURCE(IDI_APPLICATION),
            IMAGE_ICON,
            0,
            0,
            LR_DEFAULTSIZE | LR_SHARED);
        wc.hCursor = (HCURSOR)LoadImage(NULL,
            MAKEINTRESOURCE(IDI_ARROW),
            IMAGE_CURSOR,
            0,
            0,
            LR_DEFAULTSIZE | LR_SHARED);
        wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        wc.lpszMenuName = NULL;
        wc.lpszClassName = (LPCSTR)szClassName;
        wc.hIconSm = (HICON)LoadImage(NULL,
            MAKEINTRESOURCE(IDI_APPLICATION),
            IMAGE_ICON,
            0,
            0,
            LR_DEFAULTSIZE | LR_SHARED);
           
            if (RegisterClassEx`(&wc) ==0)
                return FALSE;
               
            hWnd = CreateWindow(szClassName,
                            "window",
               
                WS_OVERLAPPEDWNDOW,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                NULL,
                NULL,
               
                hCurInst,
                NULL);
            if (!hWnd)
                return FALSE;
               
            ShowWindow(hWnd,nCmdShow);
            UpdateWindow(hWnd);
            while ((bRet = GetMessage(&msg,NULL,0,0)) != 0) {
                if (bRet == -1) {
                    break;
                } else {
                    TranslateMessage(&msg);
                    DispatchMessage(&msg);
                }
            }
            return (int)msg.wParam;
        }
       
    LRESULT CALLBACK WndProc(HWND hWnd, UNIT msg, WPARAM wp, LPARAM lp)
    {
        switch (msg) {
            case WM_DESTROY:
                PostQuitMessage(0);
                break;
            default:
                return (DefWindowProc(hWnd,msg,wp,lp));
        }
        return 0;
    }

    そして下記が出てきた警告です。
    1>------ Build started: Project: sample, Configuration: Release Win32 ------
    1>Compiling...
    1>window01.cpp
    1>.\window01.cpp(13) : error C2039: 'cdSize' : is not a member of 'tagWNDCLASSEXW'
    1>        e:\エディタMicrosoft Visual Studio 8\VC\PlatformSDK\include\winuser.h(1485) : see declaration of 'tagWNDCLASSEXW'
    1>.\window01.cpp(13) : error C2065: 'HWNDCLASSEX' : undeclared identifier
    1>.\window01.cpp(13) : error C2070: ''unknown-type'': illegal sizeof operand
    1>.\window01.cpp(16) : error C2039: 'cdClsExtra' : is not a member of 'tagWNDCLASSEXW'
    1>        e:\エディタMicrosoft Visual Studio 8\VC\PlatformSDK\include\winuser.h(1485) : see declaration of 'tagWNDCLASSEXW'
    1>.\window01.cpp(17) : error C2039: 'cdWndExtra' : is not a member of 'tagWNDCLASSEXW'
    1>        e:\エディタMicrosoft Visual Studio 8\VC\PlatformSDK\include\winuser.h(1485) : see declaration of 'tagWNDCLASSEXW'
    1>.\window01.cpp(26) : error C2065: 'IDI_ARROW' : undeclared identifier
    1>.\window01.cpp(33) : error C2065: 'szClassName' : undeclared identifier
    1>.\window01.cpp(41) : error C2018: unknown character '0x60'
    1>.\window01.cpp(56) : error C2065: 'WS_OVERLAPPEDWNDOW' : undeclared identifier
    1>.\window01.cpp(73) : error C2061: syntax error : identifier 'UNIT'
    1>.\window01.cpp(75) : error C2065: 'msg' : undeclared identifier
    1>.\window01.cpp(75) : error C2050: switch expression not integral
    1>.\window01.cpp(80) : error C2065: 'wp' : undeclared identifier
    1>.\window01.cpp(80) : error C2065: 'lp' : undeclared identifier
    1>window01+BackUp+.cpp
    1>.\window01+BackUp+.cpp(13) : error C2039: 'cdSize' : is not a member of 'tagWNDCLASSEXW'
    1>        e:\エディタMicrosoft Visual Studio 8\VC\PlatformSDK\include\winuser.h(1485) : see declaration of 'tagWNDCLASSEXW'
    1>.\window01+BackUp+.cpp(13) : error C2065: 'HWNDCLASSEX' : undeclared identifier
    1>.\window01+BackUp+.cpp(13) : error C2070: ''unknown-type'': illegal sizeof operand
    1>.\window01+BackUp+.cpp(16) : error C2039: 'cdClsExtra' : is not a member of 'tagWNDCLASSEXW'
    1>        e:\エディタMicrosoft Visual Studio 8\VC\PlatformSDK\include\winuser.h(1485) : see declaration of 'tagWNDCLASSEXW'
    1>.\window01+BackUp+.cpp(17) : error C2039: 'cdWndExtra' : is not a member of 'tagWNDCLASSEXW'
    1>        e:\エディタMicrosoft Visual Studio 8\VC\PlatformSDK\include\winuser.h(1485) : see declaration of 'tagWNDCLASSEXW'
    1>.\window01+BackUp+.cpp(33) : error C2065: 'szClassName' : undeclared identifier
    1>.\window01+BackUp+.cpp(41) : error C2018: unknown character '0x60'
    1>.\window01+BackUp+.cpp(56) : error C2065: 'WS_OVERLAPPEDWNDOW' : undeclared identifier
    1>.\window01+BackUp+.cpp(62) : error C2143: syntax error : missing ')' before '{'
    1>.\window01+BackUp+.cpp(63) : error C2059: syntax error : '='
    1>.\window01+BackUp+.cpp(63) : error C2143: syntax error : missing ';' before '{'
    1>.\window01+BackUp+.cpp(65) : error C2181: illegal else without matching if
    1>.\window01+BackUp+.cpp(73) : error C2061: syntax error : identifier 'UNIT'
    1>.\window01+BackUp+.cpp(75) : error C2065: 'msg' : undeclared identifier
    1>.\window01+BackUp+.cpp(75) : error C2050: switch expression not integral
    1>.\window01+BackUp+.cpp(80) : error C2065: 'wp' : undeclared identifier
    1>.\window01+BackUp+.cpp(80) : error C2065: 'lp' : undeclared identifier
    1>smaple01.cpp
    1>.\smaple01.cpp(20) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [17]' to 'LPCWSTR'
    1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>.\smaple01.cpp(35) : error C2039: 'cdSize' : is not a member of 'tagWNDCLASSEXW'
    1>        e:\エディタMicrosoft Visual Studio 8\VC\PlatformSDK\include\winuser.h(1485) : see declaration of 'tagWNDCLASSEXW'
    1>.\smaple01.cpp(38) : error C2039: 'cdClsExtra' : is not a member of 'tagWNDCLASSEXW'
    1>        e:\エディタMicrosoft Visual Studio 8\VC\PlatformSDK\include\winuser.h(1485) : see declaration of 'tagWNDCLASSEXW'
    1>.\smaple01.cpp(39) : error C2039: 'cdWmdExtra' : is not a member of 'tagWNDCLASSEXW'
    1>        e:\エディタMicrosoft Visual Studio 8\VC\PlatformSDK\include\winuser.h(1485) : see declaration of 'tagWNDCLASSEXW'
    1>.\smaple01.cpp(46) : warning C4002: too many actual parameters for macro 'MAKEINTRESOURCEW'
    1>.\smaple01.cpp(46) : error C2065: 'IDC' : undeclared identifier
    1>.\smaple01.cpp(47) : error C2065: 'IMAGE_CORSOR' : undeclared identifier
    1>.\smaple01.cpp(53) : error C2440: '=' : cannot convert from 'LPCSTR' to 'LPCWSTR'
    1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>.\smaple01.cpp(54) : error C3861: 'MAKEINTERESOURCE': identifier not found
    1>.\smaple01.cpp(60) : error C3861: 'registerClassEx': identifier not found
    1>.\smaple01.cpp(72) : error C2065: 'CW_USERDEFAULT' : undeclared identifier
    1>.\smaple01.cpp(68) : error C3861: 'CreatWindow': identifier not found
    1>.\smaple01.cpp(95) : error C2065: 'default' : undeclared identifier
    1>Build log was saved at "file://e:\Visual Studio 2005\Projects\sample\sample\Release\BuildLog.htm"
    1>sample - 43 error(s), 1 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    2009年4月29日 6:30

回答

  • エラー メッセージのエラー コード(C2039 とか)を手がかりに、ソースとメッセージの内容を見比べてください。エラー内容の詳細は、

     C/C++ ビルド エラー
     http://msdn.microsoft.com/ja-jp/library/8x5x43k7(VS.80).aspx

    あたりを参照するか、エラー コードでググれば目的のものが発見できるはずです。(最初のうちはスペル ミスが多くなりがちですが)

    コンパイル エラー取りは言語を学ぶのに良い機会となります。頑張ってください。

    • 編集済み totojo 2009年4月29日 6:51
    • 回答としてマーク 高橋 春樹 2009年5月14日 6:01
    2009年4月29日 6:46
  • なぜ英語版なんだろう…。

    >.\window01.cpp(13) : error C2039: 'cdSize' : is not a member of tagWNDCLASSEXW'
    そのまんまです。
    ソース中でWNDCLASSEX構造体として書いてあるものが、今回の場合ですと、本当の名前はtagWNDCLASSEXWになっているのでイメージが結びつかないのかもしれませんね。
    ※SDKやプロジェクトの設定によって変わるので鵜呑みにしないで下さい!
    WNDCLASSEX構造体にはcdSizeというメンバーはありませんので、エラーになります。('cdSize' is not a member of WNDCLASSEX)

    C/C++では分かりにくいエラーも多いですが、今出ているエラーは単純なものが多いので、コードを写す元となったものときちんと見比べて下さい。


    ・C/C++では大文字小文字を区別します。
    ・スペルミスに注意。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年4月29日 15:38
    モデレータ

すべての返信

  • エラー メッセージのエラー コード(C2039 とか)を手がかりに、ソースとメッセージの内容を見比べてください。エラー内容の詳細は、

     C/C++ ビルド エラー
     http://msdn.microsoft.com/ja-jp/library/8x5x43k7(VS.80).aspx

    あたりを参照するか、エラー コードでググれば目的のものが発見できるはずです。(最初のうちはスペル ミスが多くなりがちですが)

    コンパイル エラー取りは言語を学ぶのに良い機会となります。頑張ってください。

    • 編集済み totojo 2009年4月29日 6:51
    • 回答としてマーク 高橋 春樹 2009年5月14日 6:01
    2009年4月29日 6:46
  • error code でググと言う方法があったのですね。
    とても参考になりました。ありがとうございます。
    2009年4月29日 12:15
  • なぜ英語版なんだろう…。

    >.\window01.cpp(13) : error C2039: 'cdSize' : is not a member of tagWNDCLASSEXW'
    そのまんまです。
    ソース中でWNDCLASSEX構造体として書いてあるものが、今回の場合ですと、本当の名前はtagWNDCLASSEXWになっているのでイメージが結びつかないのかもしれませんね。
    ※SDKやプロジェクトの設定によって変わるので鵜呑みにしないで下さい!
    WNDCLASSEX構造体にはcdSizeというメンバーはありませんので、エラーになります。('cdSize' is not a member of WNDCLASSEX)

    C/C++では分かりにくいエラーも多いですが、今出ているエラーは単純なものが多いので、コードを写す元となったものときちんと見比べて下さい。


    ・C/C++では大文字小文字を区別します。
    ・スペルミスに注意。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年4月29日 15:38
    モデレータ
  • こんにちは。フォーラムオペレーター高橋です。

    totojoさん、Azuleanさん お世話になっております。
    適切なアドバイスありがとうございました。

    swen1024さん、はじめまして。
    MSDNフォーラムのご利用ありがとうございます。

    totojoさんやAzuleanさんからアドバイスを頂いたと思うのですが、
    その後如何でしょうか?
    勝手ながらtotojoさんとAzuleanさんの投稿に回答マークを付けさせてもらいました。
    不適切な場合、回答マークを外すことも可能です。

    今後ともMSDNフォーラムをよろしくお願いします。


    マイクロソフト株式会社 フォーラム オペレータ 高橋春樹
    2009年5月14日 6:00