• ベストアンサー

LPCWSTRとchar

質問なのです・・・ 現在、私は[Visual Stdio.Net 2005]を使って、C++のプログラミングをしようと思いまして、今日参考書を見てやってみたのですが、 charの配列を使って、文字列を格納しそれを使おうとしたら、LPCWSTRのキャストが必要というエラーがでました。 参考書だと普通に通るらしいのですが・・・Visual Stdio.Net 2003と2005の違いなのでしょか?わかる方教えていただけませんでしょうか??

質問者が選んだベストアンサー

  • ベストアンサー
  • keibou21
  • ベストアンサー率31% (18/58)
回答No.6

補足です。 2005デフォルトのUNICODEを変更する方法は プロジェクト->プロパティ->構成プロパティ->全般 の中にある 文字セットを[Unicode 文字セットを使用する]から[マルチバイト文字セットを使用する] に変更することで可能です。

krit
質問者

お礼

ありがとうございます!!! 今、変更してビルドしてみたら正常にビルドできました!!! ほんとうにありがとうございます!

その他の回答 (6)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.7

> wchar_tではなぜかエラーが出てしまいできませんでした 多分、今度は他の char を要求している部分がエラーになってしまったのでしょう。 ちなみに、SJIS(ShiftJIS)はマルチバイト文字セット(文字の種類によって一文字のバイト数が違う)の一種です。通常、C++としてはcharを使います。 一方、MicrosoftがいうUNICODEはワイド文字セットといわれ、一文字のバイト数が固定で複数バイト(2、または4:VCは2)あります。通常、C++としてはwchar_tを使います。 そして、Windowsでは、両者をオプションで切り替えやすいように、TCHARというマクロを用意しています。 本来、WindowsのAPI等を呼ぶときにはこれらを正しく判断して区別しなければなりません。 お使いの参考書は、正しくこれを区別していなかったため、バージョンが変わったらエラーになったものと思われます。 初心者への説明のために、あえて wchar_t のような新しい型を用いなかったのか、作者がそういう注意を払わない人だったのかわかりませんが…。

krit
質問者

お礼

なるほど・・・ わかりやすい解説ありがとうございます!!

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.5

LPTSTRなどTCHAR用の関数にcharを渡したのだと思います。 2003は、デフォルトでSJISですからcharのままで通りますが、デフォルトがUNICODEになっていると、charでは通らないので。 charの代わりにTCHARやwchar_tに読み替えることで対応できると思います。

krit
質問者

お礼

wchar_tではなぜかエラーが出てしまいできませんでした 2003と2005はSJISとUnicodeが違うのですね!!初めて知りました!! 情報ありがとうございます!!!

回答No.4

多分、WCHAR(wchar_t)配列を引数と取る関数で char配列を渡したんだと思う。 違うかもしれんが。

krit
質問者

お礼

私も、そうかと思い・・・wchar_tで渡したのですが・・・エラーが出てしまいました。 ほかにいろいろ試して見ます!!

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

No2の方が、言われているソースコードの意味ですが、これは、質問者さまが今コンパイルしようとしているファイルのことを示します。 具体的にはwindow.cppのファイルのことです。これを提示されてみては、いかがでしょうか。

krit
質問者

お礼

わかりました。 提示します!

回答No.2

そのエラーを吐いた"ソースコード"を呈示してください。

krit
質問者

お礼

すみません長くなるので一部を取ります char clsName[] = "D3DFWSampleClass"; // ウィンドウクラス名 HWND hWnd; MSG msg; // ウィンドウクラスの初期化 WNDCLASSEX wcex = { sizeof(WNDCLASSEX), // この構造体のサイズ NULL, // ウインドウのスタイル(default) WindowProc, // メッセージ処理関数の登録 0, // 通常は使わないので常に0 0, // 通常は使わないので常に0 hInstance, // インスタンスへのハンドル NULL, // アイコン(なし) LoadCursor(NULL, IDC_ARROW), // カーソルの形 NULL, NULL, // 背景なし、メニューなし clsName, // クラス名の指定 NULL // 小アイコン(なし) }; です

回答No.1

コードの呈示がなくてはコメントのしようがありません。

krit
質問者

お礼

c:\program files\microsoft directx sdk (june 2006)\include\d3d9types.h(1385) : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 1>c:\documents and settings\xxx\my documents\visual studio 2005\projects\d3dfwsamplw\d3dfwsamplw\window.cpp(57) : error C2440: '初期化中' : 'char [17]' から 'LPCWSTR' に変換できません。 というエラーです

関連するQ&A

専門家に質問してみよう