Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako da napravim win32.exe bez WinMain funkcije u VS2008?

[es] :: C/C++ programiranje :: C/C++ za početnike :: Kako da napravim win32.exe bez WinMain funkcije u VS2008?

[ Pregleda: 2355 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

MilosDj
Milos Djuric
Belgrade

Član broj: 14174
Poruke: 307
79.101.241.*



+4 Profil

icon Kako da napravim win32.exe bez WinMain funkcije u VS2008?29.11.2008. u 00:44 - pre 187 meseci
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 :(
I'm not in this world to live up to your expectations and you're not in this world to live up to mine.
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
*.dynamic.sbb.rs.



+7 Profil

icon Re: Kako da napravim win32.exe bez WinMain funkcije u VS2008?29.11.2008. u 10:51 - pre 187 meseci
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
 
Odgovor na temu

MilosDj
Milos Djuric
Belgrade

Član broj: 14174
Poruke: 307
77.46.193.*



+4 Profil

icon Re: Kako da napravim win32.exe bez WinMain funkcije u VS2008?29.11.2008. u 11:27 - pre 187 meseci
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++ :(((
I'm not in this world to live up to your expectations and you're not in this world to live up to mine.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Kako da napravim win32.exe bez WinMain funkcije u VS2008?29.11.2008. u 12:29 - pre 187 meseci
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
 
Odgovor na temu

MilosDj
Milos Djuric
Belgrade

Član broj: 14174
Poruke: 307
77.46.193.*



+4 Profil

icon Re: Kako da napravim win32.exe bez WinMain funkcije u VS2008?29.11.2008. u 15:07 - pre 187 meseci
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 :)
I'm not in this world to live up to your expectations and you're not in this world to live up to mine.
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
*.dynamic.sbb.rs.



+7 Profil

icon Re: Kako da napravim win32.exe bez WinMain funkcije u VS2008?29.11.2008. u 16:07 - pre 187 meseci
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
 
Odgovor na temu

MilosDj
Milos Djuric
Belgrade

Član broj: 14174
Poruke: 307
77.46.193.*



+4 Profil

icon Re: Kako da napravim win32.exe bez WinMain funkcije u VS2008?29.11.2008. u 21:30 - pre 187 meseci
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");
I'm not in this world to live up to your expectations and you're not in this world to live up to mine.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Kako da napravim win32.exe bez WinMain funkcije u VS2008?

[ Pregleda: 2355 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.