2012-03-10 12 views
2

私はWindows 7 Ultimate 32ビットでDevC++を使用しており、自分のプログラムにwindows.hとpsapi.hを含めています。これまで使用してきたすべてのWindows APIは、GetProcessIdとDebugActiveProcessStopを除いて動作します。コンパイラは、どちらの場合も、指定された関数が宣言されていないことを返します。しかし、winbase.hを見ると、GetProcessIdが宣言されていることがわかります。関数上にマウスを置いても、構造に関する情報が表示されます。だから、なぜコンパイラはどちらの関数を認識するように見えないのですか?Win32 API関数が見つかりません

+1

プリコンパイラ指令ではおそらく除外されています。あなたはチェックしましたか? –

+3

Dev-C++の使用が必要な場合を除いて、[Dev-C++ tag wiki](http://stackoverflow.com/tags/dev-c%2b%2b/info)の内容に細心の注意を払うことを検討します。 )。 –

+0

補足として:GetProcessIdとDebugActiveProcessStopは、Windows SDKのv7.0Aでは条件付きではありません。おそらく、Windows 2000とXP Goldが両方ともサポート外となっているからです。 SDKヘッダーが期限切れになっている可能性があります。 –

答えて

2

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ライブラリドキュメントには、導入されたオペレーティングシステムのバージョンが記載されています。

+0

YES !!! 2番目の#defineが機能しました。ありがとう!!!!! –

1

この問題は、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あなたの問題。幸運^ _^

+0

これで問題が解決しない場合は、リンカー設定からkernel32.libを削除していないことを確認します。 –

+0

@druciferreそれはリンカエラーの代わりに束を引き起こすでしょうか? – Gogeta70

+0

彼は正確なエラーを投稿しなかったので、リンカエラーである可能性があります。また、彼は明示的にこれが** only **のエラーであるとは決して言わなかった。私は '_WIN32_WINNT'の定義が根本的な原因であることを賭けています。しかし、もしそうなら、私はコメントを追加すると考えました。 –

関連する問題