none
イベントハンドルが不正でないことの確認方法 RRS feed

  • 質問

  • WIN32 APIでDLLを開発しています。

    その中にイベントハンドルを受け取る関数があるのですが、そのハンドルについて不正でないことをチェックしたいと考えています。

    CreateEvent関数は失敗するとNULLが返るので、NULLでないことを確認するのが1つですが、それだけでは例えば未初期化変数を指定された場合にチェックが効きません。

    指定された値がハンドルとして有効であること(できればイベントハンドルとして有効であること)を確認する方法はあるのでしょうか。

     


    • 編集済み cdefg 2011年6月23日 5:45 誤記訂正
    2011年6月23日 5:42

回答

  • あまり聞かない話かなと個人的には思います。

    質問ですが、イベントハンドルが不正だったとして何ができるのでしょうか? 何かできることがあるとして、それはSetEvent()などのWindows APIがエラーを返すこととどう違うのでしょうか?

    こう考えるとチェックにどれほどの意義があるのか疑問です。それよりはRAII等、適切に設計し不正な引数を渡しにくいコーディングを心がければいいのでは。

    一応、希望を一部満たすWindows APIは見つけました。GetHandleInformation()はハンドルでない不正な値を渡した場合にエラーを返すと思います。回答としてはかなり後ろ向きなため試していません。

    2011年6月23日 6:48
  • >例えば未初期化変数を指定された場合にチェックが効きません。

    例えば、未初期化変数の値が渡されたとして、それがたまたま実在するイベントハンドルと同じだった場合、それはどう扱うべきでしょうか?

    2011年6月23日 12:36

すべての返信

  • あまり聞かない話かなと個人的には思います。

    質問ですが、イベントハンドルが不正だったとして何ができるのでしょうか? 何かできることがあるとして、それはSetEvent()などのWindows APIがエラーを返すこととどう違うのでしょうか?

    こう考えるとチェックにどれほどの意義があるのか疑問です。それよりはRAII等、適切に設計し不正な引数を渡しにくいコーディングを心がければいいのでは。

    一応、希望を一部満たすWindows APIは見つけました。GetHandleInformation()はハンドルでない不正な値を渡した場合にエラーを返すと思います。回答としてはかなり後ろ向きなため試していません。

    2011年6月23日 6:48
  • >例えば未初期化変数を指定された場合にチェックが効きません。

    例えば、未初期化変数の値が渡されたとして、それがたまたま実在するイベントハンドルと同じだった場合、それはどう扱うべきでしょうか?

    2011年6月23日 12:36
  • お礼が遅くなり、申し訳ありません。

    ありがとうございました。

    2011年10月6日 0:56
  • お礼が遅くなり、申し訳ありません。

    ありがとうございました。

    2011年10月6日 0:56