1 名前:デフォルトの名無しさん [2007/09/10(月) 12:20:27 ] 1 : ◆Manna2uCLg :2005/04/15(金) 13:33:14 Visual C++入門者・初心者からの質問を、 お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。 ■質問するにあたって ・エラーや警告のときはエラーメッセージを書きましょう。 ・開発環境も書きましょう。 ・できるだけ具体的に。 質問の仕方については次のページが大変参考になります。 www.hyuki.com/writing/techask.html myu.daa.jp/osiete/ ■回答するにあたって ・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。 (MSDNのどの項目だとか、何のキーワードでGoogleするとか) ・ネタや煽りは軽く流しましょう。 過去スレ、関連スレなどは>>2-5 。
159 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 20:12:47 ] 本か何か買ったの? それ見てやればいいんじゃね?
160 名前:デフォルトの名無しさん [2007/09/23(日) 21:31:01 ] 最近のWindowsアプリケーションはいったいどんな種類があるの? 自分はダイアログベースアプリが80% 10%はDLLやStaticLib 時々SDIアプリ たまーにActiveX GUI系で最近の流行ってなんですか?
161 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 07:02:02 ] スリープ(モニタ電源OFF)から復帰すると動作がおかしくなってるのですが なにか特別な処理をする必要があるのですか?ソフトはアナログ時計です。 なおPC不調でサスペンドから復帰できなくなってるのでサスペンドの場合はどうなるのか 不明です。
162 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 07:12:33 ] サスペンドの場合はPCの電源が即座に切れ二度と起動しなくなります。
163 名前:デフォルトの名無しさん [2007/09/25(火) 22:01:23 ] Visual C++と、標準C++って何が違うんですか?
164 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 22:19:24 ] Visual C++は商品名で標準C++は言語名
165 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 22:31:11 ] Visual C++で、入門者がMFCを最初にやるのは馬鹿ですかね?
166 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 23:51:53 ] C++ をよく理解してるんならいいんじゃないのかな。 でも Windows プログラムの動く仕組み理解しておいた方がいいんじゃないかな
167 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 00:09:05 ] VisualC++で、キーボードからの入力をテキストファイルに保存したいんですけど、どうしたら出来ますかね?
168 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 00:39:39 ] 1)キーボードから入力を受け取って 2)ファイルに書き込む といいよ
169 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 00:55:04 ] >>167 キーロガー作ってパス盗む気か
170 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 01:11:12 ] ついでに特定のサイトを見ているときだけ保存したいんですけど、どうしたらできますかね?
171 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 02:41:42 ] >>170 釣りは死んでください。
172 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 02:45:01 ] はい
173 名前:デフォルトの名無しさん [2007/09/26(水) 07:28:10 ] vs2005ですが、デバッグの際、 stlのvectorとかでエラーが出たときに なんかウィンドウが出るだけでデバッガの方に出力されないので どこでエラーが出てるのか分かりにくいです。 どうにか場所を特定する方法ってありますか?
174 名前:デフォルトの名無しさん [2007/09/26(水) 08:12:35 ] キーボードからの入力を受け取りたいんですけど、やっぱりAPIとかの知識がないとだめなんですかね?
175 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 08:18:52 ] キーボードからの入力以前に、やっぱりAPIとかの知識がないとだめ人間です。
176 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 08:25:37 ] >>173 つブレークポイント まず適当にブレークポイントを設定して自分のコードのどの場所でエラーが出るか特定する 次にその部分で使ってる関数の各ステップにブレークポイントを設定してどの場所でエラーが出るか特定する それを再帰的に繰り返していくとランタイムアサートのマクロ構文に辿り着く筈
177 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 08:39:44 ] >>175 学習してきます。
178 名前:デフォルトの名無しさん [2007/09/26(水) 20:53:45 ] 質問です。 struct Base { void *p; virtual ~Base(){} }; struct Hoge : public Base { Hoge(){p = new HogeData;} }; と、このように IData *pを派生先で共有したいと思っています。 派生先ごとにpに何を生成するかは決まっており、 Hoge なら new HogeData Main なら new MainData John なら new JohnData といった具合です。(xxxData たちは全て、IDataを継承しています) この状態で Hoge *pHoge = new Hoge; と、VisualSturio6.0のデバッガ「変数ウインドウ」で見た場合、pはあくまでvoid*型なのでそれ以上データを見ることはできません。 しかし、プログラマである私が決めたルールとして Hogeの時のpは*HogeDataとして扱うというルールがあります。 これをデバッガに認識させる方法はありませんでしょうか? ・Base *pHoge = new Hoge; とした場合、pHoge->pをHogeDataだと認識する必要は無い(高望みすぎるので) ・void *p; のかわりに IData *p; にしてみたが、IDataとしてしか認識してくれなかった(HogeDataの持つ変数は見られなかった) ・デバッガに認識させるために、何か特別な記述を加える労力は惜しまない ・クイックウォッチを使ってきちんと手動で型認識させてやれば見られたが、毎回手動はきつい(自動にできる方法があるならそれでもいいかも) よろしくお願いします。
179 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 20:55:30 ] 1行間違いです >と、このように IData *pを派生先で共有したいと思っています。 ↓ と、このように void *pを派生先で共有したいと思っています。 曖昧な表現でした >pはあくまでvoid*型なのでそれ以上データを見ることはできません。 ↓ つまり、変数ウインドウ上のpの頭のところに[+]記号が出てこないということです
180 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 21:08:24 ] >>178 仮にBaseはpを持っている必要がないとすれば、 BaseにIData* GetData() = 0;のようなメンバ関数を用意して、 個々の派生クラスで、メンバ変数pとpを返すGetDataを定義するという方法が思い付く。 派生クラス毎にpを持てば、HogeDataなど特化した型にできるだろう。
181 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 21:17:04 ] void pointer…(ゴクリ
182 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 21:22:40 ] >>180 お返事ありがとうございます。 派生クラス毎に持つという案は確かに考えたのですが、 Base <- Hoge <- HogeEx とやったときに複数ポインタが存在することになってしまいます。 (Baseには無しとしても、Hoge分とHogeEx分) IData* GetData() =0; の手法ですが、そのGetDataを呼び出す記述がソースに無い限り いきなりブレイクして変数ウインドウを見ても表示されないのではないでしょうか。 一応今も非virtual なGetDataをそれぞれ持つようにさせ、クイックウォッチの時の記述が統一的になるようにはしています。 (ただ、それでもクイックウォッチ呼び出すのかなり面倒なのですよね…)
183 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 21:46:50 ] template <typename T> struct Holder : public IHolder { Holder() : p(new T) { IHolder::p = p; } T* p; }; を作って typedef Holder<HogeData> Hoge; typedef Holder<MainData> Main; みたいに使えばどうか? 見るだけならrelease時はT* p を持たないバージョン作っといてそれを使うようにすればいいし
184 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 21:49:48 ] 変数ウインドウで値みなきゃデバッグできないわけじゃないし それだけのためにごちゃごちゃソースいじるのも頭わるすぎる
185 名前:デフォルトの名無しさん [2007/09/26(水) 21:54:44 ] なるほど、テンプレートですか 実験してみようと思います。 しかし逆に考えると、テンプレート使うくらいしか方法が無いってことなんでしょうかね 私の妄想上の記述ですが struct Base { void *p; virtual ~Base(){} }; struct Hoge : public Base { union { void *Base::p; HogeData* pHogeData; } Hoge(){p = new HogeData;} }; こんなことできないもんでしょうかね?
186 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 21:55:58 ] >>184 確かに正論だと思います。 なので「簡単に変数ウインドウで確認するための方法」があるなら知りたいわけです。 とてつもなくソースが難読になってしまうのなら、やらないだろうと思います。
187 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 22:15:32 ] もちろんできますお でもこうすればIHolderがいらない子になってしまう template <typename T> struct Holder { Holder() : derived(new T) {} union { IData* base; T* derived; }; }; HogeやMainもポインタや参照経由で多態性を持たせるなら もっと面倒臭くなるし下手すりゃVC6ではコンパイルできなくなるかも
188 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 22:27:21 ] MFCのランタイムクラス情報を使っていれば、 自動で派生クラスの内容も表示できたりするけど、 今回はそれは無しだろうしなあ。
189 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:38:07 ] 自分でautoexp.datを書くってのはどうだろう。
190 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:51:54 ] >>187 定義済みの変数を、unionで「こいつとも共用体ってことで」って後付けできないもんでしょうか >>188 MFCはなしですね…。携帯電話用なもので >>189 ぐぐってみましたがこれは面白そうですね。ちょっと調べてみます
191 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 00:38:43 ] autoexp.dat を使えばもしかしたらいけそう…。 と思うのですが、ポインタの型変換の書き方がわかりませんね… Hoge=b=<((HogeData*)p)->b> では認識してくれないようです。 どなたかautoexp.datについて分かるかたいらっしゃいませんでしょうか もしくは詳しいページor書籍などを紹介していただけると嬉しいです
192 名前:デフォルトの名無しさん [2007/09/28(金) 15:45:55 ] Visual Studio 2005 Standard Edition を購入しようとしています。 今2003版を持っているので、アップグレード版を買えばいいとは思うのですが、 2003のユーザー登録がしていなといけないとか、 同じパソコンにインストールしないといけないとか、 アップグレード版にはそういった制約があるのでしょうか? 教えて下さいませ
193 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 16:59:04 ] ない
194 名前:192 mailto:sage [2007/09/28(金) 17:14:14 ] >>193 ありがとうございます。 もし2003を持っていなくても、普通に動くという事?
195 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 22:34:58 ] インストール時に2003のディスクチェックくらいあるだろう
196 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 23:36:41 ] ディスクチェックもなければアクチもねえぞ
197 名前:デフォルトの名無しさん [2007/09/29(土) 00:46:19 ] #include "gameframe.h" void GameFrame::doMainLoop(){ ChangeWindowMode(TRUE); if(DxLib_Init()==-1) return; SetDrawScreen(DX_SCREEN_BACK); while(ProcessMessage()==0&& CheckHitKey(KEY_INPUT_ESCAPE)==0){ ClsDrawScreen(); ScreenFlip(); } DxLib_End(); とソースコードをコンパイルしようとしたら・・・ こんなエラーが出てきましたどうしたらいいでしょう?? ↓↓ エラー E2090 型限定子 'GameFrame' がクラス名または名前空間名ではない エラー E2040 宣言が正しく終了していない
198 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 01:32:11 ] エラーコードについて msdn で調べてみるか google 先生に聞いてみると良いよ。
199 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 05:28:42 ] 教えるだけ無駄そうだな C++勉強したことある?
200 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 07:24:53 ] 今までVBばっかり使ってたのですが、 最近Visual C++に興味があります 何から始めたらいいでしょうか?
201 名前:200 mailto:sage [2007/09/29(土) 07:27:18 ] 書き忘れました VS2005です
202 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 08:58:17 ] C++やったことがないとVisual C++は無理
203 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 09:00:16 ] ?
204 名前:200 mailto:sage [2007/09/29(土) 09:06:42 ] そうですか(><; どうも
205 名前:デフォルトの名無しさん [2007/09/29(土) 17:57:30 ] coutってなんて読むのでしょうか?
206 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 18:02:27 ] シーアウトかな
207 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 18:43:27 ] コウティー
208 名前:デフォルトの名無しさん [2007/09/29(土) 19:37:55 ] >>207 無知乙wwwwwwww
209 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 20:33:05 ] コンソールアウト
210 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 22:47:53 ] コウト
211 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 23:07:02 ] の中では
212 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 23:07:44 ] 兵器
213 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 06:32:20 ] な
214 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 08:06:32 ] const int const_cout_count = 0;
215 名前:デフォルトの名無しさん [2007/09/30(日) 08:31:56 ] 昔のVCのプロジェクトをビルドしようとしているんですが、 そのプロジェクトではnasmというコマンドを使ってアセンブラファイルをアセンブルしようとしていました。 そしてVC6ではnasmは見つからないらしく、コマンドが見つかりません、ってエラーになります。 nasmはVC6ではなくなってしまったのでしょうか?代替のアセンブラはありますか?
216 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 08:38:30 ] 昔のVCにnasmついてたっけ? 自分で作ったプログラムかそれ?
217 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 08:45:18 ] プログラムはネットで拾ったものです。
218 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 08:51:23 ] ググれ。nasmならsourceforge.netで公開されている。
219 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 09:00:04 ] ありがとうございます。ググッて来ます
220 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 09:04:16 ] おかげさまで今アセンブルできました!! ありがとうございましたm(_ _)m
221 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 13:12:49 ] nasmはintel表記に従っているから好き。 gasは独自表記に拘っているから嫌い。
222 名前:デフォルトの名無しさん [2007/09/30(日) 22:17:09 ] リソースファイルで設定した製品バージョン VALUE "ProductVersion", "0, 0, 0, 1" をプログラム中から取得するにはどうすればよいのでしょうか?
223 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 22:58:03 ] >>222 GetFileVersionInfo + VerQueryValue
224 名前:デフォルトの名無しさん [2007/10/01(月) 06:18:06 ] なるほど、一旦できた実行ファイルから取得するしかないんですね。 もっと静的にコンパイル時に取得できる物だと思っていました。
225 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 08:11:55 ] exeはコンパイルし直さない限り変らないから静的な情報だろ
226 名前:デフォルトの名無しさん [2007/10/01(月) 08:16:41 ] >>225 それはそうなんだけど、コンパイル時に決定できるなら よかったなぁ、と思って。マクロの中で使いたいから。
227 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 09:13:26 ] Resource.hあたりに、"0, 0, 0, 1"を適当にdefineして、 .rcと使いたいマクロ中でそれ使うようにすればいいだろ!!! とか、言ってみる。
228 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 12:27:52 ] >>226 リソースはコンパイル時に確定していない情報なんだから当然、無理。 # リソースが確定するのはリンク時。
229 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 12:31:17 ] >>226 マクロの中で使う場合でも定数である必要はないんじゃないの? 取得用関数を1つ別に作って、マクロの中でその関数使えばすむ話だと思うけど
230 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 16:08:06 ] >>222 tgws.fromc.jp/prog/versioninfo/
231 名前:デフォルトの名無しさん [2007/10/01(月) 21:48:11 ] Win2k3 x64上で64ビットEXEから 32ビットのみ対応DLLを使いたいと思っております。 しかし、MSDNを見ると、上記は不可能であると知りました。 32ビットのみ対応DLLを64ビット対応にする、という方法以外で、 64ビットEXEから32ビットdllを使用できる方法、プロセス構成として 何が考えられますでしょうか? なるべくパフォーマンスが落ちないような実装として何がありますでしょうか? 加えて、最も簡単な方法もありましたら教えていただきたいです。
232 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 21:54:53 ] 32ビットDLLを呼ぶEXEを作って、それと64ビットEXEとでプロセス通信したらどうか。 COMで32ビットアウトプロセスサーバ作ってもいいだろうし。 いずれにせよ32ビットEXEを介すことに変わりはないが。
233 名前:231 [2007/10/01(月) 21:58:02 ] >232 ありがとうございます。 プロセス通信というと、Socket通信とかでしょうか? メモリを共有することはできないんですよね。 もしできたとしてもコーディングが難しいのでしょうかね・・・?
234 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 22:09:33 ] ソケットもそうだし、ウィンドウメッセージ、メモリマップドファイル、パイプ、メールスロット、その他色々ある。 用途に合わせて好きなの選べ。
235 名前:231 mailto:sage [2007/10/01(月) 22:17:54 ] >>234 ありがとうございます。やはりプロセス間通信しかないですか・・・ dllには大きなデータを一度に渡すのですが、その場合に最も効率いいものはあるのでしょうか?ここからは自分で調べないといけないのかもですね。
236 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 22:36:27 ] Win32 and COM Development - Development Guides - 64-bit Windows Programming - Running 32-bit Applications - Interprocess Communications 速度的には共有メモリだろうけど、一時ファイルを介するのも一つの手かもな。
237 名前:デフォルトの名無しさん [2007/10/02(火) 12:24:13 ] 始めまして、質問させていただきます。 Microsoft Visual C++ 6.0で人が作ったアプリケーション拡張開こうとしてるのですが 開き方が分かりません。誰か教えてください。宜しくお願いします。
238 名前:それが誰かは知りませんが mailto:sage [2007/10/02(火) 12:26:09 ] 「人」に聞きなさい。
239 名前:デフォルトの名無しさん [2007/10/02(火) 12:33:56 ] 落ちてたものなので、人に聞くことも出来ないので、ここに聞くことに したのですが、誰か教えてもらえませんか?宜しくお願いします。
240 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 13:50:34 ] アプリケーション拡張ってDLLのこと? 開くって何したいの?
241 名前:デフォルトの名無しさん [2007/10/02(火) 14:03:24 ] >>240 開き方わかります?知ってたら教えてください
242 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 14:37:17 ] VC++ 2005 Express Editionで質問です。 VC++のヘルプをMSDN Express Libraryからmsdn2007年6月版に変更したいのですが msdnから落として完全インストールでデフォルトのC:\Program Files\MSDNに入れました。 VC++でヘルプを開くとき新しく入れた2007年6月版が開くように設定するにはどうしたらいいですか?
243 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 15:45:10 ] >>241 釣り? DLLは「開く」ものじゃないぞ?
244 名前:デフォルトの名無しさん [2007/10/02(火) 16:04:13 ] そのまま VC++ に取り込んで改造できると思ってんのか 笑っちゃう
245 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 16:40:05 ] >240に対して>241の応答は酷すぎる。「言葉が通じない」の実例だ。
246 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 16:54:43 ] >>241 DLLを開きたいならCreateFileを使え
247 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 16:59:14 ] 話をかき混ぜるようなこと書くなw
248 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 17:09:18 ] 落ちてたものなのに「人」が作ったとなんで判ったんだろう。
249 名前:デフォルトの名無しさん [2007/10/02(火) 17:24:52 ] 人に聞けないってここの住人は…(以下略)
250 名前:デフォルトの名無しさん [2007/10/02(火) 17:29:51 ] >>244 なんだ改造できないのか、残念
251 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 18:03:06 ] >>248 人が作ったのでなければ何だね。 自動コーディングスクリプトかね。 まさか神が造ったなどと言うつもりではあるまい。
252 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 18:27:12 ] 落としたつもりは無いんだけど
253 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 00:14:18 ] 何このカオス
254 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 21:02:00 ] ttp://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/ で、プログラムフォルダ以下のファイルを編集するときに、変更を保存できないんですが どうすればいいのでしょうか?
255 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 21:31:17 ] そこらへんのディレクトリ・ファイルは、管理者権限持ったユーザにしか 書き込み系のアクセス権限がないはず。 管理者権限持って出直してこい。
256 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 22:19:29 ] 管理者権限持っているんだが、どうもおかしいな
257 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 22:23:16 ] でもね、昨日の「-1」は、まじでわかっていた 信じて
258 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 22:56:29 ] Vista+UAC
259 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 15:54:21 ] すみません VC6.0 初心者です。 ATLでNTサービスプログラムを作っています。 デバッグ用にメッセージボックスが出せると便利なのになぁと 思うんですけど、MessageBoxを使うと「ボン」と音がするだけで、 見えるところに出てきません。 (処理はそこで止まるので、出てはいるようです) やむなく LogEvent 関数でログを吐き、 イベントビューアで見てますが、NTサービスでは メッセージボックスを出せないものなんでしょうか?