Программирование ошибки компиляции Windows - неразрешенная внешняя - PullRequest
0 голосов
/ 05 сентября 2011

Я новичок в программировании Windows.

Я создал консольный проект win32 (без предварительно скомпилированного заголовка) с VS2005.И код, как показано ниже.

// HelloWin.cpp : Defines the entry point for the console application.
//
#include <windows.h>
#include "stdafx.h"

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int _tmain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    static TCHAR szAppName[] = TEXT("HelloWin");
    HWND        hwnd;
    MSG         msg;
    WNDCLASS    wndclass;

    wndclass.style          = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc    = WndProc;
    wndclass.cbClsExtra     = 0;
    wndclass.cbWndExtra     = 0;
    wndclass.hInstance      = hInstance;
    wndclass.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground  = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName   = NULL;
    wndclass.lpszClassName  = szAppName;

    if(!RegisterClass(&wndclass))
    {
        MessageBox(NULL, TEXT("This Program requires Windows NT!"), szAppName, MB_ICONERROR);
        return 0;

    }

    hwnd = CreateWindow(szAppName,                  // window class name
                        TEXT("The Hello Program"),  // window caption
                        WS_OVERLAPPEDWINDOW,        // window style
                        CW_USEDEFAULT,              // initial x position
                        CW_USEDEFAULT,              // initial y position
                        CW_USEDEFAULT,              // initial x size
                        CW_USEDEFAULT,              // initial y size
                        NULL,                       // parent window handle
                        NULL,                       // window menu handle
                        hInstance,                  // program instance handle
                        NULL);                      // creation parameters

    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);

    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC         hdc;
    PAINTSTRUCT ps;
    RECT        rect;

    switch(message)
    {
    case WM_CREATE:
        PlaySound(TEXT("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC);
        return 0;

    case WM_PAINT:
        hdc = BeginPaint(hwnd, &ps);

        GetClientRect(hwnd, &rect);

        DrawText(hdc, TEXT("Hello Windows XP"), -1, &rect, 
                 DT_SINGLELINE | DT_CENTER | DT_VCENTER);
        EndPaint(hwnd, &ps);
        return 0;

    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }   
    return DefWindowProc(hwnd, message, wParam, lParam);
}

И теперь есть две ошибки ссылки, как это, Может кто-нибудь помочь мне исправить эти ошибки.

Это вызвано тем, что на моем локальном жестком диске нет файла hellowin.wav?Если это так.В какой каталог я могу поместить симулированный WAV-файл?

Спасибо.

1> Связывание ... 1> HelloWin.obj:

ошибка LNK2019: неразрешенный внешний символ imp__PlaySoundW @ 12, указанный в функции"long __stdcall WndProc (struct HWND *, без знака int, без знака int, long)" (? WndProc @@ YGJPAUHWND __ @@ IIJ @ Z) 1> D: \ learning \ windows \ ProgrammingWindows (5thEdition) \ HelloWin \ Debug\ HelloWin.exe:

фатальная ошибка LNK1120: 1 неразрешенные внешние файлы 1> Журнал сборки был сохранен в

"файле: // d: \ learning \ windows \ ProgrammingWindows (5thEdition) \ HelloWin \HelloWin \ Debug \ BuildLog> .htm "1> HelloWin - 2 ошибки, 1 предупреждение ========== Перестроить все: 0 выполнено, 1 не выполнено, 0 пропущено ==========

1 Ответ

1 голос
/ 05 сентября 2011

У вас есть несколько проблем здесь. Сначала вы говорите, что ваше приложение является консольным приложением. Если это так, то вы используете неправильный основной. Ваша подсистема, вероятно, WINDOWS, и в этом случае ваша основная должна быть такой:

int CALLBACK _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLine, int iCmdShow)

Вы также говорите, что не используете предварительно скомпилированные заголовки, но у вас есть включение для stdafx.h. Ваши проблемы могут быть исправлены путем изменения вашей основной, а также изменения ваших включений, чтобы они выглядели так:

#include <windows.h>
#include <tchar.h>
#pragma comment(lib, "Winmm.lib")

Это позволяет компоновщику искать файл библиотеки, о котором мы говорим. Я также избавился от вашего предварительно скомпилированного заголовка и заменил его на tchar.h, поскольку это пока ваша единственная зависимость.

Тот факт, что hellowin.wav отсутствует во время компиляции, не имеет значения. Программа ищет его только во время выполнения.

...