- ベストアンサー
Visual Studio 超初心者です。
初めての質問です、よろしくお願いします。 「Visual Studio 2005(アカデミックパック)」を先日購入したばかりの初心者です。 プログラミング経験はCの本を一冊分くらい勉強した程度です。 ネットや書籍の情報を読んでいて、次はVisual C++なのかなと思い「Visual C++1 はじめてのWindowsプログラミング/山本信雄著」と合わせて購入しました(Express Editionというものがあると知ったのはその後でした・・・) 質問なのですが、上に挙げた本のコードをVisual Studioに記述してもビルドができません。ビルドしても「 error C2664: 'lstrcpyW' : 1 番目の引数を 'char [80]' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照)指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。」といったエラーが4つほど出てしまいます。ヘルプ参照とありますが、それもよく分かりません・・・(泣)。 最低レベルの質問かもしれませんがよろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
VC2005の場合は、 メニュー → プロジェクト → ~のプロパティ → 構成プロパティ(全般) 文字セットを 「マルチバイト文字セットを利用する」 に変えればいけるかも。
その他の回答 (5)
- uyama33
- ベストアンサー率30% (137/450)
警告が出なくなる だけで、エラーは消えません。 エラーのでる行を書いてみたら 適切なアドバイスがもらえるでしょう。
お礼
二度目の回答ありがとうございます。 #4さんの方法で解決しました。
- noocyte
- ベストアンサー率58% (171/291)
#2 です.リベンジを期して.(笑) もし #4 さんの方法でもダメならば,WinBase.h の中を lstrcpyW と lstrcpyA で検索してみて,次のような部分を探してください. ("UNICODE" の部分は他のシンボル名に変わっているかもしれません.) #ifdef UNICODE #define lstrcpy lstrcpyW #else #define lstrcpy lstrcpyA #endif // !UNICODE 見つかったら,lstrcpyA の方が有効になるように,プリプロセッサ・シンボルを 定義してみてください.
お礼
二度目の回答ありがとうございます。。 #4さんの方法で解決しました! 丁寧な回答を二度もしていただきとても感謝・感激しています。 ありがとうございます。
- uyama33
- ベストアンサー率30% (137/450)
わたしも苦労しています。 下のURL を参考にしました。 それから、 エラーは修正しましたが 警告は無視しています。(約1000個あります。)
お礼
回答ありがとうございます。 参考URLによればとりあえず「#pragma warning(disable : 4996)」をつければエラーはなくなるとある(と思う)んですが、記述しても記述する前と同様にエラーが出てしまいます・・・何か設定の条件が悪いということなのでしょうか・・?
- noocyte
- ベストアンサー率58% (171/291)
VC2005 は使ったことがないので,VC2003 の経験で書きますが, メニュー → プロジェクト → プロパティ → C/C++ → プリプロセッサ → プリプロセッサの定義 で, (1) _UNICODE,UNICODE というシンボルが定義されていれば,それを削除. (2) _MBCS,MBCS というシンボルを追加. でどうでしょうか?
お礼
回答ありがとうございます。 その手順で(1)、(2)を試みて満たしたが、(1)の方はそれらは定義されておらず、(2)の方は追加してみましたが変わらずエラーのままでした。 しかし、ご協力感謝しています。
- MrBan
- ベストアンサー率53% (331/615)
多分、購入した本がVC.NET以前用で、UNICODE対応を意識していないものだったのでしょう。 VC2005からはデフォルトがUNICODEに変わっています。 文字列操作周りにはWindows固有の方言があり、UNICODE/MBSr方法に対応するには、例えば以下のような色々なルールがありました。 ・charと書いてあるところは、TCHARを使う。 ・char*はLPTSTR、const char* はLPCTSTRを使う。 ・文字と文字列はTEXT()でくくる。例:TEXT("Hello World"), TEXT('a') これらはWindows固有のものでC言語の標準ではないので、Cの本には載ってません。 VC2003以前は、デフォルトがMBSだったので、特に意識しないコードでもとりあえず動いていました。 両方に対応する場合にはTCHARについて調べてみてください。
お礼
早速、とても丁寧な回答ありがとうございます。すこし感激しています。 MrBanさんの回答を元にまた色々試したり、調べたいと思います。 つまり、結局はコードを書きかえなければいけないということですよね?
お礼
回答ありがとうございます。 いけました!!! いけました!!! ありがとうございます、とても助かりました。