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?:)
Kun käytit visual c++:aa, loithan uuden win32 projektin ei win32 console projektia. Muistitko myös valita Windows Applicationin?
No niinpä tietenkin, kyllä näitä aloittelijan hölmäjä mokia sitten kanssa riittä:) Kiitoksia vain!
Aihe on jo aika vanha, joten et voi enää vastata siihen.