• 締切済み

_TCHAR、LPCWSTRについて

'MessageBoxW' : 2 番目の引数を '_TCHAR' から 'LPCWSTR' に変換できません。 というエラーが出ました。 いろいろHPを回って_TCHARはUnicodeの場合はw_char、マルチバイトのときはcharで処理されると書いてあったのですが、どうしても直せません。 現在Unicodeとマルチバイトの両方に対応させたプログラムを書きたいと思っています。 どうすればいいでしょうか。 よろしくお願いします。

  • 0xEF
  • お礼率59% (193/327)

みんなの回答

  • php504
  • ベストアンサー率42% (926/2160)
回答No.5

inline _Ty ERROR_RETURN ( LPCTSTR msg , _Ty hr) { ::MessageBox ( NULL , msg , TEXT("Error") , MB_OK ); return hr; } return ::ERROR_RETURN( TEXT("失敗しました"), E_FAIL ); にすれば良さそうな気がします

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.4

>'MessageBoxW' : 2 番目の引数を '_TCHAR' から 'LPCWSTR' に変換できません。 まずその部分のソースを見ないと分かりませんし、エラーはひとつひとつ潰していくしかないでしょう。 エラー内容を見る限り#3さんの指摘の通り2番目の引数に 「文字列」を指定するところに「文字」を指定していませんか? TCHAR a[100] = _T("あああ"); ::MessageBox( NULL , a , a , MB_OK ); としておけばマルチバイトでもUNICODEでもコンパイルは通るはずです。 --------------------------------------------------------------- 失礼ながらLPCTSTRの4文字目のTはTypeではなくTCHARだと思います。(Long Pointer Const Tchar STRing) LPCWSTR(Long Pointer Const Wchar_t STRing)やLPCSTRもありますから。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

ポインタを要求しているところにポインタじゃない変数を使っているようです 適切な型の引数を渡してくださいとしか答えようがないですね 該当する部分のコードを書いてもらえるともっと具体的に答えられるかもしれません

0xEF
質問者

補足

解答ありがとうございます。 /* エラーメッセージを表示して値を返却する */ template <class _Ty> inline _Ty ERROR_RETURN ( _TCHAR msg , _Ty hr) { ::MessageBox ( NULL , msg , "Error" , MB_OK ); return hr; } 現在はこんな感じで実装していて return ::ERROR_RETURN(_TCHAR("失敗しました"),E_FAIL); とこんな感じで使っています。

  • pick52
  • ベストアンサー率35% (166/466)
回答No.2

> LPCTSTRは Long Pointer Const STRing ↓ LPCTSTRは Long Pointer Const Type STRing Typeが抜けていました。

  • pick52
  • ベストアンサー率35% (166/466)
回答No.1

TCHARでなく、LPCTSTRでしょう。 TCHARは Type CHAR で、LPCTSTRは Long Pointer Const STRing です。 要はTCHARの定数ポインタ型です

参考URL:
http://www.usefullcode.net/2006/11/tcharlpctstrlptstr.html

関連するQ&A

  • スケルトンプログラムをビルドできません

    Windowsプログラミングの基礎、スケルトンプログラムを ビルドできなくて困っています。 以前Borland C++ compiler 5.5を使っていたときは ビルドできていたのですが、昨日Visual Studio 2005を購入し、 テストでビルドしようとしたところ 次のようなエラーが出てしまいました。 error C2664: 'CreateWindowExW' : 2 番目の引数を 'char [13]' から           'LPCWSTR' に変換できません CreateWindow関数の第二引数を "Sample Program"というふうにしています。 UNICODEが関係しているらしいというところまでは 分かったのですが、具体的にどのように コーディングしてよいのか、まだ分かりません。 初歩的な質問で申し訳ないですが、よろしくお願いします。

  • wsprintfで実数値を文字列にしたい

    ダイアログボックスの「edit」部分にセットしようと思ったのですが SetDlgItemIntが整数しか使えないので変換したいです。 TCHAR buf[20]; wsprintf(buf, "%.1f", temperature); と書きましたがconst char * の引数LPCWSTRのパラメータと互換性がありませんと出てしまいます。

  • char型変数をLPCTSTR型に変換したい

    大学の研究でプログラム作成している者です. 現在外部ファイルの文字列をfscanf()でchar型変数に取り込み,それをLPCTSTR型変数に変換して,関数に引数として渡そうとしてます. しかし,現在はchar/THCARの変換が正しくできず困っております.現在のコードは以下のような流れになってます. ----------------------------------------------- char name[MAX_PATH]; TCHAR name_t[MAX_PATH]; fscanf( &fp, "%s", name ); wsprintf( name_t, _T("%s"), &name ); // char ⇒ TCHAR makedFunction( name_t ); // 自作関数(引数はLPCTSTR) ----------------------------------------------- しかし, wsprintf()で変換した時点で,文字列がおかしくなってしまい困ってます. 開発環境はVisualStudio2010で,MFC作成(Unicode文字列)となってます.ちなみにマルチバイト文字列を使用する解決方法はなしとします. 解決方法をご存知の方がおられましたら,是非とも,ご回答よろしくお願い致します.

  • UNICODEとANSIの対応でunsigned addr[][100] は、どのように書き換えればよいのでしょうか?

    UNICODEとANSIの両方対応できるようにtchar.hをインクルードして、 char *s → LPTSTR s char a → TCHAR a などしてきましたが、 unsigned addr[][100] は、どのように書き換えればよいのでしょうか? また、_TCHARとTCHARはどちらを使えばよいのでしょうか?

  • 文字コード(多言語化?)の取り扱いについて

    正直な話今まで多言語化とか複数プラットフォームでの動作といったことは あまり考えていなかったのですが(作った環境限定で動かしたりしてた) 今回その一歩としてまず文字コードの設定を気にしだしました そこでまず理解できないのが 現在 UNICODE文字セットを使う 設定でソースを作り TCHAR msg[100]; _stprintf_s(msg, L"Error (0x%x) (%d)\n", hr, __LINE__); といったようなコードを書きました 当然その環境ではコンパイルして動くのですが 文字コードセットを 設定なし にしてリビルドするとそのコードでは error C2665: 'sprintf_s' : 2 オーバーロードのどれも、すべての引数の型を変換できませんでした といったエラーが出ます TCHARやL としてコードを書いておくことで _UNICODEデファインの有無により 自動的にwhar_tやcharへの変換が行われると思っていたのですが 基本的な表記法を間違っているのでしょうか? それとも文字セットはそういったことではなくunicode文字セットにしたときは 多国語サポートを考慮して作っているので それで書いたソースを文字セット 設定なし でそのまま再構築できるという 考え方のほうが間違っているのでしょうか (そんなのかえたらソース変更が当たり前 ってことなんでしょうか?)     変えられる可能性があるのはマルチバイト文字セットのみ? 環境は VS2010(VC2010)です

  • シリアル通信プログラムについて

    http://www12.atwiki.jp/dendenkeroro/pages/31.html 上記のページの最後のプログラムを書いて実行して見たんですけれど、 エラーで 'const char [5]' から 'LPCWSTR' に変換できません。 と出るんですけれどこれをどう直せばいいかわかりません。 どなたか教えてください。

  • const unsigned char *Ptn

    度々お世話になってます。VC++2010、MFC、ユニコードを使う設定で、ワイルドカードを用いたLike処理が使いたいです。 正規表現までは、望んでいません。 それで、過去ログを見てみましたが、まだ分かりませんでした。 ◆ワイルドカードを用いた文字列検索 http://okwave.jp/qa/q287644.html を使いたいです。 一応、リンク先のソースコードを載せておきます。 _________________________________________________________________________________________________ int StrMatchMBS( const unsigned char *Ptn, const unsigned char *Str ) {   switch( *Ptn )   {     case '\0':       return (_mbsnextc(Str)=='\0');     case '*':       return StrMatchMBS( _mbsinc(Ptn), Str ) || (_mbsnextc(Str)!='\0') && StrMatchMBS( Ptn, _mbsinc(Str) );     case '?': return (_mbsnextc(Str)!='\0') && StrMatchMBS( _mbsinc(Ptn), _mbsinc(Str) );     default:       return (_mbsnextc(Ptn)==_mbsnextc(Str)) && StrMatchMBS( _mbsinc(Ptn), _mbsinc(Str) );   } } _________________________________________________________________________________________________ int KeywordDlg::StrMatchMBS( const unsigned TCHAR *Ptn, const unsigned TCHAR *Str ){ としたところ、 エラー 4 error C2050: switch 式の結果は、整数値になりませんでした。 エラー 3 error C2065: 'Ptn' : 定義されていない識別子です。 ・・・のエラーがでます。 _________________________________________________________________________________________________ int KeywordDlg::StrMatchMBS( const TCHAR *Ptn, const TCHAR *Str ){ としたところ Ptn と Str の所で、赤い波線となり、 エラー 2 error C2664: '_mbsinc' : 1 番目の引数を 'const TCHAR *' から 'const unsigned char *' に変換できません。(新しい機能 ; ヘルプを参照) _________________________________________________________________________________________________ ↓この方の質問のままなのですが、具体的に どう書けばいいのか?分かりません。 ◆UNICODE化のための書き換え http://okwave.jp/qa/q6966243.html _tcsrchr もどこで使えばいいのか分かりません。 ポインターの記述を完全に理解していないせいで、分からないのでしょうか? すみませんが、もう少し、補足して頂くとうれしいですm(_ _)m

  • 意味がわからないエラーがあります【14歳からはじめるC言語ゲームプログラミング】

    14歳からはじめるC言語ゲームプログラミング(横スクロールアクションゲーム)をやっていて、第5章で意味がわからないエラーがでました・・・ error C2664: 'MessageBoxW' : 2 番目の引数を 'const char [25]' から 'LPCWSTR' に変換できません。 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 というもので、chap4.cppの23行目と67行目でひっかかりました。 どうすれば解決できますでしょうか。 C言語に詳しい方、よろしくおねがいします。

  • InternetOpenUrlの引数URL文字コードについて

    今、HTMLソースの取得を行うプログラムを作成しています。 LPCWSTR url = TEXT("http://www.yahoo.co.jp"); InternetOpenUrl( hInternet, open_url, NULL, 0, INTERNET_FLAG_RELOAD, 0 ); で、URLはオープンできますが、もし char input_url[128] = {"http://www.yahoo.co.jp"}; の場合、 InternetOpenUrl()の引数には、UNICODEを指定しないといけないので、実行されません。 この場合、どのようにしたらいいのでしょうか? よろしくお願い致します。

  • VC++ std::stringからLPCWSTRに変換

    Visual C++ 2008を使用してTextBoxからの値(System::String)をmciSendString(LPCWSTR)に渡したいと思っています。 そこで自分はSystem::Stringをstd::stringに変換しそれから渡そうと思っているのですが・・・ 『error C2664: 'mciSendStringW' : 1 番目の引数を 'std::string' から 'LPCWSTR' に変換できません。』 のようにエラーが出ます。 当然そのまま与えてるので出るのは当たり前なのですが、キャストや変換の仕方が分からず調べ様にも困っている次第です。 C++に今回始めての挑戦で、右も左も分からないのですが、もしよろしければご指南頂けませんでしょうか?

専門家に質問してみよう