ページ 11

string strから_T(str)みたいにしてマルチバイト文字列(?)を作りたい

Posted: 2013年4月24日(水) 00:47
by natsuno
string str("test");
から、
MessageBox( NULL, _T(str), _T(str), MB_OK ) ;

な感じで、文字を引数として送り出したいのですが、どうしたらいいのでしょうか?

ちなみに、
MessageBox( NULL, _T(str.c_str()), _T(str.data()), MB_OK ) ;
などとしてみると、
Lstrが定義されていません。
と出てきます。Lがどこから出てきたのかなど、よくわかりません。
教えてくださると幸いです。

Re: string strから_T(str)みたいにしてマルチバイト文字列(?)を作りたい

Posted: 2013年4月24日(水) 07:34
by h2so5
僕はこのように使っていました。

コード:

typedef basic_string<TCHAR> tstring;
tstring str(_T("test"));
MessageBox( NULL, str.c_str(), str.c_str(), MB_OK ) ;

Re: string strから_T(str)みたいにしてマルチバイト文字列(?)を作りたい

Posted: 2013年4月24日(水) 09:59
by softya(ソフト屋)
_T()マクロについて説明しておきます。
_T()マクロはコンパイルオプションで展開が変わるマクロでUNICODE時はL、マルチバイト文字時は空文字と置き換わります。
つまり、Lの出処は_T()マクロです。

それとL"文字列"はワイド文字文字列ですので調べてみてください。

Tが頭文字のVC++特有の動作については下記をご覧ください。
「Visual C++雑多メモ ー TCHAR編」
http://www.02.246.ne.jp/~torutk/cxx/vc/misc_tchar.html

Re: string strから_T(str)みたいにしてマルチバイト文字列(?)を作りたい

Posted: 2013年4月26日(金) 01:32
by natsuno
デフォルトで何も考えずstringを使っていましたが、
その正体はbasic_string<char>だったのですね!初めて知りました。
解決して良かったです。


_Lはマクロだったのですね。
ワイド文字など、まだまだ勉強不足なことがわかります。
ありがとうございました。