2

最新の MingW バージョン (最近ダウンロードしたもの) を使用する Qt 4.8.1 アプリで winbase.h の関数 QueryFullProcessImageName を使用したいと考えています。問題は、この機能が非常に新しいことです。これは Windows Vista で導入されたものであり、MingW のそのような新しいバージョンで利用できると思いますが、そうではありません。Microsoft MSDN 残念ながら、この関数を利用できるようにするために適切な定義を配置する必要がありましたが、それで問題が解決しなかっただけでなく、winbase.h で Ctrl+F を使用しても関数の宣言が見つかりません。

さて、どうすればこの問題を解決できますか?私はその機能が非常に必要です:X

私の問題に対する別の洞察: http://www.qtcentre.org/threads/53769-Mingw-included-in-Qt-installator-included-old-h-files

そして、非常に興味深いこと: http://sourceforge.net/apps/trac/mingw-w64/browser/trunk/mingw-w64-headers/include/winbase.h?rev=5487 (MingW には最新の winbase.h ファイル、ただしインストーラーには付属していません)

私の PC には Windows 7 64 ビットがあり、Qt と Qt Creator は 32 ビットです。

ありがとう、

モメルギル

4

1 に答える 1

3

SDKヘッダーにあるバージョンのMinGWに移動したくない(または移動できない)QyeryFullProcessImageName()場合は、最後の方に次を追加できます(ブロック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 に答える