2

私はwin32c++プログラミングに不慣れであると言わなければならないので、
一部のコードがUnicode文字セットではなくマルチバイト文字セットでコンパイルされるという問題に直面します。
私のコードはどのように両方をサポートできますか?
たとえば、これはUnicodeでのみマルチバイトでコンパイルされ、マルチバイトでのみコメント付きベクトルでコンパイルされます。

 //vector<char> str2(FullPathToExe.begin(), FullPathToExe.end());
 vector<wchar_t> str2(FullPathToExe.begin(), FullPathToExe.end());

    str2.push_back('\0');
    if (!CreateProcess(NULL,
                     &str2[0],
                    NULL,
                    NULL,
                    TRUE,
                    0,
                    NULL,
                    NULL,
                    &si,
                    &pi))
4

4 に答える 4

6

TCHAR文字タイプ(例)として使用しますstd::vector<TCHAR>。これは次のとおりです。

WCHARifUNICODEが定義され、それ以外の場合CHAR

このタイプは、WinNT.hで次のように宣言されています。

#ifdef UNICODE
   typedef WCHAR TCHAR;
#else
   typedef char TCHAR;
#endif
于 2011-05-14T04:42:24.187 に答える
4

You don't have to support both, unless your application must support Windows Mobile or desktop version like Windows 95 or older.

If you write for current desktop or server Windows, supporting "Unicode" is enough. Just go for wchar_t!

于 2011-05-14T06:21:09.613 に答える
0

Microsoft が提供するマクロ/typedef を使用し、独自のものを追加して、両方をサポートすることができます。

TCHAR -> typedef to char/wchar_t
_TEXT() -> creates a text constant either wide or multibyte _TEXT("hallo")

テキスト操作にベクトルの代わりに String クラスを使用できるように、追加するとおそらく便利です。

#ifdef UNICODE
   typedef std::wstring String;
#else
   typedef std::string String;
#endif
于 2011-05-14T05:29:28.550 に答える
0

「Win32 C++ プログラミングの初心者」とは、維持する必要がある「ANSI」文字列を使用する既存の大規模なプログラムがないことを意味していると思います。もしそうなら、なぜ「ANSI」バージョンをビルドしたいのですか? ですべてを行うだけですwchar_t

vector<wchar_t> str2(FullPathToExe.begin(), FullPathToExe.end());

str2.push_back(L'\0');      // Note the prefix.
if (!CreateProcessW(NULL,   // Note the W; explicit is better than implicit.
                    &str2[0],
                    NULL,
                    NULL,
                    TRUE,
                    0,
                    NULL,
                    NULL,
                    &si,
                    &pi))

charマルチバイト文字列を扱う必要がある場合 (たとえば、ファイルを読み取るため、またはではなくを使用するサードパーティ ライブラリを操作するため)、およびwchar_tを使用して変換します。WideCharToMultiByteMultiByteToWideChar

于 2011-05-14T14:10:45.183 に答える