Tengo una aplicación que necesita ejecutarse tanto en WinXP como en Vista64. Mi programa requiere que QueryFullProcessImageName() funcione en Vista, pero no en XP.Error de comprobación en tiempo de ejecución # 0 cargando QueryFullProcessImageName desde kernel32.dll
Intento cargar QueryFullProcessImageName() (en lugar de vincular estáticamente) a través de kernel32.dll para que el mismo ejecutable se pueda ejecutar en WinXP y Vista. El código que carga es:
//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;
}
el typedef es
typedef WINBASEAPI
BOOL (*LPQueryFullProcessImageName)(
__in HANDLE hProcess,
__in DWORD dwFlags,
__out_ecount_part(*lpdwSize, *lpdwSize) LPSTR lpExeName,
__inout PDWORD lpdwSize
);
Por desgracia, me sale un error de tiempo de ejecución en Vista cuando el puntero de función se eliminan las referencias:
Run-Time Check Fracaso # 0: el valor de ESP no se guardó correctamente en una llamada a función. Esto suele ser el resultado de llamar a una función declarada con una convención de llamada con un puntero de función declarado con una convención de llamada diferente.
El typedef es directo desde el archivo .h, así que no puedo entender por qué está estropeando. ¿Alguna ayuda? He intentado toneladas de variantes, pero no tuve suerte.