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.