4

以下のコードは機能しません。ここで、lpClassName が null か空かを確認します。

static HRESULT WINAPI ExampleMethod(
    __in_opt  LPCTSTR lpClassName)
{
    //code to check whether lpClassName is null or empty
    if( lpClassName == 0)
        return 0;

    if(*lpClassName) == L'\0')
        return 0;           
}
4

1 に答える 1

11

私は短い形式を使用します:

if (lpClassName == NULL || lpClassName[0] == 0)

空かどうかをテストするだけであれば、文字列の全長を取得する必要はありません。ショート サーキット ルールは、ポインターが null の場合にステートメントの後半でエラーが発生するのを防ぎます。

それを超えて、あなたの質問のコードも同様に機能すると思います。

編集:この場合、ポインターは CreateWindowEx から来ているように見えます。つまり、実際の文字列ポインターではなく、代わりに ATOM 値である可能性があります。違いを見分ける方法は、上位ビットがすべてゼロであることを確認することです。Microsoft はリソース ID に同じ規則を使用し、この条件をテストするIS_INTRESOURCEマクロを提供します。

于 2013-08-19T13:26:24.120 に答える