[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 12/26 23:49 / Filesize : 222 KB / Number-of Response : 898
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

★初心者にVisual C++を教えるスレ★ Part29



1 名前:Part28の1000 mailto:sage [2008/02/15(金) 01:45:56 ]
Visual C++入門者・初心者からの質問を、
お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう。
・できるだけ具体的に。

質問の仕方については次のページが大変参考になります。
www.hyuki.com/writing/techask.html
myu.daa.jp/osiete/

■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
 (MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。

過去スレ、関連スレなどは>>2-5辺り。

415 名前:408 mailto:sage [2008/03/18(火) 19:59:06 ]
分かりました。ありがとうございました

416 名前:デフォルトの名無しさん [2008/03/18(火) 21:47:42 ]
VC++2008でC++の勉強を始めたものです。新規プロジェクトでコンソールアプリを選択して
新規プロジェクトを作成し、そこに既存のCPPファイルとかヘッダとかを追加したのですが、
ヘッダがコンパイラに認識されておらず、コンパイル時にヘッダがないというメッセージが
でてコンパイルできません。どうすればよいですか?
どうかよろしくお願いします。

417 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 23:06:01 ]
ヘッダーがないなら
ヘッダーを用意しなきゃだめじゃない。

418 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 23:15:08 ]
>>416
全部がファイルシステム上で同じフォルダにあるか?
違うフォルダにあるなら、同一のフォルダにまとめてから追加しろ。


419 名前:デフォルトの名無しさん [2008/03/19(水) 00:43:20 ]
今windowsにログインしているユーザーに
管理者権限があるかどうかを判別する関数があれば教えてください。

420 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 00:51:44 ]
Administratorsグループに属しているかってこと?

421 名前:デフォルトの名無しさん [2008/03/19(水) 01:43:08 ]
すいません、今インストールするなら
Visual C++ 2008 再頒布可能パッケージ (x86)
だけでいいでしょうか?

Visual C++ 2005 再頒布可能パッケージ (x86)
も入れておいた方がいいですか?

422 名前:デフォルトの名無しさん [2008/03/19(水) 04:46:11 ]
最近VisualC++2005ExpressEditionをインストールして
簡単なHelloWorldプログラムを書いてビルドしようとしたのですが
エラーが出て先に進めなくなってしまいました。
OSはWindows2000。win32/コンソールアプリケーション/空のプロジェクト、で書いてます。

エラーの内容は以下です。↓
致命的なエラー C1902
プログラム データベース マネージャが一致していません。セットアップが正しく行われているか確認してください。

マニュアルによると対処方は以下です。↓
プログラム データベース ファイル (.pdb) は、
コンパイル時に検出されたものより DBI.dll のより新しいバージョンを使用して、作成されました。
最新バージョンの DBI.dll をシステムにインストールしてください。

しかしパソにはDBI.dllはインストールされておらず、どこから入手したものか見つかりません。

エラーの前に次の警告も出ていました。
警告 D9028 : 簡易リビルド時のエラーです、通常のビルドに戻します
マニュアルによると、
プロジェクトの .idb ファイルが破損しています。このファイルを削除して、リビルドしてください。

しかしそもそも.idbファイルが生成されていません。
プロジェクトのプロパティで簡易リビルドをオフにしたら出なくなりましたが、
要するに簡易リビルドできないということなので、どうも落ち着かないです。

もしわかる方いたらおしえてください。

423 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 06:10:26 ]
リビルド 最初から全部ビルドやりなおし
簡易リビルド 一部のファイルを除いてビルドやりなおし

一回リビルド通ったら次からは簡易リビルドで問題ないはず



424 名前:397 mailto:sage [2008/03/19(水) 08:05:03 ]
>>407
僕のプログラムでは、字句解析を行うLexクラスというクラスが
二つ必要です。二つのLexクラスを作って、別々の名前空間に入れました。

1つは、DIC::Lexクラスです。
もう1つは、CP::Lexクラスです。

これらのクラスのためのヘッダと実装のファイル名はともに
lex.hとlex.cppですから衝突しました。

僕はプリフィックスを付けて二つを区別しました。
(dlex.h, dlex.cpp) と (clex.h, clex.cpp)

これで不満はないのですが、プリフィックスを付けで衝突を避ける
代わりに、ファイルをフォルダで分類することによって衝突を避ける
という手もあるかな、と思ったのです。

425 名前:397 [2008/03/19(水) 08:06:51 ]
>>405さんのレスが非常に気になるのですが、僕が>>404で書いたことが
うまく伝わってないような気がするので、もう一度きちんと説明します。

僕のプロジェクトのフォルダ構造は次の通りです。

<CoolCorpus> プロジェクトのフォルダ
├<Release>
├<Debug>
├<souce>
├<data>
└<test>

上記のCoolCorpus\souceにすべてのソースファイル(26個の.hファイルと
36個の.cppファイル)をフォルダ分けせずに置いています。

62個のファイルは全てCoolCorpusプロジェクトに参加しています。
従って、ワークスペースウィンドウの "FileView" タブのツリーには62個の
ファイルが表示されています。

"FileView"タブのツリーは、フォルダを作って自由にカスタマイズできます。
そこで、僕はデフォルトで作成される3つのフォルダ

Source Files, Header Files, Resource Files

を削除してしまいました。そして以下のようにツリーを構成
しました。(ファイル数が多いので簡略化しました。)

426 名前:397 [2008/03/19(水) 08:07:21 ]
<CoolCorpus ファイル>
├ <下請け>
│ ├<StdAfx>
│ │ ├StdAfx.cpp
│ │ └StdAfx.h
│ └<File>
│   ├file.cpp
│   └file.h
├ <Core>
│ ├<Dictionary>
│ │ ├<Lex>
│ │ │ ├dlex.cpp
│ │ │ └dlex.h
│ │ ├<Freq>
│ │ │ ├freq.cpp
│ │ │ └freq.h
│ │ ├dictionary.cpp
│ │ └dictionary.h
│ └<Corpus>
│   ├<Lex>
│   │ ├clex.cpp
│   │ └clex.h
│   ├corpus.h
│   ├corpus1.cpp
│   ├corpus2.cpp
└ main.cpp

427 名前:397 [2008/03/19(水) 08:08:08 ]
1つのクラス用に hと.cppを作り、それらをセットにして一つのフォルダに
入れています。フォルダといっても、FileViewのフォルダです。
本当のフォルダ(Windowsのフォルダ)ではありません(念のため)。

ソースを読むときは、このツリーをクリックしてソースを表示させます。
"ClassView"タブは全く使いません。

さて、この方法は変でしょうか?
開発現場での方法が知りたいのですが。。。

428 名前:デフォルトの名無しさん [2008/03/19(水) 09:12:13 ]
以下のプログラムから出力される数字を、
wavファイルにするにはどうすればいいでしょうか・・

#include <iostream>
#include <math.h>
using namespace std;
const int rate=44100;

int p(double q, int f, int t)
{
const double pi=3.1415;
double x;
x=sin(2*pi*f/rate*q);
cout << int(x*127+128+0.4999);
cout << "\n";
if (f<t) p(q,f+1,t);
return 0;
}

int main(void)
{
p(440.0 , 0, rate);
return 0;
}

429 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 10:00:38 ]
WAVファイルのヘッダを知りたいのか
ファイルへのバイナリ出力が知りたいのか
まあ両方書いてもいいけど、それあっという間にスタック食いつぶさないか?
普通にループでいいべ。

430 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 10:14:09 ]
>427
オープンソースで開発してるのがいっぱいあるから好きなだけ見ればいい

431 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 10:36:46 ]
>>429
すみません、両方です。

432 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 10:45:18 ]
ProgramingWindowsにsinwaveとかいうサンプルあったと思う

433 名前:デフォルトの名無しさん [2008/03/19(水) 14:17:11 ]
Visual C++ 2005の超初心者ですが、今、誰か教えてくれる人いらっしゃいますか?
ちなみにC言語では簡単なプログラムをいくつか作ったことありますが、VCは初めてです。



434 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 14:19:27 ]
何?

435 名前:デフォルトの名無しさん [2008/03/19(水) 14:22:26 ]
MFCアプリのダイアログベースでボタンを用意し、そのボタンを押したらRS232で通信するプログラムを作りたいです。
www.geocities.jp/terukat/_geo_contents_/win/comm.html

これを参考に作成したつもりですが、全くの初心者なので、これをどう使っていいのかがわかりません。
一応、それぞれをinit, write, readとして関数にし、ボタンクリック動作の関数で呼び出そうとしたんですができません。
クラスの概念なんかをもっと理解しなければいけないと思うのですが、時間もないので教えて頂ければ幸いです。

よろしくお願いします。

436 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 14:25:36 ]
>>427
はっきりいいますがアナタは頭がおかしいです
同一のプロジェクトに参加しているのならば別のファイル名にするべきです

437 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 14:28:00 ]
まずはファイルを読み書きするプログラムから勉強すれば?
あとは通信でも同じようなもんだ

438 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 14:30:28 ]
>>435
分不相応な事はしない事です。
まったくの初心者であればまずは理解からはじめましょう

439 名前:デフォルトの名無しさん [2008/03/19(水) 14:40:12 ]
>>437さん
アドバイスありがとうございます。
ファイル読み書きやってみます。

ちなみに私のやってることって考え方間違ってますか?
init関数にして呼び出したりって。
Cでのイメージが抜けないのですが、、、

440 名前:デフォルトの名無しさん [2008/03/19(水) 14:42:51 ]
>>436さん
全くその通りです。ほんとはもっと時間をかけてやるべきですが、仕事で時間が限られているので相談させてもらいました。。。


441 名前:440 [2008/03/19(水) 14:43:43 ]
間違えました。>>438さんです。

442 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 14:44:34 ]
そういうサンプルなら探せばあると思う

443 名前:デフォルトの名無しさん [2008/03/19(水) 14:56:32 ]
VC++ 2005ProでPCの情報を取得する→CSVで指定したフォルダに吐き出す
というプログラムをあと三日で作成しなければなりません。
慣れた方なら1日で出来るみたいに言われたのですけど、
VBしかやったことなくてプロジェクト作成からさっぱりです。
本当はちゃんとC++の勉強をしてから取り組んだ方がいいのでしょうが
時間がないので無理なんです。
誰か手取り足取り教えてくれませんか?
ちなみに取得する情報は
PC基本情報
ハードウェア基本情報
ユーザー情報
ネットワーク情報
論理ドライブ情報
物理ドライブ情報
プリンタ情報
インストールされている全アプリケーション情報
です。
お願いします。。。







444 名前:デフォルトの名無しさん [2008/03/19(水) 14:57:56 ]
>>432
その本(サイトじゃないですよね)って、5版>4版>3・・・
って考えていいんですか。

445 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 15:26:52 ]
>444
最初に出てくるサンプルは単に正弦波を描画するやつで
音を鳴らす用に改造したサンプルはあとの方に出てくる

サウンド関係のサンプル
AddSynth
BachTocc
Drum
KBMidi
Record1
Record2
Record3
SineWave
TestMci
WakeUp

446 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 15:28:56 ]
上下卷必要?

447 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 16:23:44 ]
>>443
仮にWMIで取得できる情報だけだったら、
VBScriptやVB6系でやるのが簡単だと思う。

あと、手取り足取り教えるほどのお人好しはここにはいないと思うぞ。

448 名前:443 [2008/03/19(水) 16:28:58 ]
>>447
そうですか。。。
VB6のソースはあります。
これをVC++2005で作り直さなければならないのです。

449 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 17:02:14 ]
そういえばMSDNにシリアル通信のサンプルがあった

//---------------------------------------------------------------------------
//
// Module: tty.c
//
// Purpose:
// The sample application demonstrates the usage of the COMM
// API. It implements the new COMM API of Windows 3.1.
//
// NOTE: no escape sequences are translated, only
// the necessary control codes (LF, CR, BS, etc.)
//
// Description of functions:
// Descriptions are contained in the function headers.
//
//---------------------------------------------------------------------------
//
// Written by Microsoft Product Support Services, Windows Developer Support.
//
//---------------------------------------------------------------------------


450 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 17:04:51 ]
シリアルは慣れてないとハマるから、mscomm.ocx使ったほうが楽かも

451 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 17:40:12 ]
>>397
職業プログラマだけど、自分はそうやってるし、他の人もそうやってる。
一般的かどうかまでわからないが、合理的な方法と思う。

実際のディレクトリ構成は、ファイル数が多くなったら機能ごとに分けてる。
その方が管理しやすいから。

ファイル名はプリフィックスをつけて一意にする。
ディレクトリが別になってても、単体で見たときに区別できないから。

452 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 18:08:53 ]
下記のソースでVC++6.0では問題なかったのですが
VC++.net 2003で実行すると
HRESULT hr = com_object_type::CreateInstance(&sink_);
のところでアプリ(IE)が落ちてしまいます。
6.0と2003ではATL関連が結構変わってしまったようなのですが
これはソースを直すべきなのでしょうか?
あるいはプロジェクトのプロパティなどで対処できるものでしょうか?
もしご存知の方いたら教えてくださいませ。よろしくお願いします。


////ecom_event_sink : シンクラッパー
template<class Event>
class com_event_sink {
typedef CComObject<Event> com_object_type;
com_object_type* sink_;
CComPtr<IUnknown> unk_;
public:
HRESULT create() {
HRESULT hr = com_object_type::CreateInstance(&sink_);
if ( SUCCEEDED(hr) )
sink_->QueryInterface(IID_IUnknown,(void**)&unk_);
return hr;
}
com_object_type* operator->() {
return sink_;
}
};


453 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 18:29:00 ]
>>452
CoInitialize()はちゃんとやってる?



454 名前:397 mailto:sage [2008/03/19(水) 20:53:43 ]
>>430
なるほと。調べてみます。お勧めのがあったら教えてください。

>>436
やっぱりそうですか。

>>451
丁寧にありがとうございます。不安が解消されました。

今後、次のようにしようかと思っています(今のところ)。

(1) (今まで通り)すべてのファイルのファイル名が一意になるようにする。
(2) ファイルを機能別にフォルダ分けする。
  (FileViewでの分類とは別の観点で分類する)

455 名前:451 mailto:sage [2008/03/19(水) 21:29:52 ]
>>454
>(2) ファイルを機能別にフォルダ分けする。
>  (FileViewでの分類とは別の観点で分類する)

FileViewと同じにした方が楽だと思うけど。

ちなみに今のプロジェクトでは主にnamespaceにあわせてる。フォルダ階層も。
比較的管理しやすい。

456 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 23:35:16 ]
OPENFILENAME でファイルを読み込む場合に最初にパスを指定しないと
プログラムを再起動しても最後に開いたパスがカレントディレクトリ
になってますが、これは何処にパスが記憶されてるのでしょうか?


457 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 23:39:56 ]
ゲーム作るとしたら

普通はbeginthreadexとかでループさせるもんですか?
それともpeekmesseageとかでループさせますか?

ゲーム内のオブジェクトとかどうやって管理しますか?
クラスをvectorに叩き込んで適当に追加したり削除したりでいいんですか?

ネタじゃないです
マジレスお願いします

458 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 23:41:45 ]
ゲーム製作板がある

459 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 01:50:42 ]
複数のファイル(cpp)を作ると
クラスとかの変更があるたびに
いちいちexternのほうも修正しなくてはならなくてめんどくさいんですが
そこらへんを自動でやってくれる機能はないですか?

460 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 01:51:52 ]
全部ヘッダに書けば。

461 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 01:51:53 ]
2008にMFCはないんですか?

462 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 08:27:22 ]
>>457
もうちょっと具体的でないと答えづらいが、beginthreadexでループというのは普通じゃないと思う。

>>459
C++でexternは使わないことが多い。

463 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 10:50:29 ]
>>461
Standard以上に付いている。



464 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 12:21:59 ]
>>457
ネタじゃないなら、beginthreadex について調べてからこい。

どんなプログラムかわからんので beginthreadexe をループで
と言うのがおかしいかどうかはわからんけど、peekmessage と
同列にしてるのは明らかにおかしいと思う。

465 名前:462 mailto:sage [2008/03/20(木) 12:32:49 ]
>>464
うん。そういう意味で書いた。メッセージにつき1スレッドで処理するってことかな。
使ったことないけどユーザーインタフェーススレッドがそんな感じなのかな。

466 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 18:01:37 ]
>>463
もしかしてMFCはいらない子ですか?

467 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 19:10:59 ]
貧乏人にはいらない

468 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 19:14:23 ]
Expressは試供品だろ

469 名前:デフォルトの名無しさん [2008/03/20(木) 21:32:54 ]
>>454
まさかと思うが、1クラス1ファイルなんて妄執に囚われていないだろうな。

470 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:06:12 ]
>>469
いやそれは基本だろ…

471 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:12:14 ]
>>457
普通にメインスレッドにゲーム用ループ作って
そのループの中にメッセージループを処理する関数つくって入れてた
ただ、メインスレッドでやると、メニューポップアップ時とかにメッセージループで
処理がとまるから
ユーザー操作に関係ないリアルタイム系のゲームを作っている場合などは
気をつけないとはまるかも

472 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:13:21 ]
>>457
つまり、peekmessage方式ね

473 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:19:15 ]
>>464
別に>>457はおかしいことは言ってないよ
win32プログラムの場合、一般的にはメッセージをgetmessageによるループで処理させるけど
ゲームみたいな場合にはメッセージ処理をループではなく局所的に処理させたい場合がある
メッセージがない時抜けるためにpeekmessageでメッセージの有無確認を行うというのは良くやる手法



474 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:25:24 ]
間違えた
peekmessage使うとメニューポップアップとかではとまらないかも
VBのDoEventsはとまったような気がしたが

475 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:29:40 ]
ゲーム関係はゲーム板のやつが詳しいだろ

476 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:34:38 ]
ためしにpeekmessageを使ってメニューポップアップしてみたらやっぱり止まるね
ということで、>>474は無しでw

477 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:40:02 ]
>>475
確かにw
俺もWindowsゲーム作ってたのって
もう8年も前だからすっかり忘れてるわ

478 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 23:19:31 ]
>>473
peekmessage に突っ込んでる奴なんていないから、

> 普通はbeginthreadexとかでループさせるもんですか?

についての君の意見を聞かせてくれ。


479 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:28:42 ]
478みたいな
俺のほうが正しいと認めるまで論議をやめない
みたいな奴がいるとウザイ


480 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:56:00 ]
ヘッダってなんで自動で書いてくれないわけ?
全部読み込んでから使わないヘッダを削除して軽くすればいいじゃん


481 名前:473 mailto:sage [2008/03/21(金) 01:25:33 ]
>>478
457 の言ってるのは、ゲームループの為に、新しいスレッドを作るか
メインスレッドでループさせるのとどっちが良いかという意味でしょ
で、beginthreadexについて俺は何を意見すればよいんだ?

482 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 01:39:13 ]
>>480
何が言いたいのかよくわからんがヘッダに何を書くかは自由だぞ?
書くのが面倒ならヘッダなんて作らなきゃいいじゃないか。

483 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 01:50:33 ]
まず標準関数がなんのヘッダ使ってるか調べるのがだるい
使わなくなったら他に使ってないか全コード調べて使ってなかったらゴミだからヘッダ消すのもだるすぎる




484 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 02:21:33 ]
めんどくせぇならすべてをincludeしたヘッダでも作れば?
include消すのならincludeをコメントアウトしてコンパイルエラーでなけりゃOKとかでいいんじゃね?
ってか余分なヘッダーをincludeしたからといって実害は無いと思うぞ?

485 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 03:01:52 ]
ほんとだ!なんでいっぱいインクルードしてもプログラムサイズ増えないんだ??

486 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 03:39:45 ]
コンパイラは賢いから。
宣言と定義の違い。実態がないもの(宣言)はいくらあったところでプログラムサイズは変わらない。

487 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 07:30:02 ]
>>481

>457 の言ってるのは、ゲームループの為に、新しいスレッドを作るか
ゲームだとこういうやり方は普通なの?
メインスレッドでメッセージループして、重い処理を別スレッドにするのが普通と思うんだけどな。

あと457がこういう意図なのかどうかは不明。自分は457からはそう読み取れない。
464のように解釈した。

488 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 10:04:35 ]
>>485
増えるのはコンパイル時間だけ。
ヘッダの中で変数定義しているのでもない限りプログラムの大きさは増えない。

489 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 10:39:27 ]
>>487
普通かどうかについてはわからない 
少なくとも、俺が勤めていたゲーム会社のゲームライブラリはゲームループを
メインスレッドに組み込んでいた(ADVだからそれでぜんぜん問題なかった
ただ、>>471で書いたようにメニューポップアップが発生するとイベントループ関数から
戻ってこないような状況もあるから、サブスレッドによるゲームループもありだと思うよ

俺の場合は逆で
beginthreadexとpeekmessageを対比しているのでゲームループ処理を行う場所を
メインスレッドかサブスレッドどっちすればよいか?と質問していると判断したんだけどね

490 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 12:25:44 ]
ありがとうございます。全ヘッダを書いたヘッダを作ってそれを使うことにしました。

491 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 20:18:35 ]
>>489
サブスレッドでメッセージループする場合、メインスレッドはサブスレッドからの通知を待つの?
どうもこの方法の意義が分からないな。

繰り返しになるが、メインスレッドでメッセージループして、時間がかかる処理だけ別スレッドに
すればいいしそれが普通と思う。
あとメニューポップアップの表示ではループは止まらんと思う。表示してすぐ次のメッセージを処理すると思う。
止まるのはモーダルダイアログ出す場合とか。

あと質問を489のような解釈をするには「普通はbeginthreadexで作った別スレッドででループさせるもんですか?
それともメインスレッドででループさせますか?」じゃなきゃ変だと思う。

492 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 20:51:01 ]
>止まるのはモーダルダイアログ出す場合とか。

ごめん。間違えた。これもメッセージは止まらんわ。処理時間の長い処理を入れなければ。


493 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 22:19:29 ]
>>479
だったら、スルーしとけばいいのに。



494 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 23:05:37 ]
>>493
見なければいいのに
ヌルーすればいいのに
書き込まなければいいのに
なんて言うだけ無駄です


495 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 00:46:04 ]
確かに無駄だったな。(w

496 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 12:05:43 ]
VisualStadioをインストールしたのですが、なぜかコンパイルができません。
ちなみに作ったテキストを.cに変換してCソースファイルになるはずなのですが、それも行われません。
しかし、ビルドは行うことが出来ます。
コンパイルの操作を行おうとする時に「拡張子に関連したコンパイルツールがありません」となります。
これは私なりに考えてCソースファイルになってないからだと考えます。
しかし、その根本的な原因がわかりません。
原因は何でしょうか?(長文失礼)

497 名前:デフォルトの名無しさん [2008/03/22(土) 13:09:51 ]
Vistaなんじゃねーの

498 名前:デフォルトの名無しさん [2008/03/22(土) 13:27:30 ]
単純に拡張子が表示されていないだけだと思われ。
Vista の Explorer でデフォルトがどういう表示なのかは知らん。

499 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 14:18:50 ]
> VisualStadio

釣りか、ネタか、バカだろ。

相手にしないように。

500 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 17:22:43 ]
>>499
初心者質問スレでその対応はないだろ

501 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 17:25:18 ]
お前が親切に相手してやれ

502 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 17:31:43 ]
>500
手本を示せ

503 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 19:22:16 ]
>>491
勘違いしているようだが、メッセージループはメインスレッドでやるんだよ
ゲームループと言ってるものは、ゲームを作る場合イベントドリブン方式を使わないで
ゲームの進行に関わる処理をループで行う
単純な例では、キー入力->ステート変化->画面表示->キー入力->....こんなループを組む
たとえば、キー入力をWM_KEYDOWNのメッセージハンドラーで受けないで
GetKeyboardStateとかを使ったりして今のキーの押下状態を取得する
どうしてそのようなことをするのかについてはゲーム作成などのHPでも見てもらいたい
メニューポップアップに関しては、そのpeekmessageを使ったルーチンを作って実際に試してみてね
質問の仕方が変だというのに関しては確かにそう思う、だけどここは初心者スレだから多少の意訳はしてあげても良いと思った

質問者がすでに消えたようなのでもうこの問題はこれで収めようとおもうんだけど



504 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 19:24:12 ]
とっくに終わってるのに1人で何やってんの?

505 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 19:43:05 ]
>>503
誤解されると良くないからちゃんと書いておくが
メッセージループは、beginthreadexによる別スレッドでゲームループを作る場合も、
peekmessageをつかったメインスレッド中にループを作る場合も、メインスレッドで行うと言う意味ね

このことは当たり前の前提で話していたつもりなんだが、>>465の書き込みを見ると
すでに認識の違いがそこにあったようなので一応書いておいた

506 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 19:45:15 ]
>>504
この板は、どの書き込みが>>491なのか判らないので
終わっているかどうかは判らんから一応ね

507 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 19:45:20 ]
また始まったか

508 名前:491 mailto:sage [2008/03/22(土) 20:20:46 ]
なるほど。ゲームループというのを知らなかったから話が噛み合わなかったわけだ。申し訳ない。
なんでGetMessageじゃなくてPeekMessageなんだろうと思ってたけど、そういうことね。

>505
指摘どおり、認識違いしていた。

ただポップアップメニューについてはやはり分からない。試したけど止まらなかった。
「メニューポップアップ」とはTrackPopupMenuを使ったポップアップメニューのことと思ってたんだけど、それが違う気がしてきた。
説明して欲しい。

ゲームループは以下とほぼ同じ。ウィンドウプロシージャのWM_RBUTTONUPでTrackPopupMenuをコールした。
www.geocities.co.jp/SiliconValley-Oakland/9582/GamePrg/prg03.htm

#質問者は去ったが、もうちょっと続けさせて欲しい。

509 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 21:10:00 ]
どっかよそでやってほしい
ゲーム製作板あたりで

510 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 00:57:12 ]
お聞きしたいのですが

ボタンがもっとも美しく見える大きさについて
横幅はフォントの高さに対して x分のy
高さはフォントの高さに対して z分のw

と言う推奨比率みたいなのを
その昔MS発行の何かの書籍で見た記憶があるのですが
どなたかご存じであり 且つ 教えていただけませんでしょうか…


511 名前:422 mailto:sage [2008/03/23(日) 09:02:43 ]
>>423
ありがとうございます。
初回のビルドでは警告がでて当然なんですね。
実際にも簡易リビルドの警告のあと、自動的に通常ビルドされていました。
通常のビルドでのエラーに絞ってなお調べてみようと思いますm(_ _)m

あれからすぐ書き込み規制に入ってしまい返事が遅くなりすみません。

512 名前:デフォルトの名無しさん [2008/03/23(日) 16:58:57 ]
何度でも蘇るよ!

513 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 14:12:56 ]
Win32APIとランタイムライブラリを使ったプログラムで、_beginthreadを使ったら
_beginthreadexを使えって怒られたんだけど、_beginthreadの問題点を調べても
なかなかわからない。

スレッドの終了コードや生成時の状態を指定する必要が無ければ_beginthreadでも
いいような気がするんだけど。

どんな問題点があるんですか?おすえてくらさい。



514 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 14:46:22 ]
スレッド起こしっぱなしで放置でいい用途なら_beginthreadで問題ないんじゃ。
WaitForSingleObjectとかするなら_beginthreadexを使うべし。

msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vclib/html/_crt__beginthread.2c_._beginthreadex.asp
>_beginthread よりも _beginthreadex を使用した方が安全です。_beginthread が作成したスレッドの終了が早すぎると、
>_beginthread の呼び出し元に返されるハンドルが無効となる可能性や、別のスレッドを指してしまう可能性があります。
>しかし、_beginthreadex から返されるハンドルは _beginthreadex の呼び出し元で閉じられる必要があるため、
>_beginthreadex がエラーを返さなかった場合にはハンドルが有効であることが保証されます。

515 名前:513 mailto:sage [2008/03/24(月) 22:05:57 ]
514>>
アリガd
やっぱハンドル使ったりしないなら_beginthreadで問題ないよね?

でも上司に反抗するのも建設的じゃないんで_beginthreadexに書き換えますたw






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<222KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef