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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
natsuno
記事: 7
登録日時: 12年前

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

#1

投稿記事 by natsuno » 12年前

string str("test");
から、
MessageBox( NULL, _T(str), _T(str), MB_OK ) ;

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

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 12年前

僕はこのように使っていました。

コード:

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#3

投稿記事 by softya(ソフト屋) » 12年前

_T()マクロについて説明しておきます。
_T()マクロはコンパイルオプションで展開が変わるマクロでUNICODE時はL、マルチバイト文字時は空文字と置き換わります。
つまり、Lの出処は_T()マクロです。

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

Tが頭文字のVC++特有の動作については下記をご覧ください。
「Visual C++雑多メモ ー TCHAR編」
http://www.02.246.ne.jp/~torutk/cxx/vc/misc_tchar.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

natsuno
記事: 7
登録日時: 12年前

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

#4

投稿記事 by natsuno » 12年前

デフォルトで何も考えずstringを使っていましたが、
その正体はbasic_string<char>だったのですね!初めて知りました。
解決して良かったです。


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

閉鎖

“C言語何でも質問掲示板” へ戻る