PDA

View Full Version : [C] Convenzioni per le chiamate a funzione


Matrix_Genesis
07-12-2012, 10:30
Ciao a tutti! Sto leggendo il libro di Charles Petzold "Programming Windows" ed ho qualche problema di comprensione. Premetto che ho una buona conoscenza di C, C++ e Assembler.
Ora mi sono trovato di fronte a dichiarazioni di funzioni del tipo

WINUSERAPI int WINAPI MessageBoxA (HWND hWnd, LPCSTR lpText, LPCSTR, lpCaption, UINT uType);

Allora...per la WINAPI il caro Charles dice che quest'ultima specifica una convenzione per le chiamate, in particolare come la macchina genera codice per inserire gli argomenti nello stack. Precisamente

#define WINAPI __stdcall

Poi nel secondo capitolo inizia ad usare anche WINUSERAPI. Qualcuno mi sa spiegare qual è la sua funzione? Qual è il numero di convenzioni massime che si possono usare per la definizione di una funzione?

:help:

van9
09-12-2012, 12:04
Ciao a tutti! Sto leggendo il libro di Charles Petzold "Programming Windows" ed ho qualche problema di comprensione. Premetto che ho una buona conoscenza di C, C++ e Assembler.

Ora mi sono trovato di fronte a dichiarazioni di funzioni del tipo

WINUSERAPI int WINAPI MessageBoxA (HWND hWnd, LPCSTR lpText, LPCSTR, lpCaption, UINT uType);

Allora...per la WINAPI il caro Charles dice che quest'ultima specifica una convenzione per le chiamate, in particolare come la macchina genera codice per inserire gli argomenti nello stack. Precisamente

#define WINAPI __stdcall

Poi nel secondo capitolo inizia ad usare anche WINUSERAPI. Qualcuno mi sa spiegare qual è la sua funzione? Qual è il numero di convenzioni massime che si possono usare per la definizione di una funzione?

:help:

*assembly*, non "assembler"!

Il "numero massimo" di calling conventions da usare è ovviamente pari ad 1 ed uno soltanto! (__stdcall, in questo caso). WINUSERAPI è tutt'altra cosa e serve a dare direttiva al compilatore per il loading di dll a run-time.