[ MilosDj @ 29.11.2008. 00:44 ] @
Ili bolje da postavim pitanje da li je moguce praviti c++ programe bez WinMain funkcije.

U macroasembleru se to lako radi... Za C++ mi ni google nije pomogao :(
[ Eurora3D Team @ 29.11.2008. 10:51 ] @
Koliko ja znam nikako a i po konvenciji program mora da ima glavnu funkciju u kojoj pocinje i u kojoj se zavrsava.
I u MASM - u imas labelu u kod segmentu koja oznacava ulaznu tacku (entry point) programa.
Inace enty point je vazna stvar kod izvodjenja programa jer PE loader na toj adresi pocinje da izvrsava program.
Ona je upisana i u PE heder fajla u toku linkovanja.

Pogledaj ova dva MASM primera
Ovaj pokazuje MessageBox
Code:

;...
.code
    
start:
    invoke MessageBox,0,SADD("TEXT"),SADD("CAPTION"),MB_OK
    invoke GetModuleHandle,NULL
;...

a ovaj ne
Code:

;...
.code

    invoke MessageBox,0,SADD("TEXT"),SADD("CAPTION"),MB_OK
start:
    invoke GetModuleHandle,NULL
;...

Zato sto program pocinje da se izvrsava na adresi labele start
[ MilosDj @ 29.11.2008. 11:27 ] @
Jasno za MASM, tu veoma lepo i korisno mogu da napravim full win32 prozor BEZ WinMain funkcije.

Ali tu se sve lepo kaze masmu i za koji CPU asembluje i flat i stdcall i ko sto ti kazes odakle pocinje program.

Kazes da to ne mogu da repliciram nekako u VS 2008 za C++ :(((
[ X Files @ 29.11.2008. 12:29 ] @
Secam se jos pre jedno desetak godina da su postojali neku trikovi da se napravi c++ kod bez maina, koji su usput generisali i jako male izvrsne fajlove. Ako se ne varam, radilo se cak o MFC aplikacijama.

Sto se tice fizickog uklanjanja main(), moze svakako makroima:
http://www.infernodevelopment.com/c-program-without-main-function
[ MilosDj @ 29.11.2008. 15:07 ] @
Da, taj jako mali windows.exe mi i treba. U masm-u window.exe moze da se smanji do 1.5KB.

VS 2008 ga pravi na oko 32KB (debug) i 8KB (release).

MFC veze nemam, najlakse mi je da radim u cistom WinAPI.

Hvala svima :)
[ Eurora3D Team @ 29.11.2008. 16:07 ] @
Asemblerski programi su mali ne zbog WinMain (ili bilo koje druge funkcije) nego zato sto asembler pravi program samo od onoga sto smo mi upisali kao kod (za razliku od svih ostalih jezika). Osim naseg koda asembler ubacuje i malo koda za pozive funkcija (parametri i balansiranje stack-a) zavisno od calling konvencije, i to je sve , zato su programi mali.
Mislim da danas svi standardni C++ kompajleri eksplicitno traze da main funkcija bude ukljucena.
I jedan savet
Ako znas asm , drzi se toga i ne slusaj ove koji pricaju to je zastarelo , tesko itd.
Ne kazem da ne koristis neki visi jezik ali asembler je asembler :)
poz
[ MilosDj @ 29.11.2008. 21:30 ] @
Poznajem winasm dovoljno dobro da mogu da napravim prozor i sto sta u njemu.

Sve sam radio pre par godina u masm32 sa www.masm32.com. Hutch je odradio odlican posao za masm.

Zato sam i navikao na DWORD a ne na HINSTANCE i WPARAM gluposti i konstantne konverzije tipova...
Nemam dovoljno znanja da konvertujem dosta kompleksne matematicke jednacine u meni upotrebljiv i razumljiv asm code. Narocito sto ce se mozda jednacne menjati vremenom :(


Inace asm ce zastariti kad CPU zastati. Ima on svoje mane, narocito ako ga ne znas. Ali mislim da je poznavanje algoritama ono sto cini programera, a ne jezik koji koristi.

Pomirio sam se sa winmain. Hvala na odgovorima svima :)

p.s.
Evo, upravo mi je trebalo 3h da nateram _itow_s da proradi :)
Morao sam da ovako da deklarisem szProm1
wchar_t szProm1[]=TEXT("lalala");