0

なぜこのエラーが発生するのか、私は途方に暮れています:

test_project.obj : エラー LNK2019: 未解決の外部シンボル "int __cdecl run(void)" (?run@@YAHXZ) が関数 _WinMain@16 で参照されています

コードは次のとおりです。

            #include "stdafx.h"
            #include "test_project.h"
            #include <Windows.h>

            HWND ghMainWnd = 0;

            bool InitWindowsApp (HINSTANCE instanceHandle, int show);

            int run();

            LRESULT CALLBACK
            WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

            int WINAPI
            WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pCmdLine, int nShowCmd) {
                if (!InitWindowsApp (hInstance, nShowCmd) )
                    return 0;
                return run();
            }

            bool InitWindowsApp (HINSTANCE instanceHandle, int show) {
                WNDCLASS wc;
                wc.style        = CS_HREDRAW | CS_VREDRAW;
                wc.lpfnWndProc  = WndProc;
                wc.cbClsExtra   = 0;
                wc.cbWndExtra   = 0;
                wc.hInstance    = instanceHandle;
                wc.hIcon        = LoadIcon( 0, IDI_APPLICATION );
                wc.hCursor      = LoadCursor( 0 , IDC_ARROW );
                wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
                wc.lpszMenuName = 0;
                wc.lpszClassName = L"BasicWndClass";

                if (!RegisterClass(&wc) ) {
                    MessageBox(0, L"RegisterClass FAILED", 0, 0);
                    return false;
                }

                ghMainWnd = CreateWindow (
                    L"BasicWndClass",
                    L"Win32Basic",
                    WS_OVERLAPPEDWINDOW,
                    CW_USEDEFAULT,
                    CW_USEDEFAULT,
                    CW_USEDEFAULT,
                    CW_USEDEFAULT,
                    0,
                    0,
                    instanceHandle,
                    0);

                if (ghMainWnd == 0) {
                    MessageBox ( 0, L"CreateWindow FAILED", 0, 0);
                    return false;
                }
                ShowWindow (ghMainWnd, show);
                UpdateWindow (ghMainWnd);

                return true;
            }

            int Run() {
                MSG msg = {0};

                BOOL bRet = 1;
                while ((bRet = GetMessage(&msg, 0, 0, 0)) != 0) {
                    if (bRet == -1)
                    {
                        MessageBox(0, L"GetMessage FAILED", L"Error", MB_OK);
                        break;
                    }
                    else {
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);
                    }
                }
                return (int)msg.wParam;
            }

            LRESULT CALLBACK
            WndProc ( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
                switch(msg) {
                case WM_LBUTTONDOWN:
                    MessageBox(0, L"Hello, World", L"Hello", MB_OK);
                    return 0;
                case WM_KEYDOWN:
                    if (wParam == VK_ESCAPE)
                        DestroyWindow(ghMainWnd);
                    return 0;
                case WM_DESTROY:
                    PostQuitMessage(0);
                    return 0;
                }

                return DefWindowProc (hWnd, msg, wParam, lParam);
            }

プロパティ ページ -> c/c++ -> 一般 -> 追加のインクルード ディレクトリに、lib を含むディレクトリを配置しました: C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib

プロパティページ->リンカー->入力->追加の依存関係に、lib C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\user32.lib へのフルパスを入力しました

プロパティ ページ -> リンカー -> システム -> サブシステムに Windows (/SUBSYSTEM:WINDOWS) を配置しました。

私は次に何をしようか途方に暮れています。

4

1 に答える 1

1

C++では大文字と小文字が区別されます。run()関数に名前を付けるか、に名前を付けるかを決定する必要がありますRun()

int run();

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   PSTR pCmdLine, int nShowCmd) {
    if (!InitWindowsApp (hInstance, nShowCmd) )
        return 0;
    return run();  // <-- There.
}

対:

int Run() {
    // ...
}
于 2012-07-30T15:36:46.517 に答える