読者です 読者をやめる 読者になる 読者になる

しまてく

学んだ技術を書きためるブログ

勘違いされがちなHRESULT型の使用法

はい、激しく勘違いしていました><

勘違いコード
HRESULT hr = S_FALSE;

if(SUCCEEDED(hr))
{
    // なんとここにきてしまう!!
}
それは勘違いをしているからだよ

定義の内容↓

    • E_FAIL : 失敗。
    • S_OK :0 成功。条件が TRUE だった時に使う。
    • S_FALSE :1 成功。条件が FALSE だった時に使う。

SUCCEEDEDはこう定義されているので、

    • ((HRESULT)(hr) >= 0)


S_FALSEはTRUEになってしまいます。


つまりエラーはE_FAILを返しなさいよってことなんですね><
まぁ名前をしっかり見れば頭に「E_」「S_」って親切にも書いてくれてるけどね。


勘違いでした!