Ich habe eine Anwendung, die sowohl auf WinXP und Vista64 ausgeführt werden muss. Mein Programm benötigt QueryFullProcessImageName() um unter Vista, aber nicht unter XP zu arbeiten.Run-Time Check Fehler # 0 laden QueryFullProcessImageName von kernel32.dll
Ich versuche QueryFullProcessImageName() zu laden (anstatt statisch zu verknüpfen) über die kernel32.dll, so dass die gleiche ausführbare Datei auf WinXP und Vista ausgeführt werden kann. Der Code, lädt es ist:
//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;
}
die typedef ist
typedef WINBASEAPI
BOOL (*LPQueryFullProcessImageName)(
__in HANDLE hProcess,
__in DWORD dwFlags,
__out_ecount_part(*lpdwSize, *lpdwSize) LPSTR lpExeName,
__inout PDWORD lpdwSize
);
Leider habe ich einen Laufzeitfehler auf Vista erhalten, wenn der Funktionszeiger dereferenziert wird:
Run-Time Check Failure # 0 - Der Wert von ESP wurde während eines Funktionsaufrufs nicht ordnungsgemäß gespeichert. Dies ist normalerweise ein Ergebnis des Aufrufs einer Funktion, die mit einer Aufrufkonvention deklariert wurde, mit einem Funktionszeiger, der mit einer anderen Aufrufkonvention deklariert wurde.
Der Typdef ist direkt aus der .h-Datei, so dass ich nicht verstehen kann, warum es verhext. Irgendeine Hilfe? Ich habe Tonnen von Varianten versucht, aber kein Glück.