J'ai une application qui doit être exécutée sous WinXP et Vista64. Mon programme nécessite QueryFullProcessImageName() pour fonctionner sur Vista mais pas sur XP.Échec de vérification au moment de l'exécution # 0 loading QueryFullProcessImageName from kernel32.dll
Je tente de charger QueryFullProcessImageName() (au lieu de relier statiquement) via kernel32.dll afin que le même exécutable puisse fonctionner sur WinXP et Vista. Le code qui charge est:
//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;
}
le typedef est
typedef WINBASEAPI
BOOL (*LPQueryFullProcessImageName)(
__in HANDLE hProcess,
__in DWORD dwFlags,
__out_ecount_part(*lpdwSize, *lpdwSize) LPSTR lpExeName,
__inout PDWORD lpdwSize
);
Malheureusement, je reçois une erreur de temps d'exécution sur Vista lorsque le pointeur de fonction est déréférencé:
Run-Time Échec de la vérification # 0 - La valeur de ESP n'a pas été enregistrée correctement lors d'un appel de fonction. Ceci est généralement le résultat de l'appel d'une fonction déclarée avec une convention d'appel avec un pointeur de fonction déclaré avec une convention d'appel différente.
Le typedef est directement à partir du fichier .h donc je ne peux pas comprendre pourquoi il est en train de tout chambouler. De l'aide? J'ai essayé des tonnes de variantes mais pas de chance.