MingW用旧的winbase.h文件

时间:2013-03-21 17:36:13

标签: winapi mingw

我想在我的Qt 4.8.1应用程序中使用winbase.h中的函数QueryFullProcessImageName,该应用程序使用最新的MingW版本(我最近下载了它)。问题是这个功能很新:它是在Windows Vista中引入的,我猜它可以使用这样一个新版本的MingW,但事实并非如此。 Microsoft MSDN很遗憾我需要使用适当的定义来使这个函数可用,但不仅没有解决我的问题,而且我还无法通过Ctrl + F在winbase.h中找到函数的声明。

那么,我该如何解决这个问题呢?我非常需要这个功能:X

我对问题的另一个见解:http://www.qtcentre.org/threads/53769-Mingw-included-in-Qt-installator-including-old-h-files

这是一个非常有趣的事情:http://sourceforge.net/apps/trac/mingw-w64/browser/trunk/mingw-w64-headers/include/winbase.h?rev=5487(看起来MingW确实有最新的winbase.h文件,而且安装程序没有附带它)

我的电脑有64位Windows 7,而我的Qt和Qt Creator是32位。

谢谢,

Momergil

1 个答案:

答案 0 :(得分:3)

如果您不想(或不能)移动到其SDK标头中包含QyeryFullProcessImageName()的MinGW版本,则可以在winbase.h附近添加以下内容(确保它在extern "C"块的右括号之前:

#if (_WIN32_WINNT >= 0x0600)

#define PROCESS_NAME_NATIVE 0x00000001

WINBASEAPI BOOL WINAPI QueryFullProcessImageNameA(
  HANDLE hProcess,
  DWORD dwFlags,
  LPSTR lpExeName,
  PDWORD lpdwSize
);

WINBASEAPI BOOL WINAPI QueryFullProcessImageNameW(
  HANDLE hProcess,
  DWORD dwFlags,
  LPWSTR lpExeName,
  PDWORD lpdwSize
);

#ifdef UNICODE
#define QueryFullProcessImageName QueryFullProcessImageNameW
#else
#define QueryFullProcessImageName QueryFullProcessImageNameA
#endif

#endif

如果API位于libkernel32.a导入库中,那么应该只需要它。 API是在我已经安装的MinGW 4.7.x版本的库中,它不在winbase.h标题中,所以你很有可能只需要上面的几行代码