View Full Version : [C++] Qualcuno mi spiega queste due istruzioni?
xsatellitex
07-02-2008, 14:15
1) lpfEnumProcessModules = (BOOL(WINAPI *)(HANDLE, HMODULE *,
DWORD, LPDWORD)) GetProcAddress( hInstLib,
"EnumProcessModules" ) ;
2) BOOL (WINAPI *lpfEnumProcesses)( DWORD *, DWORD cb, DWORD * );
Se qualcuno gentilmente puo' spiegarmi per filo e per segno queste due istruzioni che non ci capisco niente sembrano due intestazioni di funzioni... boh.In rete non ho trovato niente.
A cosa servono le DWORD , HANDLE, WINAPI... ?
grazie a tutti.
la prima è una stupidaggine, non nel senso di cosa facile da capire ma nel senso di cosa stupida, ottusa: cerca di ottenere con la GetProcAddress l'indirizzo della funzione EnumProcessModules, che è regolarmente importata dall'header psapi.h (è inutile fare linking esplicito a run-time quando si può fare linking implicito in compile-time); l'indirizzo restituito dalla GetProcAddress viene memorizzato in una variabile lpfEnumProcessModules (e chissà perché invece non l'ha chiamata EnumProcessModules... perché altrimenti collideva con qualcos'altro forse? :rolleyes: ) che può poi essere usata per effettuare una chiamata diretta alla funzione.
la seconda invece altro non è che la dichiarazione di un'altra variabile analoga alla lpfEnumProcessModules; quest'altra variabile si chiama lpfEnumProcesses e lascia intendere che l'autore idiota abbia fatto questo lavoro di linking esplicito per tutte le PSAPI (ma una versione aggiornata del PSDK no? :rolleyes: ).
per ulteriori informazioni circa i tipi Win32:
http://msdn2.microsoft.com/en-us/library/aa383751.aspx
per ulteriori informazioni invece circa le PSAPI (Process Status API):
http://msdn2.microsoft.com/en-us/library/ms684884(VS.85).aspx
xsatellitex
07-02-2008, 17:07
Ciao grazie per l'aiuto finalmente ho trovato un po di documentazione.
Ricapitolando:
1) lpfEnumProcessModules =variabile in cui verra' memorizzato il valore restituito da getprocaddress
2) (BOOL(WINAPI *)(HANDLE, HMODULE *,DWORD, LPDWORD)) = ????
3) GetProcAddress( hInstLib,"EnumProcessModules" ) ; = Funzione GetProcAddress
la 2) che cos'e' ? una specie di supercast ?
psdk non so cos'e'... maro' che ignoranza... dove le imparo queste cose?
2) (BOOL(WINAPI *)(HANDLE, HMODULE *,DWORD, LPDWORD)) = ???? scritta così non è sintatticamente valida; se invece la correggi mettendoci un identificatore dopo l'asterisco allora diventa la dichiarazione di una variabile di tipo "puntatore a funzione con convenzione di chiamata WINAPI (espandi la macro WINAPI e vedi a cosa corrisponde) che ritorna un BOOL e vuole come parametri un HANDLE, un HMODULE, un DWORD, e un LPDWORD".
psdk non so cos'e'... maro' che ignoranza... dove le imparo queste cose? le impari quando impari a programmare su Windows. PSDK sta per Platform SDK (Software Developer's Kit) ed è un pacchetto scaricabile gratuitamente dal sito di Microsoft (le ultime versioni hanno il controllo WGA) singolarmente oppure integrato in Visual C++. esso contiene tutti gli headers, le librerie, i tools, e gli eventuali sorgenti necessari a programmare in Win32, COM, ed MFC/ATL per i nostalgici.
xsatellitex
07-02-2008, 19:07
ah ok grazie :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.