| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  24-06-2005, 23:16 | #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 | 
|   |   | 
|  24-06-2005, 23:31 | #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.
		 | 
|   |   | 
|  25-06-2005, 02:49 | #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 | 
|   |   | 
|  25-06-2005, 14:07 | #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. | 
|   |   | 
|  25-06-2005, 16:26 | #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. | 
|   |   | 
|  26-06-2005, 13:05 | #6 | |
| Bannato Iscritto dal: Feb 2005 Città: Roma 
					Messaggi: 7029
				 | Quote: 
 | |
|   |   | 
|  26-06-2005, 14:28 | #7 | 
| Junior Member Iscritto dal: Jun 2005 
					Messaggi: 4
				 | 
		Grazie molte.
		 | 
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 22:17.









 
		 
		 
		 
		






 
  
 



 
                        
                        










