我想在我的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
答案 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
标题中,所以你很有可能只需要上面的几行代码