1 名前:デフォルトの名無しさん [2006/11/29(水) 17:00:54 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 Visual C++使いが優しくコメントを返しますが、 お礼はVisual C++の布教と初心者の救済をお願いします。 ■過去スレ 前スレ pc8.2ch.net/test/read.cgi/tech/1150105712/ 前々スレ pc8.2ch.net/test/read.cgi/tech/1141087248/ ■遠い親戚スレ くだすれC++/CLI(初心者用) pc8.2ch.net/test/read.cgi/tech/1142144110/l50 ■関連ページ Visual C++ Home Page www.microsoft.com/japan/msdn/visualc/
47 名前:39 [2006/12/30(土) 23:06:51 ] >>40 デバッグ中に、"逆アセンブル"ウインドウを表示する事は出来るのですが、 混合モードについてはは影も形もありません。 何か特別な設定が必要なのでしょうか
48 名前:デフォルトの名無しさん mailto:sage [2007/01/02(火) 17:44:27 ] >>47 ブレーク中にも表示されないの?
49 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 13:13:10 ] debugモードでビルドしたか
50 名前:デフォルトの名無しさん [2007/01/05(金) 14:54:42 ] VC++ 2005で以下のDLL作成を考えています。 1.C言語で作成されたDLL関数を読み込む 2.関数を別名称にしDLL化する。 3.vb.netで作成したDLLを使用する。 1、2を実現するため以下のソースを記載したのですが 構文的におかしくないでしょうか?
51 名前:50 [2007/01/05(金) 14:55:19 ] #include "stdafx.h" #include <stdio.h> #include "api.h" #ifdef _MANAGED #pragma managed(push, off) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } #pragma comment(lib,"api.lib") extern "C" __declspec(dllimport) BOOL __stdcall APIOPEN(LPTSTR lpHostName ,LPTSTR lpNetmserviceName); __declspec(dllexport) BOOL CAPIOPEN(LPTSTR host,LPTSTR netmservice) { BOOL r = APIOPEN(host,netmservice); return r; } #ifdef _MANAGED #pragma managed(pop) #endif
52 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 15:11:50 ] 構文チェックはコンパイラの仕事
53 名前:50 [2007/01/05(金) 16:03:49 ] >52 失礼しました。 ビルドを実行するとCVTRES の致命的なエラー CVT1100 が発生しました。 MSDNで検索すると/TLBID オプションを変更するとなっているのですが 変更しても同様のエラーが発生します。
54 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 02:19:52 ] プロパティにカテゴリをつけたい場合 IDLファイルにどう書けばいいの?
55 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 02:42:40 ] ICategorizePropertiesを自力実装
56 名前:デフォルトの名無しさん [2007/01/10(水) 11:27:08 ] Win32APIをいぢってプログラムを作ってるんですが、 エディットボックスで日本語入力がうまく行えません。 ウィンドウプロシージャでWM_CREATEのメッセージ処理に、 //ctrls.chatBar⇒HWND //cs⇒LPCREATESTRUCT ctrls.chatBar = CreateWindow(TEXT("EDIT"),TEXT(""), WS_CHILD | WS_VISIBLE, 0,425,531,20, hWnd, (HMENU)CHAT_BAR, cs->hInstance, NULL ); と書いてエディットボックスを貼り付けてます。 日本語を入力する際、何か他に書かないことはあるのでしょうか
57 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 11:34:53 ] フォント
58 名前:デフォルトの名無しさん [2007/01/10(水) 12:02:26 ] HFONT hFont; hFont = CreateFont(20, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, "MS Pゴシック"); SendMessage(ctrls.chatBar, WM_SETFONT, (WPARAM)hFont1, MAKELPARAM(FALSE, 0)); で、フォントを変えてみましたが何もかわりませんでした
59 名前:デフォルトの名無しさん [2007/01/10(水) 15:14:12 ] A,B,Cと3つのボタンを配置し、Aのclick処理を行っている最中にBとCのボタンを先行してclickすると、 Aの処理が終了後B->Cと処理が続きますが、 このBとCの先行入力分のclickイベントを破棄して、無かった事にする方法ってありますか? B,Cがclickされていても、Aの処理終了後は何もしない仕組みが作りたいのですが... VS.NET 2003
60 名前:デフォルトの名無しさん [2007/01/10(水) 15:21:55 BE:15528724-2BP(202)] Aの処理のアタマでBとCをdisable。
61 名前:名無しさん mailto:sage [2007/01/11(木) 18:56:37 ] 終了した後にもう一度繰り返し動作させたいのですが、 exit(0);のように簡単に終了させつつ、 繰り返し最初からやり直すコマンドみたいなものはないんでしょうか? 初心者のまま卒業した先輩のプログラムをいじることになったのですが、 クラスやヘッダなど分からないままやらされてます。 どうもバグがあるらしく、先輩のプログラムは終了しないプログラムでした。 (本当は作業が終わったら終了しなくてはならないプログラムです) return;を使ってもどこに返して居るか分かりません。 main文に無理やり戻して次の関数を続行などできたらベストなのですが・・・
62 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 19:39:16 ] 無理やり戻したところで、続きを正常に実行できる保障がどこにある。
63 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 19:56:59 BE:19410825-2BP(202)] >>61 >main文に無理やり戻して次の関数を続行などできたらベストなのですが・・・ それは別のバグを仕込むだけの愚行。 まず規定の処理で正しく終了するようにしれ。
64 名前:デフォルトの名無しさん [2007/01/17(水) 14:29:56 ] 助けてください Visual C++ 2005 Express Editionを昨日インストールした本当の超初心者なのですが インストールはしっかりできたのですが、新しいプロジェクトを開いても、何の反応 もしない新しいプロジェクトとかかれたものしか出てきません。どうしたらよろしいですか? 教えてください、お願いします
65 名前:デフォルトの名無しさん [2007/01/17(水) 16:20:02 ] MAME32をジョイスティックで動かすことをしたいのですが keybd_eventをつかっても動きません メモ帳で試してみたら、動きました 何か他の方法があるのでしょうか
66 名前:名無しさん mailto:sage [2007/01/17(水) 16:24:50 ] >>62 続きはありません。 メインじゃないプログラムで「この文章を読み込んだら終了」 ってことになってるんですが、終了させる方法が分かりません。 プログラムが少しできる人に付き添って貰ってreturn;ってのを付けて行ったんですが だめでした。 >>63 初期化の関数が別にあります。 return;を付けていってもダメなのでmain文に何とか戻す方法は無いか困ってます
67 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 18:07:07 ] >>66 Cを知らないのにソースをいじろうってのが根本的に間違ってます。
68 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 18:25:00 ] >>66 ソースうpすれば訂正してあげるよ
69 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 18:58:39 ] まあ試しにsetjmp/longjmpを試すのも面白いかもw
70 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 19:01:45 ] >>64 意味がわからん、新規作成じゃだめなのか
71 名前:名無しさん mailto:sage [2007/01/17(水) 19:01:58 ] >>67 Cは約半年程授業で習ったのですが、C++は初めて触るような感じです 素人に毛が生えた程度なので超初心者用とタイトルのあるここに書き込みしました >>68 このプログラム自体は卒業した先輩の卒論ですので、 アップロードのような行為はできないです サイズとしても26.2Mあります。 このプログラムを使って工場のようなものを擬似的に再現して実験するのですが 実験後、待ち状態のまま終了しないことが分かり弄らされてます。
72 名前:デフォルトの名無しさん [2007/01/17(水) 19:09:16 ] #include <iostream> using namespace std; int main(void) { unsigned char x,y; cout << "2つの値を入力してください。\n"; cin >> x >> y; x -= '0'; y -= '0'; int a = x + y; int b = x * y; printf("x = %d, y = %d, x + y = %d, x * y = %d",x,y,a,b); return 0; } これで出力したら10以上の数値が出ないんですが、 どうしたら出るようになるか教えてください。
73 名前:デフォルトの名無しさん [2007/01/17(水) 19:26:55 ] >>70 様 新規作成したあと新しいプロジェクトとでて、どのボタン押してもフーリズ したままです
74 名前:デフォルトの名無しさん [2007/01/17(水) 20:11:04 ] Visual Studio 2005でC++のMFCでダイアログベースのアプリを作っているのですが、 C○○DlgクラスのメソッドでgetParent()を使うとNULLが返ってきます。 getWindow(GW_OWNER)も試しましたがNULLが返ってきました。 どんな原因が考えられますか? やりたい事はCProgressCtrl::Create()なのですが、これの引数に親ウィンドウのポインタが必要になります。 アプリ内で子ウィンドウを立ち上げる事はしていないのですが、 この場合親ウィンドウが無いのでそのせいでしょうか?
75 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 21:03:36 ] >>74 そりゃCreateしないとウィンドウは存在しないべ
76 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 21:08:25 ] >>73 新しいプロジェクトってどこにでるの? 通常は、ファイル-新規作成-プロジェクトでWin32を選べば Win32コンソールアプリケーションが出ると思うけど。
77 名前:73 [2007/01/17(水) 21:31:09 ] >>76様 ありがとうございます Win32っていう選択肢もでてこないんです。ファイルに新規作成という言葉がなくて 類似する言葉は新しいプロジェクトぐらいしかありません。その新しいプロジェクト のなかにはテンプレート、プロジェクトという項目があります。 お手数おかけしますが、どうぞおねがいします
78 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 21:31:22 ] >>74 親ってCProgressCtrlの親だから、DlgからCreateするならthisポインタでOK
79 名前:74 mailto:sage [2007/01/17(水) 21:32:29 ] >>78 thisポインタも試したのですが、 ビルドは通ってもランタイムに不正落ちします。 どんな原因が考えられるでしょうか?
80 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 21:33:47 ] コード見ないと分からない。
81 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 21:34:15 ] >>79 どこでCreateしてるのだ ダイアログのOnCreate以降じゃないとだめだぜ?
82 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 21:36:51 ] >>77 デフォルトのテンプレートがインストールできてないのかな? インストールしなおしてみては
83 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 21:41:53 ] Express EditionってなんかファイルをいじらないとWin32のプロジェクトが出てこないとか言うことはなかったっけ?
84 名前:73 [2007/01/17(水) 21:46:21 ] >>82 様 ありがとうございます。やってみます。
85 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 22:51:09 ] 久々にVC++インスコしてみたら書式が変わってるんですがこれはいったい何事ですか? なんかすべての処理がヘッダファイルに書かれていてcppの方はヘッタファイルのインクルードしかないんですけど・・・ マネージコード、アンマネージコードとかいうヤツのせい? それとも.NETとかいうヤツから変わったの?
86 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 23:01:09 ] >>83 MSのサイトにそういうのあったようなきがす。 PlatformSDKあたりに。
87 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 23:21:53 ] >>85 ウィザードの種類によっては、cppファイルの生成とかいうオプションがあったと思うよ。
88 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 02:54:45 ] >>87 だから、それで生成したcppファイルが・・
89 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 03:08:11 ] よーわからん、クラスのプロパティ出してメッセージ選ぶとハンドラが作成される。 ってそういう話でまくて?
90 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 06:36:05 ] どーせVC++がVC#っぽくなってるってことだろう
91 名前:73 [2007/01/18(木) 17:11:06 ] たびたびすいません、>>82 様のいうとおりやったのですが、document and settingなどと書かれたものが 有効な win32アプリケーションではありませんとでました。 どうしたらよろしいですか?市販のVisual C++ 2005 Express Editionを買えば できるでしょうか?
92 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 19:39:13 ] >>91 ログ読まずにいきなり回答してみる こういうことで合ってる? ttp://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
93 名前:73 [2007/01/19(金) 12:57:22 ] >>92 様どんレスですいません、ありがとうございます やってみます
94 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 15:02:17 ] エディットボックスに入力した日本語を、ボタンを押すとtestという 関数に取り込みたいのですが下のようにしてみたんですがうまくいきません。 どのように変更すれば取り込めるのか教えていただけないでしょうか? よろしくお願いします。 char ss; m_edit.GetWindowText(ss); void test(char *ss) { while(*ss != '\0'){ ・・・・処理・・・ ss++; } }
95 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 15:21:15 ] 何がどううまくいかないのか説明しろ。話はそれからだ。
96 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 15:45:46 BE:23292162-2BP(222)] >char ss; >m_edit.GetWindowText(ss); コンパイル通らん。
97 名前:94 mailto:sage [2007/01/19(金) 16:38:11 ] すいませんchar ss;じゃなくて、CString ss;でした。 エディットボックスにコントロール変数m_editをつくって、 ssに取り込んで、そのデータをtestにとりこんで処理をしたいと考えています。 *ssでよめるようにするには、エディットボックスからどのようにとればいいの かわかりません。よろしくお願いします。
98 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 17:59:42 ] void test(LPCTSTR ss)で受け取る
99 名前:デフォルトの名無しさん [2007/01/20(土) 16:26:02 ] MFCのダイアログベースのプログラムからスレッドを生成した場合、 生成した子スレッドに対してダイアログの方は親スレッドと考えて良いのでしょうか? つまりスレッドの識別子などがあるのでしょうか?
100 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 19:58:56 ] スレッド間に親子関係は無い。 ライブラリの初期化・終了処理を考慮しなければ、全て同等。 スレッドの識別子は両方にある。
101 名前:デフォルトの名無しさん [2007/01/20(土) 21:38:38 ] ifの条件が増えたとき、下のどちらの記載が望ましいのでしょうか? if ( (条件1)&&(条件2)&&(条件3)&&(条件4)&&(条件5)&&(条件6) ){ ; } if ( (条件1)&&(条件2) ){ if ( (条件3)&&(条件4) ){ if ( (条件5)&&(条件6) ){ ; } } }
102 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 21:45:22 ] >>101 スレ違い
103 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 21:51:11 ] >>101 関数化しろ
104 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 23:24:15 ] >>101 どっちでもいいけど自分なら前者で書くかな。 条件部分が長すぎて画面からはみ出るなら適度に改行したり。 if((条件1)&&(条件2)&& (条件3)&&(条件4)&& (条件5)&&(条件6)){ ; }
105 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 17:55:25 ] >>100 返信ありがとうございます。 では、生成されたスレッドからダイアログの方へメッセージを投げたい場合は どうすればいいのでしょうか? スレッドを生成する際に引数としてダイアログのスレッドIDを渡す、など必要になるのでしょうか?
106 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 19:48:13 ] ダイアログなんだからウィンドウハンドルでも渡しておけばいいのでは?
107 名前:101 mailto:sage [2007/01/21(日) 20:41:18 ] >>103-104 トンクス ifを分割すれば余分な条件を弾けて得かなって思ったので質問しました。 クラス内で関数化するのが一般的かもしれませんが、 if() の括弧の中を全て#defineに入れてみようと思います。
108 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 21:25:49 ] スレ違い
109 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 23:24:17 ] 実行ファイルにjpgなどを格納することはできますか? 使用しているのはVC++.net2003です。
110 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 23:34:54 ] >>107 >103
111 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 23:36:46 ] >>109 できます。この板のどこかのスレでそんな話題を見かけました。
112 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 17:36:56 ] fgets や std::getline を使わずにテキストファイルからデータを一行ずつ読み込みたいのですが、 ReadFile で改行文字か EOF が来るまで1バイトずつ読み込んでバッファに取り込むという方法しか 思いつきません。もっといい方法ってありますか? ReadFile でファイルを全部読み込んでから、一行毎に分解するという方法は出来れば避けたいです。 扱いたいのは200万行以上あるファイルです。 いまだにVC6
113 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 17:54:39 ] >もっといい方法ってありますか? あなたにとって、どういうものが良いものなのか説明してください。
114 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 18:11:46 ] >>112 素直にfgets()やstd::getline()を使うことにするのが、「もっといい方法」だと思います。
115 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 18:34:12 ] ならメモリマップトファイルはどうだ。
116 名前:112 mailto:sage [2007/01/22(月) 19:16:40 ] 回答ありがとうございます。 >>113-114 std::getline() でやってたのですが、処理に時間が掛かるのでどうにかならないかなと思いました。 根拠はありませんが、 API で同様の機能が提供されていればもっと効率よく出来そうだとも思ったのですが どうやら無さそうですね。 素直に std::getline() のままで処理内容を見直すことにします。 >>115 CreateFileMapping() とMapViewOfFile() でファイルをメモリ空間にマップできるんですね。 これはこれで面白そうなので別件で試してみようと思います。
117 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 19:41:58 ] 全部読む必要があれば結局同じことだけどな
118 名前:名無しさん(66) mailto:sage [2007/01/22(月) 21:27:44 ] 待ち状態のまま終わらないプログラムの int nRet = WaitForMultipleObjects(NUM_OF_THREADS, hThread, TRUE, INFINITE); このWaitForMultipleObjectsを終了させるか、 INFINITEYのまま何かを読み込んだらタイムアウト、 のような動作はできるものなのでしょうか? >>69 さんのsetjmp/longjmpを使ってみたのですが、 WaitForMultipleObjectsの後ろにジャンプすると、何故か ジャンプした後にプログラムが勝手に終了してしまいます。
119 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 21:38:05 ] WaitForMultipleObjectsExとQueueUserAPCという手がなくはないが、 なんかお前がいきあたりばったりで使いそうで嫌だ。
120 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 21:52:50 ] >>118 スレッドのいずれかが終了すればWaitFor....から制御が返る。 戻り値から終了したスレッドを特定できるので、それ以外のスレッドを終了させればOK。 66でreturnしても駄目だったと書いてるけど、何が駄目だったのか不明。
121 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 21:55:27 ] あ、第3パラメタTRUEか。120じゃだめです。
122 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 21:57:12 ] FALSEにして120すれば良い気もする
123 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 00:25:46 ] でも結局>>67 なんだよな……。
124 名前:デフォルトの名無しさん [2007/01/23(火) 01:05:12 ] Visual C++ 2005 Expressエディションでまずは Hello Worldからと思い 新規プロジェクトでCLRコンソールアプリケーションを選びました。 そうしたら、もうビルドするだけになってるんですね。 まぁこれはいいんですが、このときこんな感じで自動生成されたんですが、 -- #include "stdafx.h" using namespace System; int main(array<System::String ^> ^args) { Console::WriteLine(L"Hello World"); return 0; } -- ここで int main(array<System::String ^> ^args) の部分の意味がさっぱりわかりません。 多分引数を受け取る?配列?な気がしますが、良く分かりません。 C言語でやったように int main( int argc , char *argv[] ) パラメタを処理できることが出来るのは判ったのですが、やっぱり int main(array<System::String ^> ^args) の意味と具体的なパラメタの処理方法が知りたいです。 よろしくお願いします。
125 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 01:28:37 ] >>124 くだすれC++/CLI(初心者用) pc10.2ch.net/test/read.cgi/tech/1142144110/l50 普通のがよければWin32コンソールアプリを選べ
126 名前:デフォルトの名無しさん [2007/01/23(火) 01:37:22 ] >>125 Visual Studio にインストールされたテンプレートってのが表示されて その中に Win32コンソールアプリってのはありません あるのは クラスライブラリ CLRコンソールアプリケーション 空のCLRプロジェクト Windowsフォームアプリケーション の4つだけです。 それと知りたいのは、 int main(array<System::String ^> ^args) の意味するところです。 できれば解説願えませんでしょうか? あっ、くだすれC++/CLI(初心者用)で聞くべき質問ってことですか? すみません、良く分かってなくて。
127 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 01:47:31 ] MSDN読めよ、糞が。 とか言いたくなっちゃうから、きちんとマニュアルは読もうな。 C++/CLIで探せばすぐ判るから。
128 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 09:13:59 ] MSは初心者にはC#やVBを推奨してるから VCは使いにくい面があるかもしれない。 特に目的が決まってないならC#やVBをお勧めする。
129 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 09:33:31 ] PlatformSDK入れてMSDNの該当ページ(>>92 )に従え
130 名前:デフォルトの名無しさん mailto:sage [2007/01/23(火) 21:23:48 ] >>126 そりゃ左でCLRを選んでるからだろ Win32選んでみな
131 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 15:29:36 ] Visual C++だとstring型のハンドルがありますが、 C++のstringは使えないでしょうか? Visual C++はC++の拡張と聞きましたが、C++が分かっていても、 Visual C++はほとんど一から型とかライブラリの使い方を勉強する必要が あるのでしょうか?
132 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 22:08:59 ] 使いたければ使えばいい。
133 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 23:02:30 ] 組み込み型じゃないからな
134 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 02:00:37 ] VC++.NET2002で質問です。 MFCアプリケーション上でダイアログボックスを作って、 DoModal()でモーダルダイアログボックスを表示してます。 ところが、そのダイアログボックスのOnInitDialog()内で メッセージボックスAfxMessageBox( "HogeHoge");を表示すると OKで閉じた後、なぜかモードレスダイアログになってしまいます。 (ダイアログ表示中でも親ウィンドウが操作できてしまう。) これってこういう仕様なのでしょうか?
135 名前:質問者A mailto:sage [2007/01/25(木) 09:21:22 ] Visual Studio C++ Express Edition使っています。 初めてwindowsプログラムします。 猫でもわかるプログラミングのWindowsSDK編第1部の イントロダクションのsample01.cppをビルドしたんですが、 エラーが出てしまいます。 ★プロジェクトの作成方法 [ファイル]-[新規作成]-[プロジェクト] [新しいプロジェクト]ダイアログで [プロジェクトの種類]→Win32 [テンプレート]→Win32コンソールアプリケーション と選択して、 プロジェクト名(lesson)を入力して [OK]をクリック。 [Win32アプリケーションウィザード] で、 [アプリケーションの種類]→Windowsアプリケーションにチェック [追加オプション] で、 [空のプロジェクト]→チェックせず(デフォルト) [プリコンパイル済みヘッダー]→チェック(デフォルト) で、[完了]ボタンを押しました。
136 名前:質問者A mailto:sage [2007/01/25(木) 09:21:54 ] あらかじめ用意された↓をビルドすると正常終了します。 //lesson.cpp #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { return 0; }
137 名前:質問者A mailto:sage [2007/01/25(木) 09:22:33 ] ★プログラムの変更 これを猫でもわかるに変えたいんですけど、 関数名が@とAで違うので、 Aの関数名だけ@の名前(_tmain)に変えて 実行しました。 @↑ int _tmain(int argc, _TCHAR* argv[]) A猫でもわかるのサンプル int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow)
138 名前:質問者A mailto:sage [2007/01/25(木) 09:24:23 ] すると、↓のようなエラーが出てしまいました。 ★エラー内容 lesson.cpp d:\lesson\lesson\lesson.cpp(24) : error C2440: '=' : 'HGDIOBJ' から 'HBRUSH' に変換できません。 'void*' から非 'void' 型への変換には明示的なキャストが必要です。 d:\lesson\lesson\lesson.cpp(26) : error C2440: '=' : 'char [25]' から 'LPCWSTR' に変換できません。 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 d:\lesson\lesson\lesson.cpp(40) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'char [25]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 d:\lesson\lesson\lesson.cpp(47) : warning C4244: 'return' : 'WPARAM' から 'int' への変換です。データが失われる可能性があります。 ビルドログは "file://d:\lesson\lesson\Debug\BuildLog.htm" に保存されました。 lesson - エラー 3、警告 1 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== プロジェクトの作成の仕方が悪いのでしょうか? 教えてください。
139 名前:質問者A mailto:sage [2007/01/25(木) 09:27:11 ] 変更後のプログラムです。(長いので分割して書きます。すみません) #include "stdafx.h" #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); char szClassNme[] = "ウィンドウクラス・ネーム";
140 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 09:51:35 ] www.kumei.ne.jp/c_lang/ ここの2005と書いてある部分を参照
141 名前:質問者A: mailto:sage [2007/01/25(木) 10:09:30 ] (「連続投稿です」と言われて書き込みが途中で止まっていました) >>140 ありがとうございます。気付きませんでした。 [VS2005の設定方法]見ました。 >次に、Win32APIを利用したWindowsアプリケーションの設定です。 >「新しいプロジェクト」では、プロジェクトの種類を「Visual C++」、テンプレートを「Win32 プロジェクト」にします。 私の環境だと「Win32 プロジェクト」がありません。 「Win32コンソールアプリケーション 」のみです。 (これってVC++2005のExpressだと無理ということでしょうか?) とりあえず「Win32コンソールアプリケーション 」として 残りはサイトに書かれている通り、 「アプリケーションウィザード」で、 アプリケーションの種類を「Windowsアプリケーション」 追加のオプションを「空のプロジェクト」 にしました。 しかし、>>138 と同じエラーがでてしまいました。
142 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 10:58:36 ] >>141 プロジェクトのプロパティの「全般」に文字コードの指定があるからMBCSに変更。 24行と47行のは明示的にキャストしとけ。 にしても、初心者が見る箇所に Win16を引き摺ってるようなコードを放置してあるのは良くないな。
143 名前:質問者A: mailto:sage [2007/01/25(木) 11:19:00 ] >>142 >プロジェクトのプロパティの「全般」に文字コードの指定があるからMBCSに変更。 できました!ありがとうございます。
144 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 13:28:52 ] OS:WindowsXP SP2 環境:VS2005 MFC使用 教えていただきたいことがあります イミディエイトウィンドウにメモリリーク時の情報が表示されますが、発生したファイル名 を表示したいのですがどのようにしたらよいのでしょうか? MFCでは標準でDEBUG_NEWが定義されており、これでファイル名も表示されるという情報を ネットでよく見かけるのです。この情報に間違いがなければデフォルトで表示されるはずなのですが・・。 今のアウトプットウィンドウの表示 Detected memory leaks! Dumping objects -> {15027} normal block at 0x01322E30, 346 bytes long. Data: <5 9 9 9 E Q> 35 00 39 00 39 00 39 00 00 00 45 00 00 00 E6 51 Object dump complete. おそらくこうなるであろうファイル名付属のアウトプットウィンドウの表示 Dumping objects -> C:\MyProjects\TestProt\Test.cpp(17) : {16} normal block at 0x00780EC0, 4 bytes long. Data: < > CD CD CD CD Object dump complete. よろしくお願いいたします。
145 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 13:49:44 ] その質問に答えようと思ったら 適当なプロジェクト作ってわざとメモリリークさせて結果を見てみるだけだから 自分でやってみればいい
146 名前:144 mailto:sage [2007/01/25(木) 14:04:43 ] >>145 ためしに新規のプロジェクトを作成し、ってわざとメモリリークさせてみたところ、 ファイル名が表示されていました。 DLL参照したり、ソースファイルとプロジェクトのディレクトリを別々にしたりしてるんで それが原因なのでしょうか?
147 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 17:13:19 ] >>135 猫でもわかるなら、VS2005サンプルプログラムのところも見てみろよ。