こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

LPCWSTRとchar

質問なのです・・・

現在、私は[Visual Stdio.Net 2005]を使って、C++のプログラミングをしようと思いまして、今日参考書を見てやってみたのですが、

charの配列を使って、文字列を格納しそれを使おうとしたら、LPCWSTRのキャストが必要というエラーがでました。
参考書だと普通に通るらしいのですが・・・Visual Stdio.Net 2003と2005の違いなのでしょか?わかる方教えていただけませんでしょうか??

投稿日時 - 2006-06-24 23:55:33

QNo.2236318

困ってます

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

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

投稿日時 - 2006-06-25 22:49:10

お礼

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

投稿日時 - 2006-06-25 23:34:29

このQ&Aは役に立ちましたか?

22人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.7

> wchar_tではなぜかエラーが出てしまいできませんでした

多分、今度は他の char を要求している部分がエラーになってしまったのでしょう。

ちなみに、SJIS(ShiftJIS)はマルチバイト文字セット(文字の種類によって一文字のバイト数が違う)の一種です。通常、C++としてはcharを使います。
一方、MicrosoftがいうUNICODEはワイド文字セットといわれ、一文字のバイト数が固定で複数バイト(2、または4:VCは2)あります。通常、C++としてはwchar_tを使います。

そして、Windowsでは、両者をオプションで切り替えやすいように、TCHARというマクロを用意しています。

本来、WindowsのAPI等を呼ぶときにはこれらを正しく判断して区別しなければなりません。

お使いの参考書は、正しくこれを区別していなかったため、バージョンが変わったらエラーになったものと思われます。
初心者への説明のために、あえて wchar_t のような新しい型を用いなかったのか、作者がそういう注意を払わない人だったのかわかりませんが…。

投稿日時 - 2006-06-26 10:23:40

お礼

なるほど・・・

わかりやすい解説ありがとうございます!!

投稿日時 - 2006-07-01 22:43:08

ANo.5

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

投稿日時 - 2006-06-25 15:25:37

お礼

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

投稿日時 - 2006-06-25 23:33:19

ANo.4

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

投稿日時 - 2006-06-25 12:59:42

お礼

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

投稿日時 - 2006-06-25 23:31:26

ANo.3

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

投稿日時 - 2006-06-25 09:36:39

お礼

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

投稿日時 - 2006-06-25 23:29:35

ANo.2

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

投稿日時 - 2006-06-25 01:24:20

お礼

すみません長くなるので一部を取ります


char clsName[]= "D3DFWSampleClass";// ウィンドウクラス名

HWNDhWnd;
MSGmsg;



// ウィンドウクラスの初期化
WNDCLASSEXwcex = {
sizeof(WNDCLASSEX),// この構造体のサイズ
NULL,// ウインドウのスタイル(default)
WindowProc,// メッセージ処理関数の登録
0,// 通常は使わないので常に0
0,// 通常は使わないので常に0
hInstance,// インスタンスへのハンドル
NULL,// アイコン(なし)
LoadCursor(NULL, IDC_ARROW),// カーソルの形
NULL, NULL,// 背景なし、メニューなし
clsName,// クラス名の指定
NULL// 小アイコン(なし)
};


です

投稿日時 - 2006-06-25 23:28:50

ANo.1

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

投稿日時 - 2006-06-25 00:46:24

お礼

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' に変換できません。


というエラーです

投稿日時 - 2006-06-25 01:06:32

あなたにオススメの質問