Falha na verificação em tempo de execução # 0 carregando QueryFullProcessImageName do kernel32.dll

Tenho um aplicativo que precisa ser executado no WinXP e no Vista64. Meu programa requer QueryFullProcessImageName () para funcionar no Vista, mas não no XP.

Eu tento carregar QueryFullProcessImageName () (em vez de vincular estaticamente) por meio do kernel32.dll para que o mesmo executável possa ser executado no WinXP e no Vista. O código que o carrega é:

//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;
}

o typedef é

typedef WINBASEAPI
BOOL (*LPQueryFullProcessImageName)(
    __in HANDLE hProcess,
    __in DWORD dwFlags,
    __out_ecount_part(*lpdwSize, *lpdwSize) LPSTR lpExeName,
    __inout PDWORD lpdwSize
    );

Infelizmente, recebo um erro de tempo de execução no Vista quando o ponteiro de função é desreferenciado:

Falha na verificação em tempo de execução # 0 - O valor do ESP não foi salvo corretamente em uma chamada de função. Isso geralmente resulta da chamada de uma função declarada com uma convenção de chamada com um ponteiro de função declarado com uma convenção de chamada diferent

O typedef é direto do arquivo .h, então não consigo entender por que está bagunçado. Qualquer ajuda? Eu tentei toneladas de variantes, mas sem sorte.

questionAnswers(1)

yourAnswerToTheQuestion