• ベストアンサー

「猫でもわかるプログラミング」について。

Oh-Orangeの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.6

★『猫でもわかるプログラミング』サイトは警告メッセージがたくさん出ます。 ・回答者 No.4 さんの補足にある内容から正しいキャストがされていなかったり、文字列を TEXT() マクロを  使っていないためか、『LPCSTR』から『LPCWSTR』に変更できませんのエラーメッセージの嵐のはずです。 解決策1: ・文字列には TEXT() を使って記述しなおす。  修正前⇒LPCSTR szClassName = "font02"; //クラス名  修正後⇒LPCSTR szClassName = TEXT("font02"); //クラス名  ※すべての文字列について TEXT() を使って記述します。  ※このマクロを利用するとマルチバイト環境(シフトJIS)や Unicode 環境(ワイド文字)の両方の環境に   コンパイル・オプションで切り替えられるようになります。コンパイラの VC 2005.NET は初期設定で   Unicode になっているためマルチバイト環境用に記述されているソースはエラーの嵐になります。  ※この文字列の一番簡単な解決策は、回答者 No.5 さんの回答にあるように『プロパティ』設定から   『マルチバイト文字セットを使用する』を選択します。でも、今後のことも考えてこれから文字列を   記述する場合は TEXT() マクロを利用して書く習慣をつけたほうが良いでしょう。 ・正しいキャストを入れること。→回答者 No.5 さんの回答を参考に。 その他: ・これからは、文字列の型は『TCHAR』型の配列で指定して下さい。『char』型配列ではありません。  『UCHAR』、『char』はマルチバイト文字を扱う『型』です。文字列定数では頭に『L』は付けない。→"あいうえお"  『WCHAR』、『wchar_t』は Unicode 文字を扱う『型』です。文字列定数では頭に『L』を付けます。→L"あいうえお"  上記の2つをコンパイル・オプションから切り替えるように記述したい場合は『TCHAR』の型で宣言、  TEXT() マクロを使って定数を記述します。→TCHAR szBuff[256];、TEXT("あいうえお") などとする。 ・また文字列のポインタは、TCHAR 型のポインタと記述する以外に次の型も存在します。  『PSTR』、『LPSTR』は CHAR 型へのポインタを typedef で再定義されています。  『PCSTR』、『LPCSTR』は const CHAR 型へのポインタを typedef で再定義されています。  『LPTSTR』は TCHAR 型へのポインタを typedef で再定義されています。  『LPCTSTR』は const TCHAR 型へのポインタを typedef で再定義されています。  上記以外にも『PCHAR』、『PTCHAR』などあります。 ・いっぱいありますが使うのは『TCHAR』、『LPTSTR』、『LPCTSTR』の3つだけで良いでしょう。  (1)文字配列を宣言するときは『TCHAR』を使う。→TCHAR szBuff[256];  (2)文字列ポインタを宣言するときは『LPTSTR』を使う。→LPTSTR lpDest;  (3)const 型の文字列ポインタ宣言は『LPCTSTR』を使う。→LPCTSTR lpString; ・http://wisdom.sakura.ne.jp/system/winapi/win32/win4.html→『Windowsと文字コード』 ・http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200512/05120029.txt→『UCHAR→TCHAR変換』 最後に: ・下の『参考URL』に『Visual C++ 2005 C/C++ランタイム ライブラリ新機能概要』という項目があります。  また、『猫でもわかるプログラミング』サイトでも次の項目があります。  http://www.kumei.ne.jp/c_lang/net2005/index.html→『VS2005でうまくビルドできない時は』  http://www.kumei.ne.jp/c_lang/net2005/sample.htm→『VS2005サンプルプログラム』  ※ここの2つのページに、今回の質問の回答となる内容があります。→読んでないでしょう!  ※両方ともトップページのカウンタのすぐ下の部分にあるリンク項目です。ここ読みましょう。 ・あと pragma 指定を1行追記しても上手くいくらしいです。→私は試していないが…。  『#pragma warning(disable : 4996)』の1行をソースの一番上に記述するだけで古い形式の関数の使用警告を  無効にすることが出来るようです。もし、TEXT() マクロ使用以外でエラーが出た場合は pragma 指定を行って  下さい。上手くいくはずです。下の『参考URL』にも書かれてあるので。 ・以上。今後のこのサイトの参考にして下さい。

参考URL:
http://www.microsoft.com/japan/msdn/security/demo/runtime.aspx
DT50
質問者

お礼

いろいろとアドバイスをありがとうございます。 No.5さんのところで補足しましたが、表示はされるのですがエラーが少し出て、どうしたらエラーが表示されなくなるのか(もしくはエラーが出ていてもいいのか)考えているところです。 他にVCでやりたいことがありますので、そちらについては別に投稿させて頂きます。

関連するQ&A

  • MDIのメモ帳もどきにセーブ・ロード機能をつけるには

    猫でもわかるプログラミング WINSDK編 83章~85章のMDIのメモ帳もどきにセーブ・ロード機能を 付けるには、どうすればいいんですか? http://www.kumei.ne.jp/c_lang/sdk/sdk_83.htm http://www.kumei.ne.jp/c_lang/sdk/sdk_84.htm http://www.kumei.ne.jp/c_lang/sdk/sdk_85.htm MDIのドキュメントウィンドウのウィンドウハンドルを取得したら、 (これは前回質問して分かりました。hChildがハンドルですね?) その子ウィンドウであるエディットボックスのウィンドウハンドルを 取得したいんですが、どうすればいいですか? 要するに、「猫でもわかるWindowsプログラミング第2版」の int MyOpen(HWND hEdit);int MySaveAs(HWND hEdit);に手を加えるだけで テキストファイルを操作したいんです。

  • dllの作り方

    環境 WIN98 VC++6.0 MFC にて 猫でも~において 161章でdllを作りましたが、xxx.dllファイルは作成されますが、xxx.libが作成されません。 162章では両方作られ問題ありません。 作り方は、 メニューから「ファイル」「新規作成」「プロジェクト」(タブ)を選択します。そこから「Win32 Dynamic-Link Library」を選びました。 どうすればxxx.libが作られるのか教えてください。 161章 http://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm 162章 http://www.kumei.ne.jp/c_lang/sdk2/sdk_162.htm

  • C++でプログラミングを行っているのですが、リソースファイルがコンパイ

    C++でプログラミングを行っているのですが、リソースファイルがコンパイルできません。 以前にyahoo知恵袋でも質問したのですが、解決しなかったのでこちらで再度同様の質問いたします。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1243426602 文法エラーではないはずです。 http://www.kumei.ne.jp/c_lang/sdk/sdk_06.htm (猫でもわかるプログラミング) ここのソースをまるっとコピーしてもエラーとなります。 他のサイトのソースで試してみてもだめでした。 何か問題があるのでしょうか。

  • パイプを用いたプロセス間通信について

    VC++2005にて下記サイトを参考にパイプを用いたプロセス間通信を行うプログラムを作成しています。 猫でもわかるプログラミング (1)第242章 匿名パイプ(サーバー側) http://www.kumei.ne.jp/c_lang/sdk3/sdk_242.htm (2)第243章 匿名パイプ(クライアント側) http://www.kumei.ne.jp/c_lang/sdk3/sdk_243.htm サーバー側からWriteFileでデータを送信する際に、 char型配列に入ったバッファデータ「szBuf」を送信し、 クライアント側のReadFileで同じく「szBuf」で受信していますが、 構造体Data ================== typedef TypeData{ int a; int b; char c[10]; }Data; ================== のオブジェクトdataを送信するには、WriteFile及びReadFileの箇所は どのように実装すれば良いのでしょうか? MSDNにはWriteFileの引数の型はLPCVOIDとあるため、 可能だと思うのですが。。。 もし解決策をご存知の方おられましたら、ご教示お願い致します。

  • 猫でもわかるプログラミング74章

    74章は http://www.kumei.ne.jp/c_lang/sdk/sdk_74.htm です。簡単なメモ帳をつくるというお題で、その中に ファイルをオープンするとき、 char szFileName[256];// オープンするファイル名(パス付き) char szFile[64];// ファイル名 OPENFILENAME ofn; として、 … ofn.lpstrFile = szFileName; //フルパスつきファイル名を格納 ofn.lpstrFileTitle = szFile;//選択されたファイル名が格納されます … GetOpenFileName関数 として、「ファイルを開く」のコモンダイアログを開いてファイル名等等を取得し、 CreateFileでそのファイルをopenするという例題なのですが、 szFileNameにはパスつきファイル名が格納されているのですが、szFileにはなにも格納されていないみたいなんです。ずっと色々悩んでいるのですが、どこがいけないでしょうか。 VC++ 6.0 WinXP

  • 猫でもわかるwindowsプログラミング第三版について設定の仕方がわかりません。

    使っているコンパイラはVC++2008エクスプレスエディションです。 「猫でもわかるwindowsプログラミング第三版」には、上記の物が使えると書いてあり、 リソースエディタも、フリーのreseditを入れました。 後、SDKもきちんと設定しました。 しかし、どのプログラムもエラーがでます。 どうしたらいいのでしょうか? わかる方、またはよいHPがあれば教えてください。

  • VC++6.0で、C言語を使ってメールの受信確認プログラムを組んでいま

    VC++6.0で、C言語を使ってメールの受信確認プログラムを組んでいます。 どのような動きをするのか一度知っておきたくて、 猫でもわかるプログラミングの「第230章 メールを受信する」 [http://www.kumei.ne.jp/c_lang/sdk3/sdk_230.htm] を組んでテストをしてみたのですが、 メールを1通も受信していない場合、 「0 messages」が返されると書いてあるのですが、 何度やっても返されません。 また、USERNAME を入れた辺りから、 返ってくる値がずっと[+OK]しか返ってきませんが、 エラー等も確認できません。 LISTを送信したときには 「-ERR not that many messages」ような エラーが返ってきます) 何か仕様が変わって、OKでは判断せずに、 上記のエラーを出力させてから判断するプログラムになった ということでしょうか。 メールがある場合は、通常通りに動作しています。 宜しくお願いいたします。

  • USBで持ち運びできるWindowsプログラミングの開発環境

    USBで持ち運びできるWindowsプログラミングの開発環境を探しています。 自宅ではMicrosoft Platform SDKを利用してVC++2005で開発しています。 学校でもWindowsプログラミングを行いたいのですが 学校にはVC++2005はインストールされているものの Microsoft Platform SDKがインストールされておらず Windowsアプリケーションを作成できません。 そこで、USBで開発環境を持ち運びできないかと考え 色々と探したのですが、見つかりませんでした。 ご存知の方いらっしゃいましたらよろしくお願いします。 備考 自宅:Windows XP Home Edition 学校:Windows XP Professional

  • 猫でもわかるプログラミング161章

    http://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm にDLLを使ったメッセージフックについて説明があるのですが、どうもその通りにやってもうまくいきません。 まず、 1.dll作成する際にlibが生成されない。 2.ヘッダファイルに #define EXPORT extern "C" __declspec(dllexport) を付け加え、 EXPORT LRESULT CALLBACK .... という風にEXPORTをつけてビルドすると、libファイルが生成されるものの、それをメインプログラムのプロジェクトに追加しても リンク中... hookmain.obj : error LNK2001: 外部シンボル ""int __cdecl ResetHook(void)" (?ResetHook@@YAHXZ)" は未解決です hookmain.obj : error LNK2001: 外部シンボル ""int __cdecl SetHook(void)" (?SetHook@@YAHXZ)" は未解決です Debug/hook.exe : fatal error LNK1120: 外部参照 2 が未解決です。 link.exe の実行エラー というエラーが起きます。 このエラーが何を意味しているかもわからず、dllについても勉強中なのでどこを直せばいいかがみえてきません。どなたかわかる方がいらしたらよろしくお願いします VC++ 6.0 WinXP

  • 用意するもの

    質問させていただきます DIREXTXや ttp://www.kumei.ne.jp/c_lang/index_sdk.html こちらに書いてあるWindows SDKは どこでダウンロードすればいいんでしょうか? 探しているんですが英語で書いてあったりよくわかりません できれば詳しく教えて下さると嬉しいです;