1

C++からVBに文字「Т」(通常の大文字のtではなく、Unicodeの10進数値1058)を送信できるようにしようとしています

ただし、以下のこのメソッドでは、メッセージが VB に返され、ANSI でエンコードされた上記の文字である "Т" として表示されます。

#if defined(_MSC_VER) && _MSC_VER > 1310
# define utf8(str)  ConvertToUTF8(L##str)
const char * ConvertToUTF8(const wchar_t * pStr) {
    static char szBuf[1024];
    WideCharToMultiByte(CP_UTF8, 0, pStr, -1, szBuf, sizeof(szBuf), NULL, NULL);
    return szBuf;
}
#else
# define utf8(str)  str
#endif


BSTR _stdcall chatTest()
{
    BSTR Message;
    CString temp("temp test");
    temp+=utf8("\u0422");
    int len = temp.GetLength();
    Message = SysAllocStringByteLen ((LPCTSTR)temp, len+1 );
    return Message;
}

temp+=("\u0422"); を実行するだけの場合 utf8 関数なし。データを「?」として送信します。そしてそれは実際には疑問符です(VBではUnicode文字が疑問符として表示されることがありますが、それでも正しいUnicode 10進数値があります..これはここでは当てはまりません...それは疑問符に変わります.

VB では、"Т" のときに Message からのデータを持つ String 変数をテキスト ファイルに出力すると、"Т" として表示されます。

だから、私がC++でUTF8でそれを伝えることができる限り、VBで(または送信前に)何らかの形でANSIに変換され、ファイルに出力されるとUTF8に戻されますか?

C++ から VB に送信するときは、「Т」をそのままにしておく必要があります。VB内の別のソースから保存できるため、VB文字列がその文字を保持できることはわかっています(「?」として表示されますが、適切なUnicode 10進数値があります)。

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

ありがとう

4

1 に答える 1

1

L""BSTR は UTF-8 ではなく、接頭辞で得られる UTF-16 です。UTF-8 変換を取り出し、CStringW を使用します。LPCWSTRの代わりに使用しLPCTSTRます。

于 2013-02-01T03:41:35.307 に答える