私はWindows 7 Ultimate 32ビットでDevC++を使用しており、自分のプログラムにwindows.hとpsapi.hを含めています。これまで使用してきたすべてのWindows APIは、GetProcessIdとDebugActiveProcessStopを除いて動作します。コンパイラは、どちらの場合も、指定された関数が宣言されていないことを返します。しかし、winbase.hを見ると、GetProcessIdが宣言されていることがわかります。関数上にマウスを置いても、構造に関する情報が表示されます。だから、なぜコンパイラはどちらの関数を認識するように見えないのですか?Win32 API関数が見つかりません
答えて
Win32 APIヘッダーを使用する場合は、対象とするオペレーティングシステムのバージョンを指定する必要があります。これはMSDN libraryに記載されています。
最近、NTDDI_VERSIONを定義することでこれを行うことになっています。 GetProcessIdのドキュメントを確認する場合は、Windows XP SP1が必要であることに注意してください。したがって、ターゲットオペレーティングシステムのバージョンとしてNTDDI_WINXPSP1以上を指定する必要があります。うまくいけば、グリッチのほとんどがされているものの、予想通り、私はNTDDI_VERSIONを定義することは常に動作しないことがわかってきました
過去に#define NTDDI_VERSION 0x05010200
:SP1は、もはやあなたがSP2でオフおそらく優れているサポートされているので、実際には今すぐアイロンをかけました。動作しない場合は、古いマクロ_WIN32_WINNTを代わりに使用してください。これは上記のリンクにも記載されています。この場合、あなたがしたい:あなたは後でVistaまたはWindows 7で導入された機能を使用する必要がある場合
#define _WIN32_WINNT 0x0502
は、適切NTDDI_VERSIONまたは_WIN32_WINNTの値を変更します。各関数のMSDNライブラリドキュメントには、導入されたオペレーティングシステムのバージョンが記載されています。
YES !!! 2番目の#defineが機能しました。ありがとう!!!!! –
この問題は、Windows APIでコーディングするときにポップアップすることがあります。関数がヘッダファイルにあることがわかりますが、なんらかの理由でコンパイラの意見が一致しません。この問題に遭遇したら、ヘッダーファイル内の関数を見つけて、その周りのプリプロセッサのディレクティブを探します。その関数を使用するために何かを定義する必要があるかもしれません。この場合
は、ここで私はあなたが問題を抱えている機能のために見つけたものです:
#if (_WIN32_WINNT >= 0x0501)
WINBASEAPI DWORD WINAPI GetProcessId(HANDLE);
#endif
と
#if (_WIN32_WINNT >= 0x0501)
WINBASEAPI BOOL WINAPI DebugActiveProcessStop(DWORD);
#endif
だから、あなたは窓があり、あなたのメインコードファイルにヘッダー、この定義を入れる前に、Windowsヘッダーをインクルードする:
#define _WIN32_WINNT 0x0501
これはsolあなたの問題。幸運^ _^
これで問題が解決しない場合は、リンカー設定からkernel32.libを削除していないことを確認します。 –
@druciferreそれはリンカエラーの代わりに束を引き起こすでしょうか? – Gogeta70
彼は正確なエラーを投稿しなかったので、リンカエラーである可能性があります。また、彼は明示的にこれが** only **のエラーであるとは決して言わなかった。私は '_WIN32_WINNT'の定義が根本的な原因であることを賭けています。しかし、もしそうなら、私はコメントを追加すると考えました。 –
- 1. 変数が見つかりません
- 2. javax.el.ELException:関数 ':空' が見つかりません
- 3. Faceletsのカスタム関数が見つかりません
- 4. 関数名が見つかりません
- 5. TypeError:オブジェクト内にgetElementById関数が見つかりません
- 6. Entity Frameworkのストアドプロシージャの関数が見つかりません
- 7. ユーザー定義関数が見つかりません
- 8. XSLT置換関数が見つかりません
- 9. Sequoyahでjni関数が見つかりません
- 10. Java XSLT TransformerException:関数が見つかりませんでした:
- 11. GLSL:私のカスタム関数が見つかりません
- 12. 宣言された関数が見つかりません
- 13. js関数にエラーが見つかりません
- 14. メインスコープ内に関数が見つかりません
- 15. 関数構造内のプロトタイプ - Intellisenseが見つかりません
- 16. DoctrineクエリービルダーACOS関数が見つかりません
- 17. 関数内でddplyでオブジェクトが見つかりません
- 18. R:gWidgetsRGtk2:gladeXMLNew()関数が見つかりません
- 19. 角射撃 - $ add関数が見つかりません
- 20. '関数エラーが見つかりませんでした
- 21. Jquery関数が見つかりません
- 22. が見つかりませんsgen.exeが見つかりません
- 23. Win32 APIのGetTempPath関数について
- 24. APIレベル17でローダーマネージャのリファレンスが見つかりません
- 25. Chargify API - XMLの問題 - 「<」が見つかりません
- 26. DMS Meetup.com APIクライアントクラスが見つかりません
- 27. FlattrのAPIは、ファイルが見つかりませんエラー
- 28. WooCommerce APIの返品404が見つかりません
- 29. Android SDK 4.0.3 APIでlibwvm.soが見つかりません(15)
- 30. GoogleカレンダーAPI - コンストラクタが見つかりません
プリコンパイラ指令ではおそらく除外されています。あなたはチェックしましたか? –
Dev-C++の使用が必要な場合を除いて、[Dev-C++ tag wiki](http://stackoverflow.com/tags/dev-c%2b%2b/info)の内容に細心の注意を払うことを検討します。 )。 –
補足として:GetProcessIdとDebugActiveProcessStopは、Windows SDKのv7.0Aでは条件付きではありません。おそらく、Windows 2000とXP Goldが両方ともサポート外となっているからです。 SDKヘッダーが期限切れになっている可能性があります。 –