Visual Studio - Programmering Windows Compiler Link Error - uløst eksternt

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er ny til Windows Programmering.


Jeg oprettede et win32 konsol projekt (uden preCompiled header) med VS2005. Og koden som nedenfor.


// 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);
}


Og nu er der to linkfejl som dette, kan nogen hjælpe mig med at rette op på disse fejl.


Er det forårsaget af, at der ikke er nogen hellowin.wav fil på min lokale harddisk? Hvis det gør det. Hvilken mappe kan jeg placere en simpel WAV-fil til?


Tak.



  1> Forbinder ... 1> HelloWin.obj:

  
  fejl LNK2019: uløst eksternt
  symbol imp\_\_PlaySoundW @ 12 refereret i funktionen 'long \_\_stdcall'
  WndProc (struct HWND
*, usigneret int, usigneret int, lang) '
  (? WndProc @@ YGJPAUHWND \_\_ @@ IIJ @ Z)
  1> D: \ læring \ windows \ ProgrammingWindows (5thEdition) \ HelloWin \ Debug \ HelloWin.exe
  :

  
  fatale fejl LNK1120: 1 uløste externals 1> Build log blev gemt på

  
  'fil://d: \ learning \ windows \ ProgrammeringWindows (5thEdition) \ HelloWin \ HelloWin \ Debug \ BuildLog> .htm'
  1> HelloWin - 2 fejl (er), 1 advarsel (er)
  ========== Genopbyg alle: 0 lykkedes, 1 mislykkedes, 0 hoppet over ==========


Bedste reference


Du har flere problemer her. For det første siger du, at din ansøgning er en konsol app. Hvis det er, bruger du den forkerte hoved. Dit delsystem er sandsynligvis WINDOWS, i hvilket tilfælde din hoved skal være dette i stedet:


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


Du siger også, at du ikke bruger forudkomplette overskrifter, men du har et indlæg til stdafx.h. Dine problemer kan løses ved at ændre din hoved og også ændre dine indstillinger for at se sådan ud:


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


Dette gør det muligt for linkeren at kigge efter bibliotekets fil vi fortæller det til. Jeg blev også af med din forkompilerede overskrift og erstattet den med tchar.h, da det er din eneste andre afhængighed hidtil.


Faktum hellowin.wav er ikke til stede på kompileringstid, er irrelevant. Programmet kigger kun efter det på kørselstidspunktet.