1

Visual Studio 2008 c++ で _T のコツをつかみ始めていますが、まだいくつかのことがわかりません。柔軟性の利点はわかりますが、すぐに基本を習得できない場合は、標準的な方法に戻ると思います。

以下のコードの考え方は、-d のパラメーターをスキャンし、その後に続くテキストを文字列変数 fileDir に格納するというものです。また、他のパラメータも無視されます。

どんな助けでも大歓迎です。

//Console application
Parameters::Parameters(int argc, _TCHAR* argv[]) 
{ 
    _Tstring fileDir;  // Is there some kind of _t variable to use here for a string?

    for (int i = 0; i < argc; i = i + 1)
    {           
        if (_tccmp(argv[i], _T("-d")) == 0)  // this appeared to accept anything starting with -
        {           
            i = i + 1;
            fileDir = argv[i]
        }
    }   

    _tprintf("Parameter value found: %s\n", fileDir);
} 
4

2 に答える 2

1

とパラメータを使用_tstringして表すことができます。また、関数の名前は ではないので、そのコード スニペットがどのようにコンパイルされるかわかりませんか?std::stringTCHAR_tcscmp_tccmp

正直なところ、私はそれを気にしません。TCHARWindows 9X (内部的には Ansi でした) と Windows NT (内部的には Unicode でした) の間で移植可能なコードを人々が書いていた頃には、すべてが役に立ちました。最近では、マクロを使用するメリットはほとんどありません。

何かをしたい場合は、wchar_t完全に切り替えることができます。つまり、文字列リテラルの前に "L" を付けてL"Some wide-char string"、関数の 'w' バージョンを使用します (例: std::wstringwcscmpなど)。しかし、それでも多くのシナリオではやり過ぎと見なされる可能性があります。

于 2010-05-17T06:36:09.423 に答える
0

文字列値をコピーする必要があり、MFCまたはATLを使用している場合は、_TstringをCStringにすることができます。

ポインタ値をコピーする場合は、_TstringをLPTCSTRにすることができます。(これは、MFCまたはATLを使用しているかどうかに関係なく機能します。)

codekaが言ったように、_tccmpは_tcscmpである必要があります。MFCまたはATLを使用している場合の代替手段は、CStringのCompareメソッドです。

呼び出し元がパラメーターargvをコンストラクターに配信する方法を示していません。argvが_tmain関数からのものである場合は、_tmainへのパラメーターが正しいことを確認してください。

于 2010-05-17T06:55:28.367 に答える