Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    216

    [C++ APIWin32] errore di link

    Salve, sto imparando a programmare con le API di Windows con c++
    seguendo il libro "Programming Windows" di Petzold ma in un progetto
    che dovrebbe creare una finestra con all'interno una stringa di testo,
    quando compilo (uso Visual c++ 2008 Express Edition su Vista) mi dice:

    Finestra.obj : error LNK2019: riferimento al simbolo esterno __imp__PlaySoundW@12 non risolto nella funzione "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)
    C:\Users\Bruce\Documents\Visual Studio 2008\Projects\Finestra\Debug\Finestra.exe : fatal error LNK1120: 1 esterni non risolti

    Questo è il file cpp:
    codice:
    #include <windows.h>
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
     {
      static TCHAR szAppName[] = TEXT("Finestra");
    
      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;
    
      hwnd = CreateWindow(szAppName, //nome della classe window
           TEXT("Il mio primo programma API con finestra"), //titolo della finestra(barra del titolo)
           WS_OVERLAPPEDWINDOW, //stile window
           CW_USEDEFAULT, //posizione x iniziale
           CW_USEDEFAULT, //posizione y iniziale
           CW_USEDEFAULT, //dimensione x iniziale
           CW_USEDEFAULT, //dimensione y iniziale
           NULL, //handle alla finestra genitore
           NULL, //handle al menù della finestra
           hInstance, //handle all'istanza del programma
           NULL); //creazione parametri
    
      ShowWindow(hwnd, nCmdShow);
      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("Questa è la mia prima applicazione API con finestra"), -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);
      }

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    devi linkare la libreria Winmm.lib per usare playSound

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    216
    Si ma in che cartella si trova quella libreria? Non riesco a trovarla.

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    solitamente nell'sdk di windows

  5. #5
    dovresti aprire le proprietà della soluzione (o progetto, non ricordo bene), selezionare le impostazioni di c++, andare dove c'è linker, e aggiungere la lib nella lista delle lib linkate

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    216
    adesso compila ma non visualizza nessuna finestra

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Poco prima della CreateWindow manca la registrazione della classe, cioe'

    RegisterClass(&wndclass);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    216
    Ti ringrazio ora funziona tutto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.