2

我想在我的 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 位的。

谢谢,

莫默吉尔

4

1 回答 1

3

如果您不想(或不能)移动到QyeryFullProcessImageName()其 SDK 标头中包含的 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标头中,所以很有可能您只需要上面的几行代码。

于 2013-03-23T07:56:19.213 回答