これはかなりソフトボールの質問のように思えますが、char と tchar の参照に関して非常に多くのバリエーションがあるように見えるため、私は常にこの関数を調べるのに苦労しています。
8 に答える
TCHAR は、char または wchar_t (ワイド文字) の Microsoft 固有の typedef です。
char への変換は、実際にこれらのどれであるかによって異なります。TCHAR が実際に char である場合は単純なキャストを行うことができますが、それが本当に wchar_t である場合は、文字セット間で変換するルーチンが必要になります。関数 MultiByteToWideChar() を参照してください。
この特定の状況では、TChar はワイド文字だと思いますが、そうでない場合にのみ変換を行う必要があります。どういうわけかチェックしなければなりません。
if (sizeof(TCHAR) != sizeof(wchar_t))
{ .... }
それについてのクールなことは、equals の両方のサイズが定数であることです。つまり、コンパイラは if() を処理 (および削除) し、それらが等しい場合は、中かっこ内のすべてを削除します。
特にクロスプラットフォームのソリューションを探している場合は、この投稿にもいくつかの回答があります。
_TCHAR * argv[] を char * argn[] に複製する CPP コードを次に示します。
Windows に古いコードを採用する場合は、コードに記載されている define をオプションとして使用するだけです。
コードに条件を入れることができます
ifdef _UNICODE
{ //DO LIKE TCHAR IS WIDE CHAR } ELSE { //DO LIKE TCHAR IS CHAR }
これは古いスレッドだと思いますが、「正しい」答えが得られなかったので、今追加しています。
現在これが行われているように見える方法は、TEXT マクロを使用することです。msdn の FindFirstFile の例は、これを指摘しています。 http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418%28v=vs.85%29.aspx