• ベストアンサー

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つほど出てしまいます。ヘルプ参照とありますが、それもよく分かりません・・・(泣)。  最低レベルの質問かもしれませんがよろしくお願いします。

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

  • ベストアンサー
回答No.4

VC2005の場合は、 メニュー → プロジェクト → ~のプロパティ → 構成プロパティ(全般) 文字セットを 「マルチバイト文字セットを利用する」 に変えればいけるかも。

noname#22784
質問者

お礼

回答ありがとうございます。 いけました!!! いけました!!! ありがとうございます、とても助かりました。

その他の回答 (5)

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.6

警告が出なくなる だけで、エラーは消えません。 エラーのでる行を書いてみたら 適切なアドバイスがもらえるでしょう。

noname#22784
質問者

お礼

二度目の回答ありがとうございます。 #4さんの方法で解決しました。

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.5

#2 です.リベンジを期して.(笑) もし #4 さんの方法でもダメならば,WinBase.h の中を lstrcpyW と lstrcpyA で検索してみて,次のような部分を探してください. ("UNICODE" の部分は他のシンボル名に変わっているかもしれません.) #ifdef UNICODE #define lstrcpy lstrcpyW #else #define lstrcpy lstrcpyA #endif // !UNICODE 見つかったら,lstrcpyA の方が有効になるように,プリプロセッサ・シンボルを 定義してみてください.

noname#22784
質問者

お礼

二度目の回答ありがとうございます。。 #4さんの方法で解決しました! 丁寧な回答を二度もしていただきとても感謝・感激しています。 ありがとうございます。

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.3

わたしも苦労しています。 下のURL を参考にしました。 それから、 エラーは修正しましたが 警告は無視しています。(約1000個あります。)

参考URL:
http://www.kumei.ne.jp/c_lang/net2005/index.html
noname#22784
質問者

お礼

回答ありがとうございます。 参考URLによればとりあえず「#pragma warning(disable : 4996)」をつければエラーはなくなるとある(と思う)んですが、記述しても記述する前と同様にエラーが出てしまいます・・・何か設定の条件が悪いということなのでしょうか・・?

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.2

VC2005 は使ったことがないので,VC2003 の経験で書きますが, メニュー → プロジェクト → プロパティ → C/C++ → プリプロセッサ → プリプロセッサの定義 で, (1) _UNICODE,UNICODE というシンボルが定義されていれば,それを削除. (2) _MBCS,MBCS というシンボルを追加. でどうでしょうか?

noname#22784
質問者

お礼

回答ありがとうございます。 その手順で(1)、(2)を試みて満たしたが、(1)の方はそれらは定義されておらず、(2)の方は追加してみましたが変わらずエラーのままでした。 しかし、ご協力感謝しています。

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

多分、購入した本が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について調べてみてください。

noname#22784
質問者

お礼

早速、とても丁寧な回答ありがとうございます。すこし感激しています。 MrBanさんの回答を元にまた色々試したり、調べたいと思います。 つまり、結局はコードを書きかえなければいけないということですよね?

関連するQ&A

専門家に質問してみよう