Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: c++ ja windows ohjelman kääntöongelma

Jarppa [15.04.2004 18:48:09]

#

Osaisiko joku neuvoa mikä on vialla kun koitan kääntää www.suomipelit.com:sta löytämäni alkeellisen windows-ohjelman koodin pätkän joka on seuraava:

//--------------------------------------------
// Nimi  : ikkuna.cpp
// Kuvaus: Määrittää sisäänpääsyn ohjelmaan.
//--------------------------------------------

#include "stdafx.h"

//
// Funktioitten prototyyppejä
//
LRESULT CALLBACK ViestienKasittelija( HWND hWnd, UINT Viesti, WPARAM wParam, LPARAM lParam );
HRESULT LuoIkkuna( HINSTANCE hInstance, INT nCmdShow );


//--------------------------------------------
// Nimi  : WinMain()
// Kuvaus: Ohjelman pääfunktio.
//--------------------------------------------
INT WINAPI WinMain( HINSTANCE hInstance,
                    HINSTANCE hPreviousInstance,
                    LPSTR     lpCmdLine,
                    INT       nCmdShow )
{
    //
    // Luodaan ikkuna
    //
    LuoIkkuna( hInstance, nCmdShow );

    //
    // Mennään silmukkaan kunnes ohjelma halutaan
    // lopettaa.
    //
    MSG viesti;
    while( viesti.message != WM_QUIT ){
        //
        // 'Kurkistetaan' onko saapuneita viestejä.
        //
        if( PeekMessage( &viesti, NULL, 0U, 0U, PM_REMOVE ) ){
            //
            // Jos viesti on saapunut se pitää käsitellä.
            //
            TranslateMessage( &viesti );
            DispatchMessage( &viesti );
        }else{
            //
            // Ei viestejä. Suoritetaan ohjelmaa.
            //

        }
    }

	//
	// Poistetaan ikkunaluokka muistista.
	//
	UnregisterClass( "IkkunaLuokanNimi", hInstance );

    //
    // Palautetaan 0 onnistuneen poistumisen merkiksi.
    //
    return 0;
}

//--------------------------------------------
// Nimi  : LuoIkkuna()
// Kuvaus: Luo ikkunan. Palauttaa S_OK
//         jos siinä onnistuttiin, FALSE
//         muulloin.
//--------------------------------------------
HRESULT LuoIkkuna( HINSTANCE hInstance,
                   INT nCmdShow )
{
    HWND hWnd;   // WindowHandle, eli kahva ikkunan ilmentymään
    WNDCLASS wc; // Ikkunaluokka
    //
    // Täytetään ikkunaluokan tiedot.
    //
    wc.style       = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = ViestienKasittelija;
    wc.cbClsExtra  = 0;
    wc.cbWndExtra  = 0;
    wc.hInstance   = hInstance;
    wc.hIcon       = LoadIcon((HINSTANCE) NULL,IDI_APPLICATION);
    wc.hCursor     = LoadCursor((HINSTANCE) NULL,IDC_ARROW);
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = "IkkunaLuokanNimi";

    //
    // Yritetään rekisteröidä ikkunaluokka.
    //
    if (!RegisterClass(&wc))
        return FALSE;

	//
    // Yritetään luoda ikkuna.
    //
    hWnd = CreateWindow( "IkkunaLuokanNimi",
                         "Esimerkkiohjelma",
                         WS_OVERLAPPEDWINDOW,
                         CW_USEDEFAULT,
                         CW_USEDEFAULT,
                         CW_USEDEFAULT,
                         CW_USEDEFAULT,
                         (HWND)  NULL,
                         (HMENU) NULL,
                         hInstance,
                         (LPVOID) NULL );
    //
    // Jos kahvaa ikkunan ilmentymään ei saada,
    // ikkunan luonti epäonnistui. Palautetaan siis
    // FALSE.
    //
    if( !hWnd )
        return FALSE;

    //
    // Näytetään ikkuna ja päivitetään sen sisältö.
    //
    ShowWindow( hWnd, nCmdShow);
    UpdateWindow( hWnd );


    //
    // Palautetaan onnistumisen merkiksi S_OK.
    //
    return S_OK;
}


//--------------------------------------------
// Nimi  : ViestienKasittelija()
// Kuvaus: Funktio joka käsittelee ikkunan
//         viestit.
//--------------------------------------------
LRESULT CALLBACK ViestienKasittelija(HWND   hWnd,
                                     UINT   Viesti,
                                     WPARAM wParam,
                                     LPARAM lParam)
{
    //
    // Tutkitaan mikä viesti saatiin ja tehdään
    // jotain sen mukaisesti.
    //
    switch( Viesti ) {
       case WM_DESTROY:
          {
              //
              // Tuhoamisviesti. Lähetetään
              // Lopetusviesti ja palautetaan
              // TRUE, eli "viesti käsitelty".
              //
			  PostQuitMessage( 0 );
              return TRUE;
          }
       break;
    }

    //
    // Tuntematon viesti. Annetaan windowsin
    // perusviestinkäsittelijän käsitellä viesti.
    //
    return DefWindowProc( hWnd, Viesti, wParam, lParam );
}

Dev-c++:lla tulee ilmoitus:
C:\WINDOWS\TEMP\ccZHFdgb.o(.text+0x104):ikkuna.cpp: undefined reference to `GetStockObject@4'

ja visual c++:lla vastaavasti:

LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/ikkuna.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

ikkuna.exe - 2 error(s), 0 warning(s)

Eli missä vika?:)

peki [15.04.2004 18:53:50]

#

Kun käytit visual c++:aa, loithan uuden win32 projektin ei win32 console projektia. Muistitko myös valita Windows Applicationin?

Jarppa [15.04.2004 22:22:02]

#

No niinpä tietenkin, kyllä näitä aloittelijan hölmäjä mokia sitten kanssa riittä:) Kiitoksia vain!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta