★初心者にVisual C++ ..
369:デフォルトの名無しさん
08/03/15 01:40:35
>>366
普通は
class test{
public:
int i;
test(){ init(1); }
test(int i){ init(i) }
init(int i){ this->i = i;}
};
じゃねーか?
できるとしてもこっちだろ
でもできないような気がする
class test{
public:
int i;
test() : test(1){}
test(int i){ this->i = i;}
};
370:デフォルトの名無しさん
08/03/15 01:44:31
コンストラクタというものがわかってらっしゃらない
371:デフォルトの名無しさん
08/03/15 07:30:38
>>366 をやりたいだけなら、ディフォルト引数でいいんじゃね?
class test{
public:
int i;
test(int i = 0){ this->i = i; }
}
ディフォルト引数だと難しい (例えば、違う型の引数でオーバーロードしたいとか)
なら、>>369 のように共通部分をくくりだしたメンバ関数を作ればいいだけ。
372:デフォルトの名無しさん
08/03/15 09:07:55
ディフォルトwwww
373:デフォルトの名無しさん
08/03/15 09:24:06
別に「デ」でも「ディ」でもいいんでない?
URLリンク(cougar.eb.com)
374:デフォルトの名無しさん
08/03/15 09:39:06
ディスクトップパソコン
375:デフォルトの名無しさん
08/03/15 12:00:42
ハードデスクドライブ
376:デフォルトの名無しさん
08/03/15 13:14:45
ディスク、デスクの場合とは違うっしょ。
URLリンク(cougar.eb.com)
URLリンク(cougar.eb.com)
377:デフォルトの名無しさん
08/03/15 13:36:59
disk [di'sk]
default [difo':lt]
アクセント位置の違いなのかな
378:デフォルトの名無しさん
08/03/15 14:55:27
デホルト
379:デフォルトの名無しさん
08/03/15 16:19:21
Visual Studio 2005 Standard と Visual C++ 2008 Express Edition
を使っています。時々 EUC で書かれたファイルを受け取って開いて
しまい、文字化けしてしまうのですが、ファイルを開くにあたって
想定する文字コードを指定して読み込ませることは可能でしょうか?
UTF-8 と ShiftJIS に関してはどうやら判別してくれるようですし、
保存する際の文字コードにいたってはわざわざ EUC-JP で保存する
こともできるようなのですが、読み込みの際には UTF-8 か ShiftJIS
かどちらか程度しか判別してくれないようです。
せめて「俺はこのファイルを開くときに文字コード○○のつもりで
開いたぜ」ってことがステータスバーに表示されるといいのですが。
マルチバイト文字を含んだソースコードとして
UTF-8, UTF-16LE, Shift-JIS, EUC-JP のものを受け取る可能性が
あるので、できれば Visual Studio のエディタで開く
文字コードに関してどんな判定がされているのかを知りたいです。
380:デフォルトの名無しさん
08/03/15 17:23:07
他のエディタか変換ツール使えばいいだけ
381:デフォルトの名無しさん
08/03/15 18:38:43
PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
// 描画処理
DrawMain();
}
}
// Direct3D オブジェクトを解放
RELEASE(lpD3DDEV);
RELEASE(lpD3D);
// 終了する
return 0;
}
382:デフォルトの名無しさん
08/03/15 18:43:16
DestroyWindowでアプリを終了させたいのですが、ウインドウは消えるのですが、
プロセスが残ってCUPがんがん回ってるのですが、全部きれいに消すにはどうすればいいですか?
LRESULT CALLBACK procMainaa(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch (msg)
{
case WM_CLOSE:
MessageBox(NULL,"WM_CLOSE","test",MB_OK);
DestroyWindow(hWnd);
return 0;
case WM_DESTROY:
MessageBox(NULL,"WM_DESTROY","test",MB_OK);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}
383:デフォルトの名無しさん
08/03/15 18:51:41
さあ?
384:デフォルトの名無しさん
08/03/15 18:56:28
> 全部きれいに消すにはどうすればいいですか
ブレークポイント等を活用しながらトレースし、
問題箇所を探っていこう。
385:デフォルトの名無しさん
08/03/15 21:04:38
TranslateMessageの前に、
if( msg.message == WM_QUIT ) break;
でも入れたら?
386:デフォルトの名無しさん
08/03/15 21:46:59
DestroyWindowにこだわるのは何で?
PostQuit・・・じゃダメなの?
387:デフォルトの名無しさん
08/03/15 22:19:54
DestroyWindowは呼んでも呼ばなくてもいい
ただ自分で呼ばないときはDefWindowProcが代わりに呼ぶように作る
だからどっちみちDestroyWindowは呼ばれる
388:デフォルトの名無しさん
08/03/16 02:23:27
Visual Studio 2008 Express Editions をインストールしたのですが
ファイル > 新規作成 > プロジェクト > 「新しいプロジェクト」のダイアログで
プロジェクト名を入力してもOKボタンが有効になりません。
OSは、XP Home SP2です。
389:デフォルトの名無しさん
08/03/16 07:57:00
VC2008です。
L""でない""の文字列定数をANSI(SJIS)でなく、UTF-8にしたいのですが、どうすればいいですか。
ソースコードをUTF-8で保存しても、SJISにされるようです。
390:デフォルトの名無しさん
08/03/16 08:32:57
WideCharToMulltiByte
391:デフォルトの名無しさん
08/03/16 08:45:39
定数をUTF-8にしたいんですが…
実行時に変換するしか方法はないですか?
392:デフォルトの名無しさん
08/03/16 10:07:31
あとはファイルから読み込むとか、
"\xe4\xb8\xAD"のように地道に十六進拡張表記を書くくらいしかない。
393:デフォルトの名無しさん
08/03/16 10:27:27
Visual C++ では wchar_t の文字列は
UTF-16 なんですか?それとも UCS2 なんですか?
394:デフォルトの名無しさん
08/03/16 11:08:08
サロゲートペアを扱えたらUTF-16、そうでなければUCS-2。
それは冗談としても、最近のWindowsはUTF-16だから、
UTF-16として扱っておくのが吉。
395:デフォルトの名無しさん
08/03/16 16:47:44
Windowsの内部でUnicode使ってるからVCでUnicodeを使うようになっただけだから
あくまでWindowsのためのUnicodeなんだと考えておいた方がいい。
396:デフォルトの名無しさん
08/03/16 17:42:10
結局マルチバイトじゃん・・・
いや、マルチワードじゃん・・・
まぁ合成文字とかもあるから仕方ないか。
いっそのこと Mule の内部表現にしてしまへ!
397:デフォルトの名無しさん
08/03/18 01:45:20
VisualC++6.0を使って一人でプログラムを作っているのですが、
だんだんとソースファイルが増えてきて60個ぐらいになりました。
これらのファイルは1つのフォルダに入れているのですが、
ファイル名の衝突が気になり始めました。衝突を防ぐ方法として
次の二つの方法を思いつきました。
(1) ファイル名にサフィックスやプリフィックスを付けるなどして
名前が重複しないようにする。(今まで通り、1つのフォルダに全て
のソースファイルを入れる。)
(2) ファイルをフォルダに分けて管理。
ソフトウェア開発の現場では多数のソースファイルをどのように
管理していますか?アドバイスをお願いします。
398:デフォルトの名無しさん
08/03/18 01:51:54
>>397
ファイル名が衝突する=ファイル分割が間違っているorファイル命名が間違っている
とは思うけど、まぁよくあることだよな。
1も2も大差はないと思うけど見た感じ管理されてそうに見える2を選択するかな?
ただincludeパスを書くのが面倒かもしれないが・・・
399:デフォルトの名無しさん
08/03/18 01:56:41
>>398
>ファイル名が衝突する=ファイル分割が間違っている
>orファイル命名が間違っている
>とは思うけど、まぁよくあることだよな。
適切にファイル分割して正しく命名すれば、ファイルがいくら
増えても名前が衝突することはないのですか?
400:デフォルトの名無しさん
08/03/18 02:00:48
名前入れ忘れたけど399==397です。
401:デフォルトの名無しさん
08/03/18 02:01:45
>>399
システムの規模にもよると思うけど、俺のしょぼい経験じゃまず無いように思う。
きちんと命名し、役割が変わってしまった、役割を分割したときなんかに正しくリネームしてれば無さそうだけど・・・
402:397
08/03/18 02:22:48
>>401
とすると、開発の現場では1つのフォルダで全てのソースを管理する
のが一般的だということでしょうか? ちょっと意外です。
403:デフォルトの名無しさん
08/03/18 02:31:40
>>402
いやいやw>>397の2だよ。いちばん深い階層で4くらいかな?
ファイル数はヘッダー含めて100位だと思う。数えたことないけど・・・
1フォルダあたりファイルが20超えるくらいから考え始めて、50超えたらまずフォルダわけする。
というか、ファイルが増えたからフォルダわけっていうより役割の分割が自然とフォルダ単位になる。
404:397
08/03/18 02:57:59
>>403
やっぱりそうですか。ファイルの役割に着目してフォルダ分けする
のが自然ですよね。
僕の場合、Visual C++のFileViewのツリーで細かくフォルダ分けして
ファイルを分類しています。だから実際のファイルのフォルダ分けは
特に必要がないように感じていました。FileViewのツリーとWindowsの
フォルダのツリーを同じに保つのはめんどくさい(片方を変更したら
もう片方も変更しなければならない。)ので実際のファイルは分類せず
に1つのフォルダに放り込んでいました。
一人で開発していると、このような方法が一般的かどうかわからない
ので、アホなことをやってるんじゃないか、とか思うことが良くあります。
405:デフォルトの名無しさん
08/03/18 06:02:52
一般的ではないアホなことをやっている
普通はプロジェクトごとにフォルダわけするだろ
さらに別プロジェクトでも共有するライブラリなどのヘッダも
別フォルダにしてパスを通す
406:デフォルトの名無しさん
08/03/18 08:37:57
大量のソースがある巨大プロジェクトなのかと思ったけど
ファイル名の衝突とか言ってるから、今まで作ってきた全然関係ないプログラムが
1つのフォルダにごっちゃごちゃに存在してるということか?
407:デフォルトの名無しさん
08/03/18 12:33:31
>>397
参考までに衝突する(した)ファイル名を教えてほしい
一人で作っていて名前が衝突するって考えられんのだが
408:デフォルトの名無しさん
08/03/18 19:04:09
>>362みたいな感じでVisualC++起動時にエラーが出るんですけど、解決法は無いですか
409:デフォルトの名無しさん
08/03/18 19:06:35
新しいパソコン買う
410:デフォルトの名無しさん
08/03/18 19:08:29
>408
しつこい
411:408
08/03/18 19:21:38
初心者に教えるスレでそんな風に言われても…
412:デフォルトの名無しさん
08/03/18 19:29:36
いやだから新しいパソコン買えよ
てかまずPCスペックぐらい書けや
413:408
08/03/18 19:33:50
>>412
WindowsXP HomeEdition
Intel Celeron M processor 1.60G
メモリ 704M
414:デフォルトの名無しさん
08/03/18 19:53:55
OSから再インストール、それで駄目なら新しいパソコン買う
415:408
08/03/18 19:59:06
分かりました。ありがとうございました
416:デフォルトの名無しさん
08/03/18 21:47:42
VC++2008でC++の勉強を始めたものです。新規プロジェクトでコンソールアプリを選択して
新規プロジェクトを作成し、そこに既存のCPPファイルとかヘッダとかを追加したのですが、
ヘッダがコンパイラに認識されておらず、コンパイル時にヘッダがないというメッセージが
でてコンパイルできません。どうすればよいですか?
どうかよろしくお願いします。
417:デフォルトの名無しさん
08/03/18 23:06:01
ヘッダーがないなら
ヘッダーを用意しなきゃだめじゃない。
418:デフォルトの名無しさん
08/03/18 23:15:08
>>416
全部がファイルシステム上で同じフォルダにあるか?
違うフォルダにあるなら、同一のフォルダにまとめてから追加しろ。
419:デフォルトの名無しさん
08/03/19 00:43:20
今windowsにログインしているユーザーに
管理者権限があるかどうかを判別する関数があれば教えてください。
420:デフォルトの名無しさん
08/03/19 00:51:44
Administratorsグループに属しているかってこと?
421:デフォルトの名無しさん
08/03/19 01:43:08
すいません、今インストールするなら
Visual C++ 2008 再頒布可能パッケージ (x86)
だけでいいでしょうか?
Visual C++ 2005 再頒布可能パッケージ (x86)
も入れておいた方がいいですか?
422:デフォルトの名無しさん
08/03/19 04:46:11
最近VisualC++2005ExpressEditionをインストールして
簡単なHelloWorldプログラムを書いてビルドしようとしたのですが
エラーが出て先に進めなくなってしまいました。
OSはWindows2000。win32/コンソールアプリケーション/空のプロジェクト、で書いてます。
エラーの内容は以下です。↓
致命的なエラー C1902
プログラム データベース マネージャが一致していません。セットアップが正しく行われているか確認してください。
マニュアルによると対処方は以下です。↓
プログラム データベース ファイル (.pdb) は、
コンパイル時に検出されたものより DBI.dll のより新しいバージョンを使用して、作成されました。
最新バージョンの DBI.dll をシステムにインストールしてください。
しかしパソにはDBI.dllはインストールされておらず、どこから入手したものか見つかりません。
エラーの前に次の警告も出ていました。
警告 D9028 : 簡易リビルド時のエラーです、通常のビルドに戻します
マニュアルによると、
プロジェクトの .idb ファイルが破損しています。このファイルを削除して、リビルドしてください。
しかしそもそも.idbファイルが生成されていません。
プロジェクトのプロパティで簡易リビルドをオフにしたら出なくなりましたが、
要するに簡易リビルドできないということなので、どうも落ち着かないです。
もしわかる方いたらおしえてください。
423:デフォルトの名無しさん
08/03/19 06:10:26
リビルド 最初から全部ビルドやりなおし
簡易リビルド 一部のファイルを除いてビルドやりなおし
一回リビルド通ったら次からは簡易リビルドで問題ないはず
424:397
08/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
08/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
08/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
08/03/19 08:08:08
1つのクラス用に hと.cppを作り、それらをセットにして一つのフォルダに
入れています。フォルダといっても、FileViewのフォルダです。
本当のフォルダ(Windowsのフォルダ)ではありません(念のため)。
ソースを読むときは、このツリーをクリックしてソースを表示させます。
"ClassView"タブは全く使いません。
さて、この方法は変でしょうか?
開発現場での方法が知りたいのですが。。。
428:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/03/19 10:00:38
WAVファイルのヘッダを知りたいのか
ファイルへのバイナリ出力が知りたいのか
まあ両方書いてもいいけど、それあっという間にスタック食いつぶさないか?
普通にループでいいべ。
430:デフォルトの名無しさん
08/03/19 10:14:09
>427
オープンソースで開発してるのがいっぱいあるから好きなだけ見ればいい
431:デフォルトの名無しさん
08/03/19 10:36:46
>>429
すみません、両方です。
432:デフォルトの名無しさん
08/03/19 10:45:18
ProgramingWindowsにsinwaveとかいうサンプルあったと思う
433:デフォルトの名無しさん
08/03/19 14:17:11
Visual C++ 2005の超初心者ですが、今、誰か教えてくれる人いらっしゃいますか?
ちなみにC言語では簡単なプログラムをいくつか作ったことありますが、VCは初めてです。
434:デフォルトの名無しさん
08/03/19 14:19:27
何?
435:デフォルトの名無しさん
08/03/19 14:22:26
MFCアプリのダイアログベースでボタンを用意し、そのボタンを押したらRS232で通信するプログラムを作りたいです。
URLリンク(www.geocities.jp)
これを参考に作成したつもりですが、全くの初心者なので、これをどう使っていいのかがわかりません。
一応、それぞれをinit, write, readとして関数にし、ボタンクリック動作の関数で呼び出そうとしたんですができません。
クラスの概念なんかをもっと理解しなければいけないと思うのですが、時間もないので教えて頂ければ幸いです。
よろしくお願いします。
436:デフォルトの名無しさん
08/03/19 14:25:36
>>427
はっきりいいますがアナタは頭がおかしいです
同一のプロジェクトに参加しているのならば別のファイル名にするべきです
437:デフォルトの名無しさん
08/03/19 14:28:00
まずはファイルを読み書きするプログラムから勉強すれば?
あとは通信でも同じようなもんだ
438:デフォルトの名無しさん
08/03/19 14:30:28
>>435
分不相応な事はしない事です。
まったくの初心者であればまずは理解からはじめましょう
439:デフォルトの名無しさん
08/03/19 14:40:12
>>437さん
アドバイスありがとうございます。
ファイル読み書きやってみます。
ちなみに私のやってることって考え方間違ってますか?
init関数にして呼び出したりって。
Cでのイメージが抜けないのですが、、、
440:デフォルトの名無しさん
08/03/19 14:42:51
>>436さん
全くその通りです。ほんとはもっと時間をかけてやるべきですが、仕事で時間が限られているので相談させてもらいました。。。
441:440
08/03/19 14:43:43
間違えました。>>438さんです。
442:デフォルトの名無しさん
08/03/19 14:44:34
そういうサンプルなら探せばあると思う
443:デフォルトの名無しさん
08/03/19 14:56:32
VC++ 2005ProでPCの情報を取得する→CSVで指定したフォルダに吐き出す
というプログラムをあと三日で作成しなければなりません。
慣れた方なら1日で出来るみたいに言われたのですけど、
VBしかやったことなくてプロジェクト作成からさっぱりです。
本当はちゃんとC++の勉強をしてから取り組んだ方がいいのでしょうが
時間がないので無理なんです。
誰か手取り足取り教えてくれませんか?
ちなみに取得する情報は
PC基本情報
ハードウェア基本情報
ユーザー情報
ネットワーク情報
論理ドライブ情報
物理ドライブ情報
プリンタ情報
インストールされている全アプリケーション情報
です。
お願いします。。。
444:デフォルトの名無しさん
08/03/19 14:57:56
>>432
その本(サイトじゃないですよね)って、5版>4版>3・・・
って考えていいんですか。
445:デフォルトの名無しさん
08/03/19 15:26:52
>444
最初に出てくるサンプルは単に正弦波を描画するやつで
音を鳴らす用に改造したサンプルはあとの方に出てくる
サウンド関係のサンプル
AddSynth
BachTocc
Drum
KBMidi
Record1
Record2
Record3
SineWave
TestMci
WakeUp
446:デフォルトの名無しさん
08/03/19 15:28:56
上下卷必要?
447:デフォルトの名無しさん
08/03/19 16:23:44
>>443
仮にWMIで取得できる情報だけだったら、
VBScriptやVB6系でやるのが簡単だと思う。
あと、手取り足取り教えるほどのお人好しはここにはいないと思うぞ。
448:443
08/03/19 16:28:58
>>447
そうですか。。。
VB6のソースはあります。
これをVC++2005で作り直さなければならないのです。
449:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/03/19 17:04:51
シリアルは慣れてないとハマるから、mscomm.ocx使ったほうが楽かも
451:デフォルトの名無しさん
08/03/19 17:40:12
>>397
職業プログラマだけど、自分はそうやってるし、他の人もそうやってる。
一般的かどうかまでわからないが、合理的な方法と思う。
実際のディレクトリ構成は、ファイル数が多くなったら機能ごとに分けてる。
その方が管理しやすいから。
ファイル名はプリフィックスをつけて一意にする。
ディレクトリが別になってても、単体で見たときに区別できないから。
452:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/03/19 18:29:00
>>452
CoInitialize()はちゃんとやってる?
454:397
08/03/19 20:53:43
>>430
なるほと。調べてみます。お勧めのがあったら教えてください。
>>436
やっぱりそうですか。
>>451
丁寧にありがとうございます。不安が解消されました。
今後、次のようにしようかと思っています(今のところ)。
(1) (今まで通り)すべてのファイルのファイル名が一意になるようにする。
(2) ファイルを機能別にフォルダ分けする。
(FileViewでの分類とは別の観点で分類する)
455:451
08/03/19 21:29:52
>>454
>(2) ファイルを機能別にフォルダ分けする。
> (FileViewでの分類とは別の観点で分類する)
FileViewと同じにした方が楽だと思うけど。
ちなみに今のプロジェクトでは主にnamespaceにあわせてる。フォルダ階層も。
比較的管理しやすい。
456:デフォルトの名無しさん
08/03/19 23:35:16
OPENFILENAME でファイルを読み込む場合に最初にパスを指定しないと
プログラムを再起動しても最後に開いたパスがカレントディレクトリ
になってますが、これは何処にパスが記憶されてるのでしょうか?
457:デフォルトの名無しさん
08/03/19 23:39:56
ゲーム作るとしたら
普通はbeginthreadexとかでループさせるもんですか?
それともpeekmesseageとかでループさせますか?
ゲーム内のオブジェクトとかどうやって管理しますか?
クラスをvectorに叩き込んで適当に追加したり削除したりでいいんですか?
ネタじゃないです
マジレスお願いします
458:デフォルトの名無しさん
08/03/19 23:41:45
ゲーム製作板がある
459:デフォルトの名無しさん
08/03/20 01:50:42
複数のファイル(cpp)を作ると
クラスとかの変更があるたびに
いちいちexternのほうも修正しなくてはならなくてめんどくさいんですが
そこらへんを自動でやってくれる機能はないですか?
460:デフォルトの名無しさん
08/03/20 01:51:52
全部ヘッダに書けば。
461:デフォルトの名無しさん
08/03/20 01:51:53
2008にMFCはないんですか?
462:デフォルトの名無しさん
08/03/20 08:27:22
>>457
もうちょっと具体的でないと答えづらいが、beginthreadexでループというのは普通じゃないと思う。
>>459
C++でexternは使わないことが多い。
463:デフォルトの名無しさん
08/03/20 10:50:29
>>461
Standard以上に付いている。
464:デフォルトの名無しさん
08/03/20 12:21:59
>>457
ネタじゃないなら、beginthreadex について調べてからこい。
どんなプログラムかわからんので beginthreadexe をループで
と言うのがおかしいかどうかはわからんけど、peekmessage と
同列にしてるのは明らかにおかしいと思う。
465:462
08/03/20 12:32:49
>>464
うん。そういう意味で書いた。メッセージにつき1スレッドで処理するってことかな。
使ったことないけどユーザーインタフェーススレッドがそんな感じなのかな。
466:デフォルトの名無しさん
08/03/20 18:01:37
>>463
もしかしてMFCはいらない子ですか?
467:デフォルトの名無しさん
08/03/20 19:10:59
貧乏人にはいらない
468:デフォルトの名無しさん
08/03/20 19:14:23
Expressは試供品だろ
469:デフォルトの名無しさん
08/03/20 21:32:54
>>454
まさかと思うが、1クラス1ファイルなんて妄執に囚われていないだろうな。
470:デフォルトの名無しさん
08/03/20 22:06:12
>>469
いやそれは基本だろ…
471:デフォルトの名無しさん
08/03/20 22:12:14
>>457
普通にメインスレッドにゲーム用ループ作って
そのループの中にメッセージループを処理する関数つくって入れてた
ただ、メインスレッドでやると、メニューポップアップ時とかにメッセージループで
処理がとまるから
ユーザー操作に関係ないリアルタイム系のゲームを作っている場合などは
気をつけないとはまるかも
472:デフォルトの名無しさん
08/03/20 22:13:21
>>457
つまり、peekmessage方式ね
473:デフォルトの名無しさん
08/03/20 22:19:15
>>464
別に>>457はおかしいことは言ってないよ
win32プログラムの場合、一般的にはメッセージをgetmessageによるループで処理させるけど
ゲームみたいな場合にはメッセージ処理をループではなく局所的に処理させたい場合がある
メッセージがない時抜けるためにpeekmessageでメッセージの有無確認を行うというのは良くやる手法
474:デフォルトの名無しさん
08/03/20 22:25:24
間違えた
peekmessage使うとメニューポップアップとかではとまらないかも
VBのDoEventsはとまったような気がしたが
475:デフォルトの名無しさん
08/03/20 22:29:40
ゲーム関係はゲーム板のやつが詳しいだろ
476:デフォルトの名無しさん
08/03/20 22:34:38
ためしにpeekmessageを使ってメニューポップアップしてみたらやっぱり止まるね
ということで、>>474は無しでw
477:デフォルトの名無しさん
08/03/20 22:40:02
>>475
確かにw
俺もWindowsゲーム作ってたのって
もう8年も前だからすっかり忘れてるわ
478:デフォルトの名無しさん
08/03/20 23:19:31
>>473
peekmessage に突っ込んでる奴なんていないから、
> 普通はbeginthreadexとかでループさせるもんですか?
についての君の意見を聞かせてくれ。
479:デフォルトの名無しさん
08/03/21 00:28:42
478みたいな
俺のほうが正しいと認めるまで論議をやめない
みたいな奴がいるとウザイ
480:デフォルトの名無しさん
08/03/21 00:56:00
ヘッダってなんで自動で書いてくれないわけ?
全部読み込んでから使わないヘッダを削除して軽くすればいいじゃん
481:473
08/03/21 01:25:33
>>478
457 の言ってるのは、ゲームループの為に、新しいスレッドを作るか
メインスレッドでループさせるのとどっちが良いかという意味でしょ
で、beginthreadexについて俺は何を意見すればよいんだ?
482:デフォルトの名無しさん
08/03/21 01:39:13
>>480
何が言いたいのかよくわからんがヘッダに何を書くかは自由だぞ?
書くのが面倒ならヘッダなんて作らなきゃいいじゃないか。
483:デフォルトの名無しさん
08/03/21 01:50:33
まず標準関数がなんのヘッダ使ってるか調べるのがだるい
使わなくなったら他に使ってないか全コード調べて使ってなかったらゴミだからヘッダ消すのもだるすぎる
484:デフォルトの名無しさん
08/03/21 02:21:33
めんどくせぇならすべてをincludeしたヘッダでも作れば?
include消すのならincludeをコメントアウトしてコンパイルエラーでなけりゃOKとかでいいんじゃね?
ってか余分なヘッダーをincludeしたからといって実害は無いと思うぞ?
485:デフォルトの名無しさん
08/03/21 03:01:52
ほんとだ!なんでいっぱいインクルードしてもプログラムサイズ増えないんだ??
486:デフォルトの名無しさん
08/03/21 03:39:45
コンパイラは賢いから。
宣言と定義の違い。実態がないもの(宣言)はいくらあったところでプログラムサイズは変わらない。
487:デフォルトの名無しさん
08/03/21 07:30:02
>>481
>457 の言ってるのは、ゲームループの為に、新しいスレッドを作るか
ゲームだとこういうやり方は普通なの?
メインスレッドでメッセージループして、重い処理を別スレッドにするのが普通と思うんだけどな。
あと457がこういう意図なのかどうかは不明。自分は457からはそう読み取れない。
464のように解釈した。
488:デフォルトの名無しさん
08/03/21 10:04:35
>>485
増えるのはコンパイル時間だけ。
ヘッダの中で変数定義しているのでもない限りプログラムの大きさは増えない。
489:デフォルトの名無しさん
08/03/21 10:39:27
>>487
普通かどうかについてはわからない
少なくとも、俺が勤めていたゲーム会社のゲームライブラリはゲームループを
メインスレッドに組み込んでいた(ADVだからそれでぜんぜん問題なかった
ただ、>>471で書いたようにメニューポップアップが発生するとイベントループ関数から
戻ってこないような状況もあるから、サブスレッドによるゲームループもありだと思うよ
俺の場合は逆で
beginthreadexとpeekmessageを対比しているのでゲームループ処理を行う場所を
メインスレッドかサブスレッドどっちすればよいか?と質問していると判断したんだけどね
490:デフォルトの名無しさん
08/03/21 12:25:44
ありがとうございます。全ヘッダを書いたヘッダを作ってそれを使うことにしました。
491:デフォルトの名無しさん
08/03/21 20:18:35
>>489
サブスレッドでメッセージループする場合、メインスレッドはサブスレッドからの通知を待つの?
どうもこの方法の意義が分からないな。
繰り返しになるが、メインスレッドでメッセージループして、時間がかかる処理だけ別スレッドに
すればいいしそれが普通と思う。
あとメニューポップアップの表示ではループは止まらんと思う。表示してすぐ次のメッセージを処理すると思う。
止まるのはモーダルダイアログ出す場合とか。
あと質問を489のような解釈をするには「普通はbeginthreadexで作った別スレッドででループさせるもんですか?
それともメインスレッドででループさせますか?」じゃなきゃ変だと思う。
492:デフォルトの名無しさん
08/03/21 20:51:01
>止まるのはモーダルダイアログ出す場合とか。
ごめん。間違えた。これもメッセージは止まらんわ。処理時間の長い処理を入れなければ。
493:デフォルトの名無しさん
08/03/21 22:19:29
>>479
だったら、スルーしとけばいいのに。
494:デフォルトの名無しさん
08/03/21 23:05:37
>>493
見なければいいのに
ヌルーすればいいのに
書き込まなければいいのに
なんて言うだけ無駄です
495:デフォルトの名無しさん
08/03/22 00:46:04
確かに無駄だったな。(w
496:デフォルトの名無しさん
08/03/22 12:05:43
VisualStadioをインストールしたのですが、なぜかコンパイルができません。
ちなみに作ったテキストを.cに変換してCソースファイルになるはずなのですが、それも行われません。
しかし、ビルドは行うことが出来ます。
コンパイルの操作を行おうとする時に「拡張子に関連したコンパイルツールがありません」となります。
これは私なりに考えてCソースファイルになってないからだと考えます。
しかし、その根本的な原因がわかりません。
原因は何でしょうか?(長文失礼)
497:デフォルトの名無しさん
08/03/22 13:09:51
Vistaなんじゃねーの
498:デフォルトの名無しさん
08/03/22 13:27:30
単純に拡張子が表示されていないだけだと思われ。
Vista の Explorer でデフォルトがどういう表示なのかは知らん。
499:デフォルトの名無しさん
08/03/22 14:18:50
> VisualStadio
釣りか、ネタか、バカだろ。
相手にしないように。
500:デフォルトの名無しさん
08/03/22 17:22:43
>>499
初心者質問スレでその対応はないだろ
501:デフォルトの名無しさん
08/03/22 17:25:18
お前が親切に相手してやれ
502:デフォルトの名無しさん
08/03/22 17:31:43
>500
手本を示せ
503:デフォルトの名無しさん
08/03/22 19:22:16
>>491
勘違いしているようだが、メッセージループはメインスレッドでやるんだよ
ゲームループと言ってるものは、ゲームを作る場合イベントドリブン方式を使わないで
ゲームの進行に関わる処理をループで行う
単純な例では、キー入力->ステート変化->画面表示->キー入力->....こんなループを組む
たとえば、キー入力をWM_KEYDOWNのメッセージハンドラーで受けないで
GetKeyboardStateとかを使ったりして今のキーの押下状態を取得する
どうしてそのようなことをするのかについてはゲーム作成などのHPでも見てもらいたい
メニューポップアップに関しては、そのpeekmessageを使ったルーチンを作って実際に試してみてね
質問の仕方が変だというのに関しては確かにそう思う、だけどここは初心者スレだから多少の意訳はしてあげても良いと思った
質問者がすでに消えたようなのでもうこの問題はこれで収めようとおもうんだけど
504:デフォルトの名無しさん
08/03/22 19:24:12
とっくに終わってるのに1人で何やってんの?
505:デフォルトの名無しさん
08/03/22 19:43:05
>>503
誤解されると良くないからちゃんと書いておくが
メッセージループは、beginthreadexによる別スレッドでゲームループを作る場合も、
peekmessageをつかったメインスレッド中にループを作る場合も、メインスレッドで行うと言う意味ね
このことは当たり前の前提で話していたつもりなんだが、>>465の書き込みを見ると
すでに認識の違いがそこにあったようなので一応書いておいた
506:デフォルトの名無しさん
08/03/22 19:45:15
>>504
この板は、どの書き込みが>>491なのか判らないので
終わっているかどうかは判らんから一応ね
507:デフォルトの名無しさん
08/03/22 19:45:20
また始まったか
508:491
08/03/22 20:20:46
なるほど。ゲームループというのを知らなかったから話が噛み合わなかったわけだ。申し訳ない。
なんでGetMessageじゃなくてPeekMessageなんだろうと思ってたけど、そういうことね。
>505
指摘どおり、認識違いしていた。
ただポップアップメニューについてはやはり分からない。試したけど止まらなかった。
「メニューポップアップ」とはTrackPopupMenuを使ったポップアップメニューのことと思ってたんだけど、それが違う気がしてきた。
説明して欲しい。
ゲームループは以下とほぼ同じ。ウィンドウプロシージャのWM_RBUTTONUPでTrackPopupMenuをコールした。
URLリンク(www.geocities.co.jp)
#質問者は去ったが、もうちょっと続けさせて欲しい。
509:デフォルトの名無しさん
08/03/22 21:10:00
どっかよそでやってほしい
ゲーム製作板あたりで
510:デフォルトの名無しさん
08/03/23 00:57:12
お聞きしたいのですが
ボタンがもっとも美しく見える大きさについて
横幅はフォントの高さに対して x分のy
高さはフォントの高さに対して z分のw
と言う推奨比率みたいなのを
その昔MS発行の何かの書籍で見た記憶があるのですが
どなたかご存じであり 且つ 教えていただけませんでしょうか…
511:422
08/03/23 09:02:43
>>423
ありがとうございます。
初回のビルドでは警告がでて当然なんですね。
実際にも簡易リビルドの警告のあと、自動的に通常ビルドされていました。
通常のビルドでのエラーに絞ってなお調べてみようと思いますm(_ _)m
あれからすぐ書き込み規制に入ってしまい返事が遅くなりすみません。
512:デフォルトの名無しさん
08/03/23 16:58:57
何度でも蘇るよ!
513:デフォルトの名無しさん
08/03/24 14:12:56
Win32APIとランタイムライブラリを使ったプログラムで、_beginthreadを使ったら
_beginthreadexを使えって怒られたんだけど、_beginthreadの問題点を調べても
なかなかわからない。
スレッドの終了コードや生成時の状態を指定する必要が無ければ_beginthreadでも
いいような気がするんだけど。
どんな問題点があるんですか?おすえてくらさい。
514:デフォルトの名無しさん
08/03/24 14:46:22
スレッド起こしっぱなしで放置でいい用途なら_beginthreadで問題ないんじゃ。
WaitForSingleObjectとかするなら_beginthreadexを使うべし。
URLリンク(msdn.microsoft.com)
>_beginthread よりも _beginthreadex を使用した方が安全です。_beginthread が作成したスレッドの終了が早すぎると、
>_beginthread の呼び出し元に返されるハンドルが無効となる可能性や、別のスレッドを指してしまう可能性があります。
>しかし、_beginthreadex から返されるハンドルは _beginthreadex の呼び出し元で閉じられる必要があるため、
>_beginthreadex がエラーを返さなかった場合にはハンドルが有効であることが保証されます。
515:513
08/03/24 22:05:57
514>>
アリガd
やっぱハンドル使ったりしないなら_beginthreadで問題ないよね?
でも上司に反抗するのも建設的じゃないんで_beginthreadexに書き換えますたw
516:デフォルトの名無しさん
08/03/24 22:40:12
WindowsXPでVisual C++ 2008 Express Editionを三日くらい使っているのですが、
プログラムを実行したときの表示が一瞬で消えてしまいます
ずっと表示させるにはどうしたらいいですか?
517:デフォルトの名無しさん
08/03/24 22:53:00
ヤフオク見るとVC++.netのスタンダードしかないんだけどプロフェッショナル
って品薄なのですか?スタンダードとプロフェの価格が知りたいです。
518:デフォルトの名無しさん
08/03/25 01:12:14
>>516
[デバッグ]-[デバッグなしで開始]
519:デフォルトの名無しさん
08/03/25 01:33:58
>>516
main関数の最後に↓を追加
getchar();
520:デフォルトの名無しさん
08/03/25 14:32:27
>>517
スタンダード2〜3万 プロフェショナル8〜9万ぐらい
521:デフォルトの名無しさん
08/03/25 20:58:40
>>516
コマンドラインで実行
522:デフォルトの名無しさん
08/03/25 22:42:33
>>517
おとなしくExpress使ってろよ
523:sage
08/03/26 19:21:13
ListBoxで長いテキストの右は隠れんだけど、マウスを乗せて
ポップアップ窓に全文表示ってどうすんの?
調べんだけどわからん
524:523
08/03/26 19:24:34
久し振りで来たら名前とE-mail間違え
525:デフォルトの名無しさん
08/03/26 20:07:35
>>523
tooltip
526:デフォルトの名無しさん
08/03/26 20:32:13
>>525
ありがとうございます
tooltipにテキストを取得ってどうするんでしょうか?
コントロールやなんかのヘルプは表示できるんですが
527:デフォルトの名無しさん
08/03/26 21:19:36
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow){
HANDLE hMutex = CreateMutex(NULL,FALSE,szInstance);
if(::GetLastError() == ERROR_ALREADY_EXISTS){
CloseHandle(hMutex);
return FALSE;
}
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DlgWndProc);
return 0;
}
この記述でリリースビルドをしても構成エラーとかで起動できないPCがあるんですが、原因が分かりません;
分かるかた是非お願いいたします。
528:デフォルトの名無しさん
08/03/26 21:35:34
そのエラーは、大方Visual C++のランタイムをインストールしていないのだろう。
2005, 2005 SP1, 2008とかそれぞれ分かれているから、
自分のプログラムをビルドしたVC++のバージョンと同じやつを選んでインストールしろ。
529:デフォルトの名無しさん
08/03/26 21:46:44
やっぱりそれ関係のエラーだったのか・・
相手にそーいった環境が一切なくても動くようにするにはどうすればいいですか?
530:デフォルトの名無しさん
08/03/26 21:56:48
原因が分かりません
↓
やっぱりそれ関係のエラーだったのか・・
531:デフォルトの名無しさん
08/03/26 22:28:56
1度コード書いてコンパイルに成功する
EXEができてそれが起動する
コードを修正したけどコンパイル失敗
なのに1番目にコンパイルしたEXEが起動する
これ、コンパイル失敗したらEXE起動しないようにするにはどうすれば?
532:デフォルトの名無しさん
08/03/26 22:34:26
コンパイルではEXE起動しないよ
533:デフォルトの名無しさん
08/03/26 22:39:50
原因を特定できなくて「分からない」と言ったんで、
これかな?あれかな?って思ったのはあったんだよね;
534:デフォルトの名無しさん
08/03/26 23:27:08
>529
/MDじゃなくて、/MTでコンパイルすれば。
535:デフォルトの名無しさん
08/03/26 23:51:28
>>534
すいません。どーゆー意味でしょう・・?
536:デフォルトの名無しさん
08/03/27 00:45:33
ヘルプ嫁
537:デフォルトの名無しさん
08/03/27 11:57:29
Microsoft Visual C++ 2008 Express Editionを使用しています。
c:\Program Files\Microsoft Visual Studio\Common\MSDev98\Template
というフォルダにawxファイルを入れたいんですが
見つかりません。
Expressには無いんでしょうか??
538:デフォルトの名無しさん
08/03/27 12:00:26
>>531
前に作ったEXEを起動するか?って聞いてくるはずなんだけど。
「今後この問い合わせをしない」にチェック入れたのか。
ツール-オプションのプロジェクトおよびソリューションのビルド/実行に
それ関連の設定あるみたいだから見てみては。
起動する/しない/確認の3通り設定できる
539:デフォルトの名無しさん
08/03/27 13:24:47
で、MTとMDの違いが分かりませんw
540:デフォルトの名無しさん
08/03/27 13:45:04
ヘルプ嫁
541:デフォルトの名無しさん
08/03/27 13:50:12
ヘルプヘルプってそんくらい教えてやれよ
どーせお前わかんねーんだろ?w
ぷっ
542:デフォルトの名無しさん
08/03/27 13:58:51
エラーになったとき、エラーの原因が表示されるコンパイラはありますか?
543:デフォルトの名無しさん
08/03/27 23:43:27
>>539
[プロジェクト]-[プロパティ]-[構成プロパティ]-[C/C++]-[コマンドライン]にあるよ
544:デフォルトの名無しさん
08/03/28 00:49:43
>>543
あ。ありがとー
リンクの静的と動的が具体的にどう違うのかいまいち理解しきってないなぁ・・
545:デフォルトの名無しさん
08/03/28 02:16:49
CRTを自分のEXE/DLLに内蔵するか、外のDLLに頼るかの違い。
546:デフォルトの名無しさん
08/03/28 11:38:52
お。ありがとうございます
547:デフォルトの名無しさん
08/03/28 20:11:35
自分でクラス作るところでつまづく
Cも関数作るところでつまづいた
548:デフォルトの名無しさん
08/03/28 21:45:30
VC++2005で、バイナリデータをchar型の配列にいれてから、DATファイルに保存していましたが、
SQLSERVER2005にそのバイナリデータを直接保存できるようにしたいです。
varchar型のFIELDにそのデータを保存しようとすると、認識できないデータ(文字?)
があるらしく、データがそこで切れてしまいます。FIELDのデータ型をいろいろ変えたり
してみましたがやはり駄目でした(binary型などはエラーになってしまいます)。
何かヒントを頂ければ幸いです。スレ違いだったらすみません。
549:デフォルトの名無しさん
08/03/28 21:48:24
初心者スレでSQLSERVER2005はないだろ
550:デフォルトの名無しさん
08/03/28 21:51:27
↑すいません。SQLSERVERにデータを保存する際には、DATファイルに保存
する時と同様に、char型配列にバイナリデータをmemcpyしてから、データを転送しています。
よろしくお願いします。
551:デフォルトの名無しさん
08/03/28 21:52:27
>>549
すいません。。。
552:デフォルトの名無しさん
08/03/28 21:52:27
Microsoft Visual C++ 2008 Express Editionを使ってます
プログラムを書き込む際に普通のテキスト感覚で行うと
前の文字まで消えてしまいます (挿入ができない)
x+600 +の後に4500といれたい
しかしx+4500となって600が消えてしまいます
そういった設定はどこで行えばよいのでしょうか?
553:デフォルトの名無しさん
08/03/28 22:02:11
まさか Insert 押せば終わりってオチじゃないよな…
554:デフォルトの名無しさん
08/03/28 22:08:47
>>553
その通りでした すみません・・
555:デフォルトの名無しさん
08/03/28 22:11:51
>>548
> 認識できないデータ(文字?)
> があるらしく、データがそこで切れてしまいます。
文字列型なんだから、\0がきた時点で切れるだろ。
> binary型などはエラーになってしまいます
エラーの原因を調べろよ。
556:デフォルトの名無しさん
08/03/28 22:25:24
>>555
ありがとうございます。
>文字列型なんだから、\0がきた時点で切れるだろ。
全く同じデータをDATファイルに保存して、そのファイルをテキストエディタで開き、
そのデータをSQLSERVERのFIELDにコピペすると、やはりデータが切れてしまいます。
データを変換する必要があるんですかね?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4531日前に更新/222 KB
担当:undef