Ho un'applicazione che deve essere eseguita sia su WinXP che Vista64. Il mio programma richiede QueryFullProcessImageName() per funzionare su Vista ma non su XP.Errore in fase di esecuzione # 0 caricamento QueryFullProcessImageName da kernel32.dll
Provo a caricare QueryFullProcessImageName() (invece di collegare staticamente) tramite kernel32.dll in modo che lo stesso eseguibile possa essere eseguito su WinXP e Vista. Il codice che carica è:
//only gets called on vista
bool LoadQueryFullProcessImageName()
{
HMODULE hDLL = LoadLibrary("kernel32.dll");
if (!hDLL) return(0);
//Now use pointer to get access to functions defined in DLL
fpQueryFullProcessImageName = (LPQueryFullProcessImageName)GetProcAddress(hDLL, "QueryFullProcessImageNameA"); //ANSI version
if (!fpQueryFullProcessImageName)
return false;
return true;
}
il typedef è
typedef WINBASEAPI
BOOL (*LPQueryFullProcessImageName)(
__in HANDLE hProcess,
__in DWORD dwFlags,
__out_ecount_part(*lpdwSize, *lpdwSize) LPSTR lpExeName,
__inout PDWORD lpdwSize
);
Purtroppo, ottengo un errore di tempo di esecuzione su Vista quando il puntatore a funzione viene dereference:
Run-Time Check Failure # 0 - Il valore di ESP non è stato salvato correttamente attraverso una chiamata di funzione. Questo di solito è il risultato del richiamo di una funzione dichiarata con una convenzione di chiamata con un puntatore di funzione dichiarato con una convenzione di chiamata diversa.
Il typedef è direttamente dal file .h, quindi non riesco a capire perché sta rovinando. Qualsiasi aiuto? Ho provato un sacco di varianti ma senza fortuna.