- ベストアンサー
LPCWSTRとchar
質問なのです・・・ 現在、私は[Visual Stdio.Net 2005]を使って、C++のプログラミングをしようと思いまして、今日参考書を見てやってみたのですが、 charの配列を使って、文字列を格納しそれを使おうとしたら、LPCWSTRのキャストが必要というエラーがでました。 参考書だと普通に通るらしいのですが・・・Visual Stdio.Net 2003と2005の違いなのでしょか?わかる方教えていただけませんでしょうか??
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
補足です。 2005デフォルトのUNICODEを変更する方法は プロジェクト->プロパティ->構成プロパティ->全般 の中にある 文字セットを[Unicode 文字セットを使用する]から[マルチバイト文字セットを使用する] に変更することで可能です。
その他の回答 (6)
- MrBan
- ベストアンサー率53% (331/615)
> wchar_tではなぜかエラーが出てしまいできませんでした 多分、今度は他の char を要求している部分がエラーになってしまったのでしょう。 ちなみに、SJIS(ShiftJIS)はマルチバイト文字セット(文字の種類によって一文字のバイト数が違う)の一種です。通常、C++としてはcharを使います。 一方、MicrosoftがいうUNICODEはワイド文字セットといわれ、一文字のバイト数が固定で複数バイト(2、または4:VCは2)あります。通常、C++としてはwchar_tを使います。 そして、Windowsでは、両者をオプションで切り替えやすいように、TCHARというマクロを用意しています。 本来、WindowsのAPI等を呼ぶときにはこれらを正しく判断して区別しなければなりません。 お使いの参考書は、正しくこれを区別していなかったため、バージョンが変わったらエラーになったものと思われます。 初心者への説明のために、あえて wchar_t のような新しい型を用いなかったのか、作者がそういう注意を払わない人だったのかわかりませんが…。
お礼
なるほど・・・ わかりやすい解説ありがとうございます!!
- MrBan
- ベストアンサー率53% (331/615)
LPTSTRなどTCHAR用の関数にcharを渡したのだと思います。 2003は、デフォルトでSJISですからcharのままで通りますが、デフォルトがUNICODEになっていると、charでは通らないので。 charの代わりにTCHARやwchar_tに読み替えることで対応できると思います。
お礼
wchar_tではなぜかエラーが出てしまいできませんでした 2003と2005はSJISとUnicodeが違うのですね!!初めて知りました!! 情報ありがとうございます!!!
- Missing0001
- ベストアンサー率41% (5/12)
多分、WCHAR(wchar_t)配列を引数と取る関数で char配列を渡したんだと思う。 違うかもしれんが。
お礼
私も、そうかと思い・・・wchar_tで渡したのですが・・・エラーが出てしまいました。 ほかにいろいろ試して見ます!!
- tatsu99
- ベストアンサー率52% (391/751)
No2の方が、言われているソースコードの意味ですが、これは、質問者さまが今コンパイルしようとしているファイルのことを示します。 具体的にはwindow.cppのファイルのことです。これを提示されてみては、いかがでしょうか。
お礼
わかりました。 提示します!
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
そのエラーを吐いた"ソースコード"を呈示してください。
お礼
すみません長くなるので一部を取ります 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 // 小アイコン(なし) }; です
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
コードの呈示がなくてはコメントのしようがありません。
お礼
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' に変換できません。 というエラーです
お礼
ありがとうございます!!! 今、変更してビルドしてみたら正常にビルドできました!!! ほんとうにありがとうございます!