|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jun 2005
Messaggi: 4
|
WINAPI o APIENTRY?
Ciao a tutti,
ho cominciato oggi con la programmazione Win32 col semplice programmino: #include "stdafx.h" //windows.h int WINAPI WinMain(HINSTANCE hInstance, //WINAPI o APIENTRY ? HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBox(NULL, "All work and no play make Jack a dull boy!", "Il mio primo programma Windows", MB_OK | MB_ICONEXCLAMATION); return 0; } Non mi e' chiaro a cosa serve la definizione WINAPI e la sua differenza con APIENTRY (sembrano intercambiabili, funziona tutto lo stesso). Utilizzo Visual C++ 6.0. Qualcuno puo' illuminarmi? Grazie,ciao |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
sono due macro definite come convenzioni di chiamata (entrambe __stdcall mi sembra); in teoria non sono intercambiabili, in pratica si. in genere nella WinMain io vedo sempre APIENTRY.
|
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Jun 2005
Messaggi: 4
|
Ti ringrazio per la risposta, anche se non mi e' chiarissimo cosa significa 'convenzione di chiamata'. Avresti la pazienza di illustrarmelo meglio?
Grazie |
![]() |
![]() |
![]() |
#4 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
__stdcall ad esempio non sai cos'è?
le convenzioni di chiamata sono semplicemente una serie di convenzioni, regole insomma, utilizzate a livello di assembly tra una chiamata di funzione e l'altra; ti faccio un esempio: i parametri solitamente vengono passati ad una funzione tramite lo stack (fatta eccezione per la convenzione __fastcall secondo la quale i primi 4 argomenti vanno passati tramite registri); la funzione chiamata li usa, dopodiché chi è che ce li toglie dallo stack? questo è un esempio di ciò che viene stabilito dalla convenzione di chiamata; nel caso specifico, __stdcall stabilisce che sia la funzione chiamata (non chiamante) a ripulire lo stack. solitamente i compilatori effettuano la pulizia tramite una versione dell'istruzione RET creata da Intel apposta per supportare il ritorno alla funzione chiamante e contemporaneamente la pulizia di N bytes dallo stack. |
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Jun 2005
Messaggi: 4
|
Chiarissimo, grazie.
Essendo autodidatta mi chiedevo se esiste un testo (o altro) che approfondisca quello che tu dici. Mi spiego meglio: nei testi di C++ che ho letto o nei tutorial in rete non ce ne e' accenno (o non ho trovato). Mi piace capire le cose a fondo. Per rispondere alla domanda che io avevo posto dove avrei dovuto guardare? Su come sono fatti i compilatori? Su regole assembly di passaggio parametri? Grazie ancora, Do. |
![]() |
![]() |
![]() |
#6 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
![]() |
![]() |
![]() |
#7 |
Junior Member
Iscritto dal: Jun 2005
Messaggi: 4
|
Grazie molte.
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:52.