トップページ⇒tech
1001コメント322KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001Part28の10002008/02/15(金) 01:45:56
Visual C++入門者・初心者からの質問を、
お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

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

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

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

過去スレ、関連スレなどは>>2-5辺り。
0002デフォルトの名無しさん2008/02/15(金) 03:00:12
Part28 ttp://pc11.2ch.net/test/read.cgi/tech/1196430042/
Part27 ttp://pc11.2ch.net/test/read.cgi/tech/1189394427/
Part26 ttp://pc11.2ch.net/test/read.cgi/tech/1176387917/
Part25 ttp://pc11.2ch.net/test/read.cgi/tech/1168354839/
Part24 ttp://pc10.2ch.net/test/read.cgi/tech/1158296664/
Part23 ttp://pc8.2ch.net/test/read.cgi/tech/1140711893/
Part22 ttp://pc8.2ch.net/test/read.cgi/tech/1131443284/
Part21 ttp://pc8.2ch.net/test/read.cgi/tech/1124806288/
Part20 ttp://pc8.2ch.net/test/read.cgi/tech/1120222322/
Part19 ttp://pc8.2ch.net/test/read.cgi/tech/1116209988/
Part18 ttp://pc8.2ch.net/test/read.cgi/tech/1113539594/
Part17 ttp://pc8.2ch.net/test/read.cgi/tech/1107926989/
Part16 ttp://pc8.2ch.net/test/read.cgi/tech/1101022051/
Part15 ttp://pc5.2ch.net/test/read.cgi/tech/1097880265/
Part14 ttp://pc5.2ch.net/test/read.cgi/tech/1093672937/
Part13 ttp://pc5.2ch.net/test/read.cgi/tech/1089011118/
Part12 ttp://pc5.2ch.net/test/read.cgi/tech/1083585833/
Part11 ttp://pc5.2ch.net/test/read.cgi/tech/1077965179/
0003デフォルトの名無しさん2008/02/15(金) 03:00:34
Part10 ttp://pc5.2ch.net/test/read.cgi/tech/1074933908/ ※
Part09 ttp://pc5.2ch.net/test/read.cgi/tech/1068983609/ ※
Part08 ttp://pc5.2ch.net/tech/kako/1063/10630/1063029371.html
Part07 ttp://pc5.2ch.net/tech/kako/1056/10562/1056280510.html
Part06 ttp://pc5.2ch.net/tech/kako/1052/10529/1052931903.html
Part05 ttp://pc5.2ch.net/tech/kako/1048/10486/1048698321.html
Part04 ttp://pc5.2ch.net/tech/kako/1044/10441/1044196393.html
Part03 ttp://pc5.2ch.net/tech/kako/1038/10381/1038160750.html
Part02 ttp://pc3.2ch.net/tech/kako/1030/10309/1030985362.html
Part01 ttp://pc3.2ch.net/tech/kako/1023/10235/1023530449.html
0004デフォルトの名無しさん2008/02/15(金) 03:01:00
【関連スレ】
■MFC相談室 mfc18d.dll■
http://pc11.2ch.net/test/read.cgi/tech/1185917008/l50
Win32API質問箱 Build57
http://pc11.2ch.net/test/read.cgi/tech/1189255282/l50
【C++】 DirectX初心者質問スレ Part14 【C】
http://pc11.2ch.net/test/read.cgi/tech/1182351826/l50
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131
http://pc11.2ch.net/test/read.cgi/tech/1170338926/l50
C++相談室 part56
http://pc11.2ch.net/test/read.cgi/tech/1185377587/l50
C/C++の宿題を片付けます 95代目
http://pc11.2ch.net/test/read.cgi/tech/1187944110/l50
【初心者歓迎】C/C++室 Ver.42【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1188748806/l50

【関連サイト】
猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
MSDN ライブラリ ※変更された
http://msdn.microsoft.com/library/ja/
http://msdn2.microsoft.com/ja-jp/library/ (2005のことはこっち)
Platform SDK Update ※変更された
http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en
Google
http://www.google.co.jp/
0005デフォルトの名無しさん2008/02/15(金) 03:01:26
【このスレの前身 VisualC++相談室 過去スレ】
part 1 ttp://piza.2ch.net/tech/kako/970/970607517.html
part 2 ttp://piza.2ch.net/tech/kako/981/981630730.html
part 3 ttp://piza2.2ch.net/tech/kako/993/993186053.html
part 4 ttp://pc.2ch.net/tech/kako/1002/10021/1002165477.html
part 5 ttp://pc.2ch.net/tech/kako/1006/10068/1006834463.html
part 6 ttp://pc.2ch.net/tech/kako/1011/10116/1011615035.html
part 7 ttp://pc.2ch.net/tech/kako/1017/10178/1017843192.html
part 8 ttp://pc.2ch.net/tech/kako/1022/10224/1022499000.html
part 9 ttp://pc5.2ch.net/tech/kako/1036/10368/1036897197.html

テンプレ終わり。
0006デフォルトの名無しさん2008/02/15(金) 03:26:38
Platform SDKの中で一番新しいのはこっち
Microsoft Windows Server 2003 R2 Platform SDK Web Install
http://www.microsoft.com/downloads/details.aspx?FamilyID=0baf2b35-c656-4969-ace8-e4c0c0716adb&DisplayLang=en
(ISO版などあり)

これ以降、Platform SDK + .NET Framework SDKとして
Windows SDKが公開されていて、その中で一番新しいのはこれ。
Windows SDK for Windows Server 2008 and .NET Framework 3.5
http://www.microsoft.com/downloads/details.aspx?FamilyID=f26b1aa4-741a-433a-9be5-fa919850bdbf&DisplayLang=en
少し前のバージョン(Vista + .NET 3.0の初期版)には日本語版もあったけど、
日本語化されているのは専ら.NET Framework部分だけ。
0007デフォルトの名無しさん2008/02/15(金) 03:41:49
VC6対応の、最後のPSDKはここ。
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
0008デフォルトの名無しさん2008/02/15(金) 06:04:51
>>1乙

ブチキレるのは勝手だがし、新スレも立ってねーのに
くだらねーKYレスでうめんなよな、998
0009デフォルトの名無しさん2008/02/15(金) 07:59:05
前スレ 997 です。
999 さんありがとうございました。
0010デフォルトの名無しさん2008/02/15(金) 10:50:53
こんなスレに立ち寄るだけ無駄。
0011デフォルトの名無しさん2008/02/15(金) 10:52:02
スレ削除すべき
0012デフォルトの名無しさん2008/02/15(金) 10:52:36
>>10-11ってリアルでも人生こんなもんか
0013デフォルトの名無しさん2008/02/15(金) 12:22:51
うるせーよ。
まともに俺の質問にも答えられない愚民どもが。
0014デフォルトの名無しさん2008/02/15(金) 14:19:22
前スレ>>995
>ポインタのポインタではだめなの?

freeとかdeleteを使うのがめんどくさいので
CArrayあたりでできないかと思いこのスレに来ました。
CArrayだとプログラムが終わったら領域解放してくれると
聞いたことがあるけど間違いかな?

0015デフォルトの名無しさん2008/02/15(金) 14:33:18
CArray はよく分かんないけど、
とりあえず vector ならこうできる。

typedef int Four[4];
std::vector<Four> data;
0016デフォルトの名無しさん2008/02/15(金) 14:41:03
mallocだろうとnewだろうとCArrayだろうとと、
プロセスが死ねばOSが解放する。
それが適切であるかどうかは別にして。
0017デフォルトの名無しさん2008/02/15(金) 14:45:28
デストラクタが領域を解放してくれる、だな。
0018デフォルトの名無しさん2008/02/15(金) 14:52:34
>>17
ちゃんと読んでるか?
0019デフォルトの名無しさん2008/02/15(金) 16:21:54
push_back' : 1 番目の引数を 'int' から 'const int (&)[4]' に変換できません。
理由: 'int' から 'const int [4]' へは変換できません。
配列型への変換はありませんが、参照またはポインタから配列への変換があります。

int i,j;
typedef int Four[4];
std::vector<Four> data;

for(i=0; i<5; i++){
   data.push_back(i);
   for(j=0; j<4; j++){
      data[i][j]=j;
   }
}
0020デフォルトの名無しさん2008/02/15(金) 16:23:41
>15
となりました。
根本的に使い方が間違っているのでしょうか?
ちなみにCArrayで同じことをやろうとすると、
宣言自体でコンパイルエラーになりました。
0021デフォルトの名無しさん2008/02/15(金) 16:35:37
>20
VCやる前にCやC++の基礎をしっかりやった方がいいと思う。
数学の授業で足し算や引き算みたいな数学以前の質問されたら迷惑だろ
0022デフォルトの名無しさん2008/02/15(金) 16:40:35
CArrayなんか使ってるやついるの?
0023デフォルトの名無しさん2008/02/15(金) 16:42:56
カレーってよむの?
0024デフォルトの名無しさん2008/02/15(金) 18:00:49
課題で「点数をキー入力してファイルに出力せよ」
   →「次に作成したファイルから点数を入力し、合計と平均を出せ」

って言われたんだけど、「作成したファイルから点数を入力し」
の部分がよく分からない。
最初に入れた点数に意味は無いのかな?
入力したら上書きされるよね?
0025デフォルトの名無しさん2008/02/15(金) 18:06:56
>>24
ここはガキの宿題に答えるスレじゃない。

入力とはキー入力の事だけをさすのではない
ファイルからデータを読み込むことをファイル入力
データを書き込むことをファイル出力という

その分は説明が不十分な気はするな。
キー入力、ファイル出力、ファイル入力までは書いてあるのに
合計と平均を何に出力するのかが書いていない。
まあおそらく画面出力のことだ。
「ファイルからデータを読み込んで、合計と平均を画面に出力せよ」
こういう事だろうよ。
0026デフォルトの名無しさん2008/02/15(金) 19:20:33
>>25
分かりやすい解説ありがとうございます
自分の不勉強でした
0027デフォルトの名無しさん2008/02/15(金) 21:27:14
すいません。
vectorについてお礼を言うのを忘れていました。
2次の動的配列ならいろいろと検索すれば
すぐに出てくるのですが、1次が固定で2次が動的
意外にないものですね。
スレ違いなのでここまでにさせていただきます。
0028デフォルトの名無しさん2008/02/15(金) 22:14:36
std::vector< boost::array<int,4> >
0029デフォルトの名無しさん2008/02/16(土) 08:30:33
>28
ありがとうございます。
他のスレで構造体を使う方法と,boost::arrayを
使う方法を教えてもらいましたが、
boost::arrayは自分でコンパイルしないといけないみたいですね。
0030デフォルトの名無しさん2008/02/16(土) 09:22:02
マルチうぜーよ。子ね
0031デフォルトの名無しさん2008/02/16(土) 09:31:10
番号、氏名、英語、数学、国語
こんなのを動的に追加するサンプルはよくあるだろ
これをこうして
番号、氏名、成績[3]
こうしたら
成績[3]

3つ固定のデータを動的に追加じゃないか
0032デフォルトの名無しさん2008/02/16(土) 11:10:46
すいません。vector 構造体も vector boost::arrayも
問題は両方解決しました。
マルチでスレを汚してそのまま去るのもいい加減なので
お礼だけ言っておきます。
0033デフォルトの名無しさん2008/02/16(土) 13:30:18
ここでき聞いていいのか分かりませんが・・・。
MFCでAppWizardでSDIを選択しましたが、
デフォルトのCViewではなくCFormViewを
使いました。
そのFormの上にエディトボックスを貼り付け、
テストで試しに線を引いてみるとこにしました。

0034デフォルトの名無しさん2008/02/16(土) 13:40:30
OnInitialUpdate()で次のように描いています。

CDC* pDc;
pDc=m_Edit1.GetDC();  //m_Edit1はエディトボックスをメンバ変数に

CPen NewPen;
NewPen.CreatePen(PS_SOLID, 1, RGB(0,0,0));
CPen* OldPen=pDc->SelectObject(&NewPen);

pDc->MoveTo(0,0);
pDc->LineTo(50,50);

pDc->SelectObject(OldPen);
NewPen.DeleteObject();

どこが間違っているかさっぱり分かりません。
それともエディトボックスに描画はできないのでしょうか?
ホームページとかで調べるとできるようなことは書いているのですが。
0035デフォルトの名無しさん2008/02/16(土) 14:02:47
別にボタンを作って同じコードを書いてボタンを
クリックしたら描画するようにしたらできた。
不思議だ。なぜ?
0036デフォルトの名無しさん2008/02/16(土) 14:04:01
Windowsでは見えない部分は描かれない。
OnInitialUpdate()がどんな時に呼ばれるか調べな。
0037デフォルトの名無しさん2008/02/16(土) 15:54:12
MFCでCFormViewのOnDraw関数でウィンドウのサイズが
変わったら再描画するようにしても一瞬だけ表示されて
消えてしまいます。
いいアドバイスがあったらお願いします。

0038デフォルトの名無しさん2008/02/16(土) 16:57:53
何でエディトボックス?
違うもので試してみようと思わないのか?
0039デフォルトの名無しさん2008/02/16(土) 17:19:41
グラフを書くのに文字も入れないといけないかと思い
実験していたところです。
0040デフォルトの名無しさん2008/02/16(土) 17:25:22
エディトボックスじゃなくても字はかけるよ
0041デフォルトの名無しさん2008/02/16(土) 17:41:19
そうですか、それではピクチャーボックスで試してみます。
しかし、エディトボックスで再描画がおかしくなる理由が
分かりませんね。
0042デフォルトの名無しさん2008/02/16(土) 18:33:12
>>41
CFormViewのOnDrawではCFormViewのクライアント領域に描いてるから。
その上に乗ってるエディットボックス自身の再描画で上書きされる。
エディットボックスに描きたければ、サブクラス化してエディットボックスの再描画を乗っ取れ。
0043デフォルトの名無しさん2008/02/16(土) 22:38:08
>42
ピクチャーボックスで再描画すると普通にできるのでとりあえずは
そっちでやることにします。
別に質問します。
ずっと前に、エディトボックスの右クリックを実現しようとして、
サブクラス化したのですが、なぜかリソースエディタが使えませんでした。
仕方ないので、createしてコードで作ったのですが、そういう場合でも
リソースエディタを使うことができますか?
0044デフォルトの名無しさん2008/02/17(日) 02:39:14
>>36
こんな糞スレじゃなくてム板いけ。
書き込む前にスレに軽く目を通せばおかしいってわかるだろうが。

★初心者にVisual C++を教えるスレ★ Part29
http://pc11.2ch.net/test/read.cgi/tech/1203007556/
0045442008/02/17(日) 02:42:01
誤爆orz
0046デフォルトの名無しさん2008/02/17(日) 02:47:34
バーかw
0047デフォルトの名無しさん2008/02/17(日) 03:02:53
>>44に感謝して質問させていただきます。
自分のパソコンで一時的に(実家にいるときとかとかに)コードとかを書いて、出来ればデバッグまでおわらせて
実行するのは大学のパソコンで行いたいんだけど、この場合はプロジェクトの種類は何を選べば良いでしょうか?
使ってるのはVisual C++ express editionなんですが。
大学のlinuxではバージョンは分からないですがg++でコンパイルです。
Makefileも欲しいんですが、そんなことって出来ますか?
0048デフォルトの名無しさん2008/02/17(日) 03:03:05
誤爆で説得力なくなる文だなw
専ブラはたまにこれやらかすな
0049デフォルトの名無しさん2008/02/17(日) 03:06:06
>>47
Win32コンソールでいいかなあ
Makefileは昔のVCは作れたけど、今のは無理かな
まあMAKEだけ別管理にするのがよさげ
0050デフォルトの名無しさん2008/02/17(日) 03:16:17
>>47
Cygwin入れた方が手っ取り早いと思う。
0051デフォルトの名無しさん2008/02/17(日) 03:26:55
>>49
なるほど。サンクス。
>Makefileは昔のVCは作れたけど
「全般」っていう種類のプロジェクトにメイクファイルプロジェクトっていうのがあるけどこれ?

>>50
今wikipedia見たらvmwareみたいなやつか。
vistaで不安定って書いてあったからちょっと引け腰。
0052デフォルトの名無しさん2008/02/17(日) 05:04:57
vmwareとはエミュレートするレベルが違う
vistaで不安定ならvmwareにXPでも入れて動かせばいいじゃない
0053デフォルトの名無しさん2008/02/17(日) 05:09:57
>>52
vmwareを入れるのならXPでなくターゲットのlinuxそのものをその上にインストールすればいいんじゃないかw
>>51
エミュレーションソフトを入れて大学のlinuxと同じもので開発環境を構築してみては?
0054472008/02/17(日) 05:50:19
再度すみません。>>47です
とりあえずmakefileプロジェクトでクラスを書いてメインで動作確認のコードを書いてみたんですが、
ビルドを押すと、

実行するビルド コマンド ラインがありません。

と出てしまってよく分からないんだけれどこれはどういう状態です
google先生でも一応調べたんですが分からないっす。
0055デフォルトの名無しさん2008/02/17(日) 08:09:53
>>54
その無駄な努力はやめて、CDブート可能なLinux使うかCygwin入れるかしろ。
0056デフォルトの名無しさん2008/02/17(日) 08:18:34
なんとしてもVCでやりたいんだなwww
0057デフォルトの名無しさん2008/02/17(日) 09:02:26
>>54
makefile プロジェクトは実行するコマンドから全て自分で指定
しないといけないから、君にはまだ無理。

そもそも、Visual Studio には make コマンドなんかついてない
ことすら知らないでしょ?

nmake で代用することもできるけど、makefile の文法が gmake
とは違う部分があるので、お勧めしない。

他の人が書いてるように、VMware とか入れて Linux 走らせるの
がいいと思う。VMware が不安と言うなら VirtualPC でやれば
MS の加護が受けられるのでちょっぴり安心かもしれない。
(まともに使ったことないからよく知らんけど。)
0058デフォルトの名無しさん2008/02/17(日) 09:39:08
だからもう、vmwareじゃなくてCDbootのLinuxでいいよ。キノピなら問題ないでしょ。
0059デフォルトの名無しさん2008/02/17(日) 09:44:31
別にcygwinでいいだろ
0060デフォルトの名無しさん2008/02/17(日) 09:53:41
VC関係ない
0061デフォルトの名無しさん2008/02/17(日) 12:13:50
http://itpro.nikkeibp.co.jp/article/NEWS/20070912/281813/
vmware + linux

無料だお
0062デフォルトの名無しさん2008/02/17(日) 12:44:13
>57
Windowsの上に載ってるVirtualPCにはMSのサポートがあるけど、
そのVirtualPCの上に載ってるLinuxはどこがサポートするんだゐ?
0063デフォルトの名無しさん2008/02/17(日) 13:14:38
サポートがいるなら、

Windows Vista / VirtualPC 2007 ->
 WindowsXP / VirtualServer 2005 R2 SP1 ->
  Red Hat Enterprise Linux

ってやればいいんじゃないかな。
0064デフォルトの名無しさん2008/02/17(日) 13:35:59
OSだけで何万費やすつもりなんだw
0065デフォルトの名無しさん2008/02/17(日) 14:09:46
環境を同じにするんじゃなけりゃ、ソースだけを共通にするほうが面倒がないよ。
まあ環境同じが楽だけど、行ったり来たりするほうが鍛えられる
0066デフォルトの名無しさん2008/02/17(日) 15:15:04
という勘違いした人が一人いると無駄な作業が増える。
0067デフォルトの名無しさん2008/02/17(日) 15:21:11
同じソース使うことのどこが勘違いなんだか。
デバッガにVCが使えるメリットは大きい。
0068デフォルトの名無しさん2008/02/17(日) 15:22:42
いまだにデバッガとか使うやついるの?
printfで十分だろ
0069デフォルトの名無しさん2008/02/17(日) 15:23:34
まあprintfで十分な規模ならprintfで十分
0070デフォルトの名無しさん2008/02/17(日) 15:32:54
学校で作るもんなんてそんな規模だろ
0071デフォルトの名無しさん2008/02/17(日) 19:17:13
すみません、ちょっと質問です。

ダイアログにwebbrowserコントロールとボタンコントロールを貼り付けて
ボタン押下でgoogleのページを表示させています。

その時にフォーカスがgoogle検索ページの
エディットボックスにフォーカスするのですが、
このフォーカスを移動させたくない場合、どのようにすれば良いでしょうか。

Navigate2のメソッドを利用しており、このメソッドのフラグを調べてみましたがないようです。
また、webbrowser2側でSetFocus()をオーバーライドしようとするも
webbrowser2側ではSeFfocus()を呼んでないようです。

webbrowser2にフォーカスを移動させない方法ってありますでしょうか?
0072デフォルトの名無しさん2008/02/17(日) 19:22:21
javascriptをoffにすればいいんじゃない?
0073デフォルトの名無しさん2008/02/17(日) 19:50:21
>>72
ありがとうございます!
IEのオプションでjavascriptをオフにしたらフォーカスが移動しなくなりました。

今現在は自分だけのローカルPCだけに反映されると思いますが、
他のPCでも有効にするためには、Navigate2のheaderとかに組み込めばいいのかな…

とりあえず、調べてみます。
ありがとうございました。
0074デフォルトの名無しさん2008/02/17(日) 20:22:14
C++とC++/CLIは微妙に違うらしいのですが、素のC++の勉強がしたい場合「空のプロジェクト」というやつでプログラムを書けばいいのでしょうか?
0075デフォルトの名無しさん2008/02/17(日) 21:04:10
>>74
CLR ではなく、Win32 で
0076デフォルトの名無しさん2008/02/17(日) 21:21:11
>>75
最初それのコンソールアプリケーションというのを選べばいいのかなと思ったのですが、
mainの代わりに_tmainというのがあったので、違うのかなと思ってましたが、気にしなくていいんでしょうか・・・?

あ、すみませんVisual C++ 2008 Express Editionをインストールしました
0077デフォルトの名無しさん2008/02/17(日) 21:34:49
_tmain はあんまり気にしなくていい。
消して問題ない。
0078デフォルトの名無しさん2008/02/17(日) 21:40:12
>>77
ありがとうございます、気にしないで進めることにします
0079デフォルトの名無しさん2008/02/18(月) 16:15:02
テンキーの+ボタンはVK_ADDフラグで取得出来るのですが、
ノートPC等でテンキーが付いてない場合、
+キーに相当するキーが押されたかを検出するには、
どのようししたら、良いでしょうか?

+
;れ

↑
このキーのフラグは?
0080デフォルトの名無しさん2008/02/18(月) 16:17:26
>>79
ノートPCでもFnキー併用とかNumLock併用でVK_ADDを発行すると思うけど。
0081デフォルトの名無しさん2008/02/18(月) 16:17:53
「;」か「シフトand;」ってわけじゃないの?
0082デフォルトの名無しさん2008/02/18(月) 16:23:19
それだったらフルキーボードでも使えるわけで、だとしたらVK_ADDでは当然拾えないのだけれど。
0083792008/02/18(月) 16:25:14
シフトを押されてなくとも、「;」が押されたら+を押したと解釈してあげたいのです。
case ';'では引っかからず、case -69で引っかけられました。
(デバッグモードでメッセージ見ました)
-69って一体・・・・?

case ';'で掛からないのが納得行きません。
0084デフォルトの名無しさん2008/02/18(月) 16:30:14
ちょっと待て、私のキーボードではShift+;は:なんだが。
つーか、Shift+=が+なんだが。
0085792008/02/18(月) 16:37:45
英語キーボード配列
とかいろいろありそうですね・・・
素直にShiftキー押してもらおうかな・・・
0086デフォルトの名無しさん2008/02/18(月) 16:38:40
つまり、ややこしいことに日本語キーボードでは';'キーはVK_OEM_PLUS(0xbb = -69)であり、
英語キーボードでは';'キーはVK_OEM_1になると。英語キーボードで'+'の刻印がある'='キーはVK_OEM_PLUSなんだけどね。
0087デフォルトの名無しさん2008/02/18(月) 20:48:31
これだな
#define VK_OEM_PLUS 0xBB // '+' any country
0088デフォルトの名無しさん2008/02/18(月) 21:07:33
c++にかぎったものじゃないんですが、
今ゲーム作っててマス移動の当たり判定なら変数でなんとかなるけど
ドット単位であたり判定作ろうとしたらどういう風に管理すればいいんですか?
0089デフォルトの名無しさん2008/02/18(月) 21:30:31
ドット単位で当たり判定もてばいいじゃない
1ドット1ビットで十分だが、面倒ならcharで取るとかな。
0090デフォルトの名無しさん2008/02/18(月) 21:31:50
あと、マップに属性もたせるならそれ相応のビット数が必要
0091デフォルトの名無しさん2008/02/18(月) 21:36:03
円形なら半径だけもっとけばいいし、
正方形なら角度も保持しとけばいい。
あとは数学的に判定。

範囲が極端に小さければ
マス移動と似た形で判定してもいいかもね。
0092デフォルトの名無しさん2008/02/18(月) 22:53:18
ちょっと質問です

cliext::hash_map<array<char> ^, int> って型を作りたいんですが、
比較演算子の定義の仕方がわかりません

一応、こんなのを比較演算子として予定してます

int compare(array<char> ^left, array<char> ^right){
 if (left->Length == right->Length){
  for(int i = 0; i < left->Length; i++){
   if (left[i] != right[i]) return left[i] < right[i] ? -1 : 1;
  }
  return 0;
 }
 return left->Length < right->Length ? -1 : 1;
}

どうすればいいんでしょう…
0093デフォルトの名無しさん2008/02/18(月) 23:59:51
STLと同じで、比較関数は基本的にlhs < rhsなboolを返すもの。
http://msdn2.microsoft.com/en-us/library/bb385779.aspx
あとは、hash_setのコンストラクタに比較関数へのデリゲートを取る奴があるから、そいつに渡す。
キーの型がoperator <が多重定義できるものなら、そっちを多重定義してもいけるはず。

ところで、hash_mapだけど、ハッシュ関数は気にしなくていいの?
デフォルトでは、GetHashValueが使われるけど、これもコンストラクタで指定できる。
ほかにも、ハッシュを使わず、比較関数だけで順序付けるsetもあるよ。
0094デフォルトの名無しさん2008/02/19(火) 20:23:07
>>93

Myhash_set c2 = cliext::greater<wchar_t>();
この部分ですよね

bool comp(array<char>^, array<char^>) の関数を渡してもエラーになるので、
定義の仕方が違うのかなと思ってるのですが…どうにも解りません
0095デフォルトの名無しさん2008/02/20(水) 23:43:01
質問です。
「点数のデータが入った1次元配列のアドレスと人数を受け取り、
それらの最大点〜(略)を求めて返す関数を作成する」

という問題なのですが、�@「〜を受け取り」、�A「〜返す」
とはどういう意味なのですか?
どうか教えていただけませんでしょうか
0096デフォルトの名無しさん2008/02/20(水) 23:51:09
引き数を受け取り、戻り値を返す。
0097デフォルトの名無しさん2008/02/21(木) 00:38:58
スケルトンを作るとするとこんな感じ。
int GetMaxPoint( const int * points, int num ) {
// 最大値検索処理
return max;
}
0098デフォルトの名無しさん2008/02/21(木) 00:44:33
「返す」とはreturn();の空白に数値などを入れることですか?
この問題ってサブルーチンを作るようなものですか?
0099デフォルトの名無しさん2008/02/21(木) 00:46:42
>>97
ありがとうございます。教科書で似たような処理を見つけたので
勉強します。
0100デフォルトの名無しさん2008/02/21(木) 02:23:15
うざい。VCと関係ないし。
0101デフォルトの名無しさん2008/02/21(木) 15:22:49
>>100
初心者にはそんなこと分かんねーんだよww
0102デフォルトの名無しさん2008/02/22(金) 14:01:27
CFormViewにピクチャーボックスを貼り付けて線を描画したものを
再描画する処理について質問です。

OnDrawで処理をするとなぜか、フォームのほうに描画されて、
その上にピクチャーボックスが貼り付けられる形になってしまいます。
ピクチャーボックスのプロパティのタイプでフレームと四角形とで
比べてみるとなんとなくそんな気がします。

CDC* pPIC=m_pict.GetDC(); //ウィザードでメンバ変数と作成
CRect rt;
m_pict.GetClientRect(&rt);
pPIC->MoveTo(0,0);
pPIC->LineTo(1000,1000);

細かいところは省略しています。

OnPaintで描くと正常に描画されるみたいですが、
そのとき、WinAPIの時みたいに
BeginPaint
EndPaint
とかの処理が必要なのでしょうか?必要だとしたら
BeginPaint
ShowGraph() //描画処理
EndPaint
と言うことも可能なのでしょうか?
0103デフォルトの名無しさん2008/02/22(金) 14:04:59
そのOnDrawはViewを描画するためのDCが来るからな
OnPaintはBeginPaintのあとOnDraw呼んでるだけだし。

何がしたいの?
PictureBoxに直接書けば再描画気にしないでいいよ
0104デフォルトの名無しさん2008/02/22(金) 14:05:20
>102
すいません、環境を描き忘れました。
なんとなく分かると思いますがMFCで
VC6.0です。OSはWinXP SP2です。
0105デフォルトの名無しさん2008/02/22(金) 14:09:06
>103
CPen で描いているのですが再描画しないとWindowの後ろに
隠れると消えます。
別の方法があるというのですか?

0106デフォルトの名無しさん2008/02/22(金) 14:27:57
オーナードロー使ってるのか、ビットマップでやってるのかどっち?
0107デフォルトの名無しさん2008/02/22(金) 14:35:55
viewとコントロールは別のウインドウだから描画は別
コントロールの描画のタイミングでやらないと
0108デフォルトの名無しさん2008/02/22(金) 14:51:14
Viewのほうで描画するのなら、オーナードローにして
WM_DRAWITEMで引数からHDC持ってきて描画するのがいいかなあ
0109デフォルトの名無しさん2008/02/22(金) 15:10:02
>108
今までCViewのほうばかり使っていたので、恥ずかしながら
オーナードローと言うこと自体知りませんでした。
今度はそれで検索して調べてみます。

0110デフォルトの名無しさん2008/02/22(金) 15:13:36
>107
クラスウィザードでピクチャーボックスのオブジェクトIDをクリックしても
BN_CLICKEDしか出ません。
根本的に考えていることが違うのでしょうか?
0111デフォルトの名無しさん2008/02/22(金) 15:27:53
>103
何がしたいのか書いていませんでした。
ただ単にピクチャーボックスにグラフを書きたいだけです。
>107
CStatocをサブクラス化しないと無理ということですか?
0112デフォルトの名無しさん2008/02/22(金) 15:28:38
>111
> CStatocをサブクラス化しないと無理ということですか?
CStaticです。すみません。
0113デフォルトの名無しさん2008/02/22(金) 15:43:30
FormViewってことはダイアログエディタ使ってんだよね。
まあサブクラス化でもいいけど、プロパティのタイプにオーナードロー(描画)って無い?
と思ってVC6を久しぶりに起動してみたら無いんだな。
0114デフォルトの名無しさん2008/02/22(金) 16:12:55
>113
ないですね^^
よそのホームページで調べたとおりにやったのですが。
0115デフォルトの名無しさん2008/02/22(金) 16:19:27
>113
ボタンならありますね。
0116デフォルトの名無しさん2008/02/22(金) 16:37:17
ちょっと試しにVC6で、rcファイルをテキストエディタで開いて、
SS_BLACKFRAME を SS_OWNERDRAW に書き換えて
OnDrawItem を作ったら動いたぞ。
まあこのやり方はどうなのか、という話もあるが。
0117デフォルトの名無しさん2008/02/22(金) 16:54:58
ボタンなんかと違ってわざわざオーナードローしてまで使うもんじゃないし
0118デフォルトの名無しさん2008/02/22(金) 16:56:34
VS2003以降はオーナードローあるからなあ
0119デフォルトの名無しさん2008/02/22(金) 16:57:59
ま、オレはいつもSTATICは場所の確保だけしてもらって
中は親のほうで書いてたけどな。
0120デフォルトの名無しさん2008/02/22(金) 17:13:26
>116
確かに動作したけど、再びリソースエディタで開くと
変な動作をしますね。確かに楽でいいと思うけど。
0121デフォルトの名無しさん2008/02/22(金) 17:17:05
>119
それはコントロールを自分でcreateして作ることですか?
0122デフォルトの名無しさん2008/02/22(金) 17:18:21
>>121
いや、どこに描くかの場所だけ取得
実際の描画はOnDraw()等でやる。

今回のはサブクラス化するのがいいと思うよ。
0123デフォルトの名無しさん2008/02/22(金) 22:10:49
>122
Createしたとき以外に成功したことがないです。
少しだけ具体例を挙げて欲しいのですがいいですか?
オーナー描画はViewのほうでするのですか?

ViewのほうのOnDrawItemで

if( lpDrawItemStruct->CtlType == ODT_STATIC &&
lpDrawItemStruct->CtlID == IDC_PCT ){

CDC* myDC=m_pict.GetDC();
CPict* pPIC=(CPict*)GetDlgItem(IDC_PCT);
CDC* myDC=pPIC->GetDC();
CRect rt;
pPIC->GetClientRect(&rt);
// m_pict.GetClientRect(&rt);
myDC->MoveTo(0,0);
myDC->LineTo(1000,1000);
}


IDC_PCTがピクチャーボックスのIDです。
CPicはCStaticをサブクラス化したものです。
//でコメントしている行のm_pictは、サブクラス化してない
普通のCStaticのメンバ変数です。
両方試してみました。

やはりOnPaint以外再描画されません。

0124デフォルトの名無しさん2008/02/22(金) 22:24:43
しかもリソースのプロパティのスタイルでフレーム以外
描画されないみたい。
0125デフォルトの名無しさん2008/02/23(土) 08:10:30
質問させていただきます。VisualC++.net 2005(C++/CLI)を使用してます。
生成されるEXEファイルのアイコンを変更したいのですが方法がわかりません。

IcoFXで16x16・24x24・32x32の3つのサイズを含む32ビットアイコンを用意しました
これをリソースエディタで読み込み、IDをIDR_MAINFLAMEに変更する方法を
試みましたが、用意したアイコンがリソースエディタに読み込めませんでした。
「警告:Visual Studioイメージエディタでは、32ビットカラーイメージをサポートしていません。
イメージを保存するときに、変更は破棄されます。」
リソースエディタを経由しないでEXEファイルのアイコンを変更する方法はありませんでしょうか?

よろしくお願いします。
0126デフォルトの名無しさん2008/02/23(土) 09:19:16
ビルドするだけ
0127デフォルトの名無しさん2008/02/23(土) 10:40:37
>121
サブクラスのほうでOnDrawItemを作ってやるというのは
分かったのですがうまくいきません。
他に注意すべき点とか有りますか?
0128デフォルトの名無しさん2008/02/23(土) 12:09:56
ここってマインスイーパーのプログラムの質問
してもいいんですかね?
0129デフォルトの名無しさん2008/02/23(土) 12:27:16
>>127
横レスです。
>>102まで戻って
枠外まで描画してしまうのはWNDCLASSのstyleに 'CS_PARENTDC' がついているから。
次の方法で枠内に描画できる。
1)CDC::IntersectCilpRect()で制限する。
2)CDC* pPIC=m_pict.GetDC(); を
 CDC* m_PIC=m_pict.GetWindowDC(); に変える。CWindowDCを使ってもいい。

MSDNフォーラムにも同様の質問が出ていて多少参考になるかも。
そこも理由をちゃんと理解してないようだけど…
↓
Visual C++ フォーラム
ピクチャーコントロールへの描画が、はみ出てしまいます
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=2756516&SiteID=7
01301292008/02/23(土) 12:33:11
ごめん、ちょっと紛らわしいので補足。
1),2)を順番に実行するという意味ではなく、
1),2)の内いずれか一つの方法を採用してという意味です。
0131デフォルトの名無しさん2008/02/23(土) 13:35:35
http://pastebin.windy.cx/?page=view&id=1203741161
これ,いわゆる多重継承の菱形継承なのですが,
なぜあいまいであるはずの変換演算子について
C2385 のエラーが発生しないのでしょうか?
Visual C++ 2008 Express Edition です.

33行目ではエラーになるのに39行目ではエラーになりません.
しかも二つある基底クラス D1,D2 のどちらの変換演算子が
呼び出されるかが宣言における継承の順序に依存しているのです.
変換演算子ではなく通常のメソッド Greeting については
あいまいである旨のエラー C2385 が出ます.
01321312008/02/23(土) 13:39:33
もしかしたら Visual C++ 2008 (vc9) のバグかもしれません.
g++ 4.1.3 ではエラーになりました.

test.cpp: In function ‘int main(int, char**)’:
test.cpp:33: error: request for member ‘Greeting’ is ambiguous
test.cpp:7: error: candidates are: void BaseClass::Greeting() const
test.cpp:7: error: void BaseClass::Greeting() const
test.cpp:39: error: request for member ‘operator const std::string&’ is ambiguous
test.cpp:17: error: candidates are: D1::operator const std::string&()
test.cpp:23: error: D2::operator const std::string&()
0133デフォルトの名無しさん2008/02/23(土) 13:52:16
菱形継承じゃないよ。単なる多重継承。

んで、39 でエラーにならないのは正直バグじゃないかと。
01341312008/02/23(土) 14:12:07
>>133 そうでした.菱形継承で作っているプログラムで気づいて
切り出してきたので頭がそういう風になってしまってました.
そもそも例示したコードの BaseClass って必要なかったです.

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=329756
レポートしておきました.
0135デフォルトの名無しさん2008/02/23(土) 14:15:50
>130
ありがとうございます。
枠に収まるように組んでいたので今まで気づきもしませんでしたが
そのように予防することができるのですね。 おそらくビットマップ
にして保存するときは見えない部分もそれで保存できると言うこと
ですか?
あと、CViewを引き継いでいるCFormViewで基本時に
OnPaintは使わないと言われていましたが、関数内に
コードを書かなくても宣言するだけでOnDrawが使えなくなる
とは思っていませんでした。
01361292008/02/23(土) 14:30:39
>>135
MFCスレの方とごっちゃにして答えてしまったみたいだ。
MFCスレの枠内に描画制限するのは上の解決方法でいいとして、
実はこっちのスレの回答にはなっていない。ごめん。

今VC6で確認したんだけど、
ピクチャーのタイプを'四角形'にしてCFormView::OnDraw()で描画すると
描画後にピクチャー自身のWM_PAINTで背景が塗りつぶされてしまっているよう。
もし背景色を変えたいとのことであれば
タイプは'フレーム'のままでOnDraw()内で
FillRect()で背景を自前で塗りつぶせばできる。
でもOnDraw()で無理矢理ピクチャーの位置に描画するより
皆が回答してくれた通りにした方がいいと思う。

> コードを書かなくても宣言するだけでOnDrawが使えなくなる
> とは思っていませんでした。

このあたりはCView::OnPaint()のソースを見ればわかるよ。
0137デフォルトの名無しさん2008/02/23(土) 15:25:23
>FillRect()で背景を自前で塗りつぶせばできる。

既にあきらめてそれをやっています^^
それってバグじゃない? とか思ったり。

>このあたりはCView::OnPaint()のソースを見ればわかるよ
他のホームページでだいたいのことは分かりました。
ソースも検索で見てみました。

CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);

いつもと違って誤ってOnPaintを作ってからOnDrawを
作って書いたのでひどい目に遭いました。

そこで便乗質問ですが、CView以外でOnPaint内で
CDCを使った場合、BeginPaintとかいるんですか?
CPaintDCならいらないと聞いたのですが。

0138デフォルトの名無しさん2008/02/23(土) 15:38:29
>136
> 皆が回答してくれた通りにした方がいいと思う。
オーナー描画、BitMap のうちどれですか?
オーナー描画もいろいろ調べたのですが、あきらめました。
BitMapも入門書ではピクチャーボックスではCDialogにですが、
OnPaintで再描画しているサンプルでした。
皆が進めるのはOnDraw OnPaint以外に書く方法ですか?
仮にサブクラス化したとして、どのタイミングで再描画
しているのでしょ?
0139デフォルトの名無しさん2008/02/23(土) 17:10:05
ごちゃごちゃ回りくどいことやらずに直接viewに書く
01401292008/02/23(土) 17:47:06
>>137
> CPaintDCならいらないと聞いたのですが。

これはCPaintDCのコンストラクタ・デストラクタを見ればわかる。

>>138
(1)オーナードローを使う。
 VC6ではダイアログエディタでオーナードローにできないのでコード上で
 CFrameView::OnInitialUpdate()あたりで
 m_pict.ModifyStyle(SS_TYPEMASK, SS_OWNERDRAW);でする。
 その後CFrameView::OnDrawItem()で描画処理。
(2)CWndやCStatic派生クラスのOnPaint()内で描画する。

簡単なのは(1)だと思うけど
グラフを書きたいとのことなので、
グラフをあちこちで使いまわすのなら(2)かな。
0141デフォルトの名無しさん2008/02/23(土) 18:52:00
スタティックコントロールは文字や図形を表示してくれるコントロールで、
これをオーナードローにしたら何もしないコントロールだけど
そんなものにわざわざコントロール使う意味ある?
0142デフォルトの名無しさん2008/02/23(土) 19:06:43
http://okwave.jp/qa2565794.html
ダイアログベースのexeで最適なグラフ表示方法 -OKWave
0143デフォルトの名無しさん2008/02/23(土) 21:01:29
>>141
描画だけじゃなくマウスのこととかも含めた
簡易的な位置決めツールにとしては働く。
一応独立したウィンドウなんだし。
0144デフォルトの名無しさん2008/02/23(土) 21:56:23
>140
ありがとうございます。
m_pict.ModifyStyle(SS_TYPEMASK, SS_OWNERDRAW);
ああ、これをやらないとダメなんですね。
元のFrameViewでよかったんですね。
確かに、コントロールとしての意味がなくなりそうなので

(2)のほうでやってみます。
Createまでする必要がないというのはよく分かりました。
いろいろと溜になる情報ありがとうございました。
0145デフォルトの名無しさん2008/02/24(日) 00:28:53
void CMine1View::DispMine()
{
CClientDC dc(this);
CBrush *oldBrush1,redBrush,*oldBrush2;
int iy,ix;
for(iy=2;iy<=Masu+1;iy++)
{
for(ix=2;ix<=Masu+1;ix++)
{
if(Mine_Position[iy][ix]==-1)
{
oldBrush1=(CBrush*)dc.SelectStockObject(WHITE_BRUSH);
dc.Rectangle(ix*Width,iy*Width,
ix*Width+Width,iy*Width+Width);
dc.SelectObject(oldBrush1);
redBrush.CreateSolidBrush(RGB(255,0,0));
oldBrush2=dc.SelectObject(&redBrush);
dc.Ellipse(ix*Width+5,iy*Width+Width+5,
ix*Width+Width-5,iy*Width+Width-5);
dc.SelectObject(oldBrush2);
redBrush.DeleteObject();
}
}
}
AfxMessageBox("地雷 踏みました!");
}

VC++6.0でマインスイーパーを作ってます
地雷がうまく表示されないのと地雷を踏んだ時にリセットされません
どこがおかしいのか教えてください
0146デフォルトの名無しさん2008/02/24(日) 00:36:42
>>145
一体何をリセットした積もりなの?
0147デフォルトの名無しさん2008/02/24(日) 01:02:49
>>146 プログラム組むの初めてでそれすらもわからないです
本を見ながらやったんですがうまくいかなくて
0148デフォルトの名無しさん2008/02/24(日) 01:14:07
Viewなのか、MFCってことだな。 んで、Documentは参照してないと。 
ど、どんな本みてんだYO!
0149デフォルトの名無しさん2008/02/24(日) 01:16:24
何をリセットしたつもりなのかもわからないのにリセットされないとどうやって判断したの?
少なくとも、「リセットされません」と言うからには何かを「リセットした積もり」なんじゃないの?
0150デフォルトの名無しさん2008/02/24(日) 01:28:37
リリースビルドをデバッグビルドにしてみたのですが、
なぜかブレイクポイントがヒットしなくなっていました
これを直すにはどうすればよいのでしょうか。
ちなみにncbファイルの削除というのはやってみました。
0151デフォルトの名無しさん2008/02/24(日) 01:30:53
>>148 MFCって書いてあります
>>149 地雷を踏んでログがでて最初の画面に戻るはずなんですが
0152デフォルトの名無しさん2008/02/24(日) 01:48:06
>>151
>145は何の関数か理解している?
少なくとも、「ログがで」たり「最初の画面に戻る」処理は書かれていないわけで。
そもそも、「地雷を踏んだ」かどうかの判定している関数でもないな。
0153デフォルトの名無しさん2008/02/24(日) 01:58:12
>>152 問題はここではないんですね
地雷の表示がうまくいかないのはここの部分であってますか?
0154デフォルトの名無しさん2008/02/24(日) 02:00:51
>>153
脳味噌にも皺伸ばししているのか?
地雷の表示はどうなってほしいのがどううまくいかないのかも説明できないなら寝た方がいいぞ。
0155デフォルトの名無しさん2008/02/24(日) 02:08:56
>>154
説明不足ですいませんでした
柵の真ん中に赤い丸で表示されるはずなんですが
実際は柵の下部分に半円で表示されるんです
0156デフォルトの名無しさん2008/02/24(日) 04:34:41
>>155
>dc.Ellipse(ix*Width+5,iy*Width+Width+5,ix*Width+Width-5,iy*Width+Width-5);
これあってるの?
0157デフォルトの名無しさん2008/02/24(日) 05:02:51
DSで動くソフトを作りたいんですけど
まず初めに何をすればいいんですか?
(´・ω・`)
0158デフォルトの名無しさん2008/02/24(日) 05:43:44
>>156
+5の方の「Width」がひとつ多かったです
直してビルドして確認してみたらちゃんと赤い丸で表示されました
赤い丸が表示されないという問題は無事解決しました ありがとうございました
0159デフォルトの名無しさん2008/02/24(日) 06:20:29
void CMine1View::OnButton1()
{
CClientDC dc(this);
CString ss;
int iy,ix,x,y,m_x,m_y;
Masu=8; MineKazu=0;
for(iy=0;iy<=Masu+1;iy++)
{
for(ix=0;ix<=Masu+1;ix++)
{
Mine_Position[iy][ix]=0; Mine_Pass[iy][ix]=0; Mine_Kazu[iy][ix]=0;
}
}
Width=30;
for(x=Width*2;x<=Width*10;x+=Width)
{
dc.MoveTo(x,Width*2);dc.LineTo(x,Width*10);
}
for(y=Width*2;y<=Width*10;y+=Width)
{
dc.MoveTo(Width*2,y);dc.LineTo(Width*10,y);
}
for(iy=0;iy<=Masu*3;iy++)
{
X=(int)((double)rand()/32767.0*Masu);
Y=(int)((double)rand()/32767.0*Masu);
X=(int)((double)rand()/32767.0*Masu);
Y=(int)((double)rand()/32767.0*Masu);
Mine_Position[Y][X]=-1;
Mine_Pass[Y][X]=-1;
Mine_Kazu[Y][X]=-1;
}
01601592008/02/24(日) 06:25:08
for(iy=2;iy<=Masu+1;iy++)
{
for(ix=2;ix<=Masu+1;ix++)
{
if(Mine_Kazu[iy][ix]==1)
{
MineKazu=MineKazu+1;
}
}
}
ss.Format("地雷の数は%d個です!",MineKazu); dc.TextOut(350,50,ss);
for(iy=2;iy<=Masu+1;iy++)
{
for(ix=2;ix<=Masu+1;ix++)
{
if(Mine_Position[iy][ix]==-1)
{
for(m_x=-1;m_x<=1;m_x++)
{
for(m_y=-1;m_y<=1;m_y++)
{
if(m_x!=0||m_y!=0)
{
if(Mine_Position[iy+m_y][ix+m_x]!=-1)
{
Mine_Position[iy+m_y][ix+m_x]=
Mine_Position[iy+m_y][ix+m_x]+1;
}}}}}}}}
起動した時に地雷の数を表示させたいのですが
表示は0のままでうまく表示出来ません
どこがおかしいのか教えてください
0161145.1592008/02/24(日) 06:26:48
>>145のマインスイーパーについての質問です
0162デフォルトの名無しさん2008/02/24(日) 08:08:41
>どこがおかしいのか教えてください
あんたの頭。
お願いだから寝てください。できれば永久に。

>Mine_Kazu[Y][X]=-1;
-1をセットしているのに
>if(Mine_Kazu[iy][ix]==1)
1を数えているじゃないか。
01631612008/02/24(日) 15:56:01
>>162 直したら地雷の数表示されました
ありがとうございます
0164デフォルトの名無しさん2008/02/24(日) 16:00:19
void CMine1View::OnLButtonDown(UINT nFlags, CPoint point)
{
CClientDC dc(this);
CBrush blueBrush,*oldBrush1;
CString ss;
int iy,ix;
iy=int(point.y/Width);
ix=int(point.x/Width);
if(2<=iy&&iy<=Masu+1&&2<=ix&&ix<=Masu+1)
{
blueBrush.CreateSolidBrush(RGB(0,0,255));
oldBrush1=dc.SelectObject(&blueBrush);
dc.Rectangle(ix*Width,iy*Width,
ix*Width+Width,iy*Width+Width);
dc.SelectObject(oldBrush1);
blueBrush.DeleteObject();
Mine_Pass[iy][ix]=-1;
if(Mine_Position[iy][ix]>=1)
{
ss.Format("%d",Mine_Position[iy][ix]);
dc.TextOut(ix*Width+10,iy*Width+5,ss);
Mine_Pass[iy][ix]=-1;
}
0165145.159.160.1642008/02/24(日) 16:00:56
else if(Mine_Position[iy][ix]==-1)
{
DispMine();
}
for(iy=2;iy<=Masu+1;iy++)
{
for(ix=2;ix<=Masu+1;ix++)
{
if(Mine_Pass[iy][ix]!=-1)
{
//goto saido;
return;
}
}
}
AfxMessageBox("おめでとう!クリアです!");
DispMine();
// saido:;
}
CFormView::OnLButtonDown(nFlags,point);
}
起動〜終了まで出来るようになったのですが
終了時にクリアのログの後に地雷を踏んだログが出てしまいます
どこが悪いのか教えてください
0166デフォルトの名無しさん2008/02/24(日) 16:09:00
>どこが悪いのか教えてください
あんたの頭。いい加減にしなさい。
0167デフォルトの名無しさん2008/02/24(日) 17:13:45
>>166 本当にわからないんです
自分の頭が悪いのはわかってます・・・
0168デフォルトの名無しさん2008/02/24(日) 17:19:07
ここにソースあるから
http://www.kohgakusha.co.jp/support/game_mfc/index.html
0169デフォルトの名無しさん2008/02/24(日) 18:04:19
>>167
何が悪いか判ってよかったな。つまり、あんたにはプログラミングは無理ってことだ。
0170デフォルトの名無しさん2008/02/24(日) 18:24:49
VC++でMFC使わずにWin32Appで書いてるんですが、
MFC覚えた方がいいですか?
仕事だとMFCとWin32Appはどっちが使われてます?
0171デフォルトの名無しさん2008/02/24(日) 19:12:09
MFC覚えたらかなり生産性あがるよ
0172デフォルトの名無しさん2008/02/24(日) 21:00:31
>>170
使えと言われたときのために軽くかじっておくのはいいと思う。
かじったことのない俺が言っても説得力0だけど。
0173デフォルトの名無しさん2008/02/24(日) 22:31:57
お勧めの入門書はありますか?
0174デフォルトの名無しさん2008/02/24(日) 23:34:28
VC++でEmacsキーバインドを使いたいのですが、
わざわざTabキーを入力しなければインデントしてくれません。
自動インデントをしてくれるようにする方法はありますか?

VC++のバージョン:
 Visual C++ 2008 Express Edition
現在の設定:
 ツール->オプション->環境->キーボード
  次の追加キーボードマップスキームを適用->Emacs
 ツール->オプション->テキストエディタ->C/C++->タブ
  インデント->スマート
  タブ->タブの保持
 後はおおむねデフォルトです。
0175デフォルトの名無しさん2008/02/25(月) 00:34:04
>173
MFCなら 10年前に買った、新Visual C++ 6.0 入門編 シニア編
かな?
0176デフォルトの名無しさん2008/02/25(月) 00:48:31
>>175
それって入門用には最悪だろ
0177デフォルトの名無しさん2008/02/25(月) 04:08:20
なぜSelectObjectは描画後とかに戻し作業が必要なんですか?
DeleteObjectもなくても動くんですがどういうことですか?

pDC->SelectObject(oldFont);
myFont.DeleteObject();
0178デフォルトの名無しさん2008/02/25(月) 06:43:45
戻し作業は不要だけど、状況によっては戻す必要がある。

DeleteObjectは必要だけど、なくても一応動く
ただDeleteObjectしてないように見えるけど、実際は見えない部分でやってる場合もある。

間違ったやり方をしているサンプルもあるし、
一見間違っているように見えて間違ってないサンプルもあるから
猿真似しかできないやつだと理解は難しい。
0179デフォルトの名無しさん2008/02/25(月) 07:19:13
MFC 使ってるならデストラクタで自動的に DeleteObject される。
myFont をローカル変数にしていた場合、
SelectObject で戻し作業をしてないと
登録しているオブジェクトを DeleteObject しようとしてしまう。

myFont がローカル変数でない場合は
状況によっては必ずしもすぐさま戻す必要は無いが、
最終的には戻す必要がある。
0180デフォルトの名無しさん2008/02/25(月) 09:56:18
MSDNのサンプルは戻さずに消してるよ

GRAPHICS\GDI\FONTS\FONTVIEW\STATUS.C

case WM_PAINT:
hdc = BeginPaint (hwnd, &ps);
GetClientRect (hwnd, &rect);

hBrush = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
border = rect;
border.bottom = border.top + cyStatusBorder;
FillRect (hdc, &border, hBrush);
DeleteObject (hBrush);

hBrush = CreateSolidBrush(GetSysColor(COLOR_BTNSHADOW));
border = rect;
border.top = border.bottom - cyStatusBorder;
FillRect (hdc, &border, hBrush);
DeleteObject (hBrush);

EndPaint (hwnd, &ps);
0181デフォルトの名無しさん2008/02/25(月) 10:10:24
あ、それselectしてないか
0182デフォルトの名無しさん2008/02/25(月) 11:32:29
ペゾ本読み返してみたら戻さなくていいが正解だった。
0183デフォルトの名無しさん2008/02/25(月) 15:01:06
つまり戻さないとどうなるんですか?描画し終わったらデリようが、戻そうがどうでもよくないですか?
0184デフォルトの名無しさん2008/02/25(月) 15:15:32
戻さないと消せない。
消さないとリソース消費が膨れ上がる。
ストックオブジェクトなら消す必要が無い
どの辺が疑問かわからん
0185デフォルトの名無しさん2008/02/25(月) 15:19:33
ローカル変数だと自動デリでアクセス違反起こすって事じゃないの
0186デフォルトの名無しさん2008/02/25(月) 15:20:25
まさにそれが聞きたかったんだ
ありがとう
0187デフォルトの名無しさん2008/02/25(月) 15:31:23
描画の時にその都度選択しないといけないのは
解放されてしまうからなんだよね
だから自分で元に戻さなくても大丈夫
0188デフォルトの名無しさん2008/02/25(月) 16:10:31
出したものは片付ける
0189デフォルトの名無しさん2008/02/25(月) 16:22:58
出した後は疲れて寝ちゃうからほったらかし
0190デフォルトの名無しさん2008/02/25(月) 17:06:07
>>185
アクセス違反は起きないよ。


SelectObjectされたままだとDeleteObjectが失敗するからどんどん溜まっていく。
使っているGDIオブジェクトの数はタスクマネージャでも確認できる。
・・・上限っていくつだろ?ググってみたがわからん。
0191デフォルトの名無しさん2008/02/25(月) 18:19:05
>>190
たぶん上限というのは9xで64KB, NTで標準1MBのやつ。
で、オブジェクト1個で何バイトだよって話になるんだけどね。
0192デフォルトの名無しさん2008/02/25(月) 19:39:37
このスレはペゾルド本読んでるやつ誰もいないのか?
戻さずに削除するやり方がちゃんと書いてあるだろ
0193デフォルトの名無しさん2008/02/25(月) 20:08:58
だったら書けよチンカス
0194デフォルトの名無しさん2008/02/25(月) 21:09:36
SelectObjectしたらいつまで有効?
毎回SelectObjectするのは何故?
0195デフォルトの名無しさん2008/02/25(月) 23:49:47
SelectObjectしたままほっとらかしておいて大丈夫な状況なら、ほったらかしにすれば宜しいかと。
0196デフォルトの名無しさん2008/02/27(水) 18:35:12
CButton* radio1=(CButton*)GetDlgItem(IDC_RADI01);
の(CButton*)この括弧ってなんなの?
ポイント関係の項目読んでも解説が出てこないんですけど!
0197デフォルトの名無しさん2008/02/27(水) 18:36:40
索引で「型キャスト」を調べるべし
0198デフォルトの名無しさん2008/02/27(水) 18:42:06
OK!!
0199デフォルトの名無しさん2008/02/27(水) 18:59:20
わかりました。
CButtonクラスにするポインタradio1にGetDlgItemで取り出したIDC_RADI01のアドレスをCスタイルキャストでポインタに強制変換していれてるんですね。
さっぱりわかりません
0200デフォルトの名無しさん2008/02/27(水) 19:05:23
やばいわかっちゃった
GetDlgItemで取り出したIDC_RADI01のアドレスをCButton型のポインタにしていれてるんだ!
0201デフォルトの名無しさん2008/02/27(水) 19:06:24
もうだめだ
0202デフォルトの名無しさん2008/02/27(水) 19:20:51
いやあってる!ありがとうございました!
0203デフォルトの名無しさん2008/02/27(水) 21:27:46
Visual Studio 2003 なんですが、
Foo.cpp タブの下に表示されている
クラスとメソッドを選択するバーを消す
方法を教えて下さい。
0204デフォルトの名無しさん2008/02/27(水) 22:04:16
何でRADI01(ラジ01)なんだろう。
0205デフォルトの名無しさん2008/02/27(水) 22:09:44
>>203
Visual Studio 2005 Part 23
http://pc11.2ch.net/test/read.cgi/tech/1196663772/l50
0206デフォルトの名無しさん2008/02/27(水) 22:34:55
CWnd* myPICT=GetDlgItem(IDC_PICT);
CClientDC myDC(myPICT);
は丸暗記するものなんですか?
それともここを理解しないと先は暗いですか?
0207デフォルトの名無しさん2008/02/27(水) 22:42:30
理解できてたらおぼえる必要ないだろ
忘れたら前に書いたコード探すだけだし
0208デフォルトの名無しさん2008/02/27(水) 22:43:58
暗記なんてするのは学校のテストだけですよ
0209デフォルトの名無しさん2008/02/27(水) 22:46:49
も、もしかして CWnd と CClientDCの構造体の中身から調べなきゃいけないんですか?
0210デフォルトの名無しさん2008/02/27(水) 22:47:05
いい加減こいつがうざくなってきた
0211デフォルトの名無しさん2008/02/27(水) 22:48:17
すいません二度と来ません
0212デフォルトの名無しさん2008/02/27(水) 22:48:44
さいならっきょ
0213デフォルトの名無しさん2008/02/27(水) 22:50:15
>>209
もし、その中身を知っていなきゃコーディングできないとするならばそんな関数があること自体おかしいと思わないか?
printfの実装なんぞ知らなくたって使えるだろ?
0214デフォルトの名無しさん2008/02/27(水) 22:59:42
MFC使っててCWnd知らないやつはいないだろうし
CDC使ったことがあったらCClientDCも使えるだろうし
02152032008/02/27(水) 23:20:28
>>205

載ってる?
行って探してみたけど無さそうだったよ。
そもそも、消す機能ついて無い気もしてきた。。
とりあえずあきらめよう。
Thx.
0216デフォルトの名無しさん2008/02/29(金) 00:56:57
VC++6.0なんだけど一行って何行まで書けるの?
2行に分けたい場合はどうするの?
0217デフォルトの名無しさん2008/02/29(金) 01:12:19
日本語でおk
0218デフォルトの名無しさん2008/02/29(金) 01:18:45
CやC++では、ただの空白やタブのみならず改行なども同じように区切りとして扱われる。
ようするに、だいたい改行したいと思ったところにただ改行を書くだけで大丈夫。

例えばVBのように行継続文字を書く必要はない。
それに相当するものはある(バックスラッシュを使う)のだが上記の理由で基本的に不要。
0219デフォルトの名無しさん2008/02/29(金) 02:45:29
すごくよくわかりました。ありがとうございました
0220デフォルトの名無しさん2008/02/29(金) 03:13:17
#defineとかは駄目だけどな
0221デフォルトの名無しさん2008/02/29(金) 09:39:47
長いリテラルを複数行に分けて書く
0222デフォルトの名無しさん2008/02/29(金) 10:15:08
ソースのことなのか実行結果のことなのかくらい書いたほうがいいけどなw
0223デフォルトの名無しさん2008/03/01(土) 18:33:50
みんなバージョンいくつ使ってるの?
0224デフォルトの名無しさん2008/03/01(土) 18:52:36
いまだに6.0が現役です
0225デフォルトの名無しさん2008/03/01(土) 20:00:21
>>216
>一行って何行まで書けるの?
一行でなくなったら一行ではなくなるではないか。
0226デフォルトの名無しさん2008/03/03(月) 09:48:08
つまり答えは一行には一行まで書けます、だな
0227デフォルトの名無しさん2008/03/03(月) 12:10:55
古谷一行に訊け
0228デフォルトの名無しさん2008/03/03(月) 20:52:04
一文字に何行書けますか?
という質問だろ、
文脈から判断せいや
0229デフォルトの名無しさん2008/03/03(月) 21:04:22
>>216
文字列なら
char *str = "abc"\
"def";
みたいな感じ
関数ならint hoge(int a,int b,
int c)
{}
みたいな感じ
0230デフォルトの名無しさん2008/03/03(月) 21:11:34
>一文字に何行書けますか?

・・・え?
一文って何行まで書けるの? じゃないのか?
0231デフォルトの名無しさん2008/03/03(月) 21:22:39
お前らC++の前に日本語習得してこいよ
0232デフォルトの名無しさん2008/03/03(月) 21:34:47
>>229
"で閉じているときは\は無くていいよ。↓でOK
char *str = "abc"
       "defg"
       "hijk";

閉じないなら\で繋げる。
char *str = "abc\
defg\
hijk";
(もっとも、この場合は行頭に桁揃えのスペースやタブを入れられなくなるが・・・)
0233デフォルトの名無しさん2008/03/05(水) 00:12:55
アウトプットウィンドウに表示されるテキストを右端で折り返すこと
はできないのでしょうか? 長いエラーメッセージが表示されたとき、
水平スクロールバーを使ってスクロールしながら読むのは骨が折れます。
Visual C++6.0です。よろしくお願いします。
0234デフォルトの名無しさん2008/03/05(水) 00:19:42
適宜改行しておけばいいんでね?
0235デフォルトの名無しさん2008/03/05(水) 00:24:39
改行って、どうやって改行するんですか? カーソルを置いて[Enter]を
押しても改行されませんよ。
0236デフォルトの名無しさん2008/03/05(水) 01:53:19
「右端で折り返す」オプションなかったっけ、2005にはあるが、、、
っと起動してみたがみつからんなあ、長年つかってなかったからよーわからん
ヘルプもうまく出んな
0237デフォルトの名無しさん2008/03/05(水) 01:55:09
>>235
出力時にですがな。
0238デフォルトの名無しさん2008/03/05(水) 02:12:24
>>237
>235が言ってるのはビルドエラーだよ?
コンパイラのコードをいじれと?
0239デフォルトの名無しさん2008/03/05(水) 02:26:33
んが? 自分で出したエラーメッセージじゃないの?
そら失礼。
0240デフォルトの名無しさん2008/03/05(水) 06:53:06
ちんちん!
0241デフォルトの名無しさん2008/03/05(水) 12:35:45
ちんちんの後でつらいですが、
int a[10];
の a[10] 以降の配列にデータを入れ続けた場合の被害は、最悪プログラムの強制終了だ。と上の方に書いてありましたが本当ですか?
なんか最近OS起動後すぐにWindousのプロセスが強制終了しだしたんですが、
自分のアプリ外のメモリ領域は保護してくれるぐらいの機能はあるんですよね?VC++6.0なんですけど。
0242デフォルトの名無しさん2008/03/05(水) 13:10:14
>>241
ttp://www.kumei.ne.jp/c_lang/intro/no_22.htm

動かない事はないけどメモリアドレス関係のバグは命取り
0243デフォルトの名無しさん2008/03/05(水) 13:27:14
メモリの保護はOSの役目なのでVC++とか関係ないです。
0244デフォルトの名無しさん2008/03/05(水) 14:06:06
test
B?ng
0245デフォルトの名無しさん2008/03/05(水) 21:34:33
質問です.VC++2005を使用しているのですが
LPSTR型の文字列をchar str[200]に代入したいのですが可能でしょうか?

0246デフォルトの名無しさん2008/03/05(水) 21:44:28
typedef CHAR * LPSTR;
だから
0247デフォルトの名無しさん2008/03/05(水) 21:51:04
strncpy 使わないとな。
0248デフォルトの名無しさん2008/03/06(木) 01:15:44
Visual C++ 2008 Express Editionを使ってるんですけど、プロパティバインディングって使えないんでしょうか?
適当なコントロールを選んで、プロパティのApplicationSettings->PropertyBindingの...をクリックし、バインドしたいプロパティを選んで新規を押し、
項目を入力してOKを押すと「設定ファイルがプロジェクトに見つかりません。設定ファイルを追加して、再試行してください。」と出ます。
(プロジェクト名).config, (プロジェクト名).exe.config, App.config, config.xml, (プロジェクト名).xmlといろいろ追加してみましたが結局出来ませんでした・・・。

どうすればいいものかと途方にくれてます。。
0249デフォルトの名無しさん2008/03/06(木) 18:19:22
大きなダイアログのタブオーダーの設定をしている最中に
スクロールバーでダイアログを動かすと
次にクリックした位置がオーダー1に戻ってしまうのですが、
これってVC2005のバグなのでしょうか?
こういう場合、どのようにしてタブオーダーを設定すればよいでしょうか。
0250デフォルトの名無しさん2008/03/06(木) 18:48:33
>>249
http://msdn2.microsoft.com/ja-jp/library/csz6b8x8(VS.80).aspx
Ctrlを押しながらクリックすれば途中から設定できるはず

それかホイールマウスでスクロールする。
0251デフォルトの名無しさん2008/03/06(木) 18:57:09
>>250
> Ctrlを押しながらクリックすれば途中から設定できるはず

スクロールした後にコントロールをCtrl+クリックすると、
そこが新たな基準点になるだけで、
そのコントロール自体のタブオーダーは変更されないのです。

> それかホイールマウスでスクロールする。

ホイールを回してもスクロールしないのですが、
これはなにかの設定に依存するのでしょうか?
0252デフォルトの名無しさん2008/03/06(木) 19:06:18
>>251
スクロールした後で一つ前のコントロールをCtrl+クリックして基準点として
それ以降を設定すればいいのでは?

ホイールスクロールはマウスユーティリティによるものかも。
0253デフォルトの名無しさん2008/03/06(木) 19:24:22
>>252
何度もすみません。

> スクロールした後で一つ前のコントロールをCtrl+クリックして基準点として
> それ以降を設定すればいいのでは?

その1つ前のコントロールと次のコントロールが
今のPC上のVS2005ではダイアログエディタ内に収まらないんです。

手前のコントロールをクリック
↓
次のコントロールへスクロール
↓
そのコントロールをクリック

という流れなのですが、ここで通常クリックだと1に戻ってしまい、
Ctrl+クリックだと手前のコントロールのコントロール+1になりません。
0254デフォルトの名無しさん2008/03/06(木) 19:41:11
>>253
なら、一時的に周りの余計なツールウィンドウを全て閉じて編集するとか。

それでもだめならリソーススクリプトを直接編集するしかないかもね。
タブオーダーの順に上から記述されてるからコピペで並び替え。
0255デフォルトの名無しさん2008/03/06(木) 19:52:40
>>254
rcファイルを直接編集して並び替えられました。
ありがとうございます。
0256デフォルトの名無しさん2008/03/06(木) 20:18:54
OS:XP SP2
開発環境:VS2005

CDaoDatabaseを使用してDBにアクセスしています
select * from WORK_TABLE WHERE ''='' ORDER BY test
はきちんと検索結果が帰ってくるのですが
select * from WORK_TABLE WHERE ''='' ORDER BY convert(integer,test)
に変更するとエラーが発生します。

なにが問題か分かる方いましたらご教授をお願いします。


02572562008/03/06(木) 20:58:01
追加情報です。

select * from WORK_TABLE WHERE ''='' ORDER BY cast(test as integer)
でもダメでした。

デバッグモードで起動し、エラーをキャッチした箇所でとめてエラー内容を見ると
convertでは「式に未定義関数 'convert' があります。」
castでは「クエリ式 'casttest as integer)' の 構文エラー : 演算子がありません。 」
というエラーが設定されています。
0258デフォルトの名無しさん2008/03/06(木) 21:24:31
プロジェクトのフォルダの中にある.hと.cppファイルの中で、
実際にはプロジェクトに参加してない無駄なファイルを見つけ
て削除したいのですが、効率良くやるにはどうすればいいで
しょうか? Visual C++6.0です。
0259デフォルトの名無しさん2008/03/06(木) 22:16:50
dspを開いて、\.h|\.cppをgrepする。
あとはそのファイルだけcopyするような
バッチにでも変換すれば。
プロジェクトにないけどincludeされている連中は死ぬけど。
0260デフォルトの名無しさん2008/03/06(木) 22:29:32
いつまた使うようになるかわからないのであった
0261デフォルトの名無しさん2008/03/06(木) 22:38:41
>>257
> convertでは「式に未定義関数 'convert' があります。」
convertが使えない環境

> castでは「クエリ式 'casttest as integer)' の 構文エラー : 演算子がありません。 」
castとtestの間に(を入れ忘れ。
でも、入れたとしてもcastが使えない環境だったら
未定義うんぬんのエラーが出るだろう。
0262デフォルトの名無しさん2008/03/07(金) 01:03:24
WIN32とかSTLとかMCFとかATLとかCRTの違いがよくわからないのですが
これらは全てVC++のことを言ってるのでしょうか?
また、これらの違いがよくわかるHPとかありませんか?
0263デフォルトの名無しさん2008/03/07(金) 01:23:57
> WIN32とかSTLとかMFCとかATLとかCRT
どれも1種のライブラリ。どれもVisual C++から使えることに違いはないが、
誰が何のために制定したかが違う。
0264デフォルトの名無しさん2008/03/08(土) 06:44:14
int (*p)[4] = new int[3][4];
は
int *p = new int[3][4];

じゃだめなんですか?[4]をつける意味無くないですか?
0265デフォルトの名無しさん2008/03/08(土) 09:19:40
>>264
そう思うのなら試して味噌。
0266デフォルトの名無しさん2008/03/08(土) 09:21:45
>>264
内部の動作を想像する能力が必要だ
0267デフォルトの名無しさん2008/03/08(土) 09:59:42
int (*p1)[4] = new int[3][4];
p1[1][2] = 400;
cout << p1[1][2];

わかりません。(*p1)[4]を日本語にしてくださいお願いします。






0268デフォルトの名無しさん2008/03/08(土) 10:36:52
p1はint型の配列(要素数4)を指すポインタ

int (*p1)[4] = new int[3][4];
はint型の配列(要素数4)を3つ作ってて、p1はその先頭を指している。

以下と対比するとわかりやすいかも。
int* p2 = new int[3];

掲示板では分かりやすい説明は難しいと思われるので、
どうしても知りたければ「Cプログラミング専門課程」の多次元配列の項を読むこと。
0269デフォルトの名無しさん2008/03/08(土) 10:42:34
Cスレでやれ馬鹿
0270デフォルトの名無しさん2008/03/08(土) 11:30:20
ごめんなさい
0271デフォルトの名無しさん2008/03/08(土) 11:56:58
だめだ [4] がなんでだぶってるのかイメージできない。CとC++シニア編の多次元配列とポインタ読んでもわからない。やばすぎる
0272デフォルトの名無しさん2008/03/08(土) 14:10:46
p1 += 1; // アドレスが 16増える -> typeof(p1) == int*の要素4つの配列 
p2 += 1; // アドレスが 4増える -> typeof(p2) == int*
0273デフォルトの名無しさん2008/03/08(土) 15:23:46
Visual C++ 2005 or 2008に関する質問です。
作成したプログラムにてCtrl+Fにより検索フォームを表示したいのですが
どのようにすればいいのでしょうか。
また下記のように検索関数をC++で書いたのですが機能しません。
どのように変え組み込んでいけばいいのでしょうか?
機能的にはCtrl+Fを押されたときに検索フォームが表示され、
その中で検索ボタンを押せば検索が実行される。
つまり検索ボタンに下記のようなプログラムを組み込みたいのですが・・・。

string str;
string buffer;
size_t found;

ifstream fin(argv[1]);

if(!fin){
cout<<"読み込みファイルオープンエラー";
exit(0);
}

cout<<"文字列を入力してください";
cin>>str;

while(fin>>buffer){
found=buffer.find(str);
if(found!=string::npos)cout<<buffer;
}

fin.close();
0274デフォルトの名無しさん2008/03/08(土) 15:37:52
アクセラレータにCtrl+Fを定義
呼ばれたら検索フォームを表示するだけ
0275デフォルトの名無しさん2008/03/09(日) 00:33:39
Visual Studio.NET 2003を使っているんですが、
ソリューションエクスプローラのフォルダ構成を
ローカルのフォルダ構成と同期させることってできないでしょうか?

現在ソースファイルを追加するときは、
ソリューションにフォルダを作って、ローカルに同名のフォルダを作って、
「新しい項目の追加」をしてるんですが、
二度手間だし、フォルダ名を変えたくなったときに面倒です。
0276デフォルトの名無しさん2008/03/10(月) 00:24:34
openFileDialogでファイルのパス名を取得したいのですが、実行ファイルと違うフォルダのファイルを選択した場合動作がおかしいです。

・・・(openFileDialogのインスタンス生成等)
if (ofd->ShowDialog() == System::Windows::Forms::DialogResult::OK) {
  String^ s;
  try {
   s = ofd->FileName::get();
  } catch(...) {
   Console::WriteLine("catched");
  }

  System::IO::StreamWriter^ sw = gcnew System::IO::StreamWriter("out.txt");
  sw->WriteLine(s);
  sw->Close();
}

こんな感じでパス名をout.txtに出力するテストコードを作ったのですが、実行ファイルと別のフォルダの
ファイルを指定すると、out.txtが作られません。
でもデバッガで見るとsにパス名は入ってるようですし、セキュリティ例外?ってやつかなと思ってcatchブロック増やしてみても
catchしてないみたいでよくわかりません。

環境はVisual C++ 2008のWindowsフォームアプリケーションです。
0277デフォルトの名無しさん2008/03/10(月) 00:46:32
その指定したフォルダにout.txtが作られていないか?
ファイルを開くダイアログはカレントディレクトリを変更する副作用があったはず。
カレントディレクトリに置きたいなら、このダイアログを開く前に予め記憶しておけばいいし、
実行ファイルのある場所に置きたいのなら、
Application::ExecutablePathから加工して実行ファイルのあるディレクトリを切り出しておけばいい。

あと、swはSystem::IO::StreamWriter sw("out.txt");と書け。そしてsw.Write(s);とする。
こうするとClose(正確にはDispose)が自動的に呼ばれる(例外で抜けるときでも)。
これを使わないのはC++を使う意味がない。
02782762008/03/10(月) 02:24:15
>>277
あ。。。。
おっしゃる通りでした。
こんな初歩的なことを忘れていたとは、、申し訳ないです。

C++/CLIって全部ハンドル型でやればいいやって思ってたんですけど、違うんですね。
もう一度勉強してきます。
どうもありがとうございました。
0279デフォルトの名無しさん2008/03/10(月) 02:38:01
openFileDialog で使われているだろう
GetOpenFileName / GetSaveFileName API は
カレントディレクトリを変更してしまう
0280デフォルトの名無しさん2008/03/10(月) 05:35:24
ビルドの中止が出来ないのですが、どうすればいいのですか?
0281デフォルトの名無しさん2008/03/10(月) 07:25:11
Ctrl + Break
0282デフォルトの名無しさん2008/03/10(月) 08:40:27
>>281それをやってもダメなんです…
0283デフォルトの名無しさん2008/03/10(月) 09:10:09
いきなりは止まらんぜ?テキトーにいえばVCにとってきりのいいところでストップする。
0284デフォルトの名無しさん2008/03/10(月) 10:53:01
}付け忘れただけで中止が効きませんずっとです
0285デフォルトの名無しさん2008/03/10(月) 11:19:09
そのソースを晒せ。
0286デフォルトの名無しさん2008/03/10(月) 11:20:14
再インストールだな
0287デフォルトの名無しさん2008/03/10(月) 12:44:49
VC++6.0を再インストールする場合はまた6.0>2005>2008の順番でインストールしないとまずいですか?
0288デフォルトの名無しさん2008/03/10(月) 13:17:35
何故そんなにも闇雲にインストールしたがる。
VC6なんてもう要らないだろうし、2008が入っているなら2005を入れる必要もないだろ。
縦しんばVC6が必要なら、VC6をインストールして関連付けだけ直せば済みそうだが。
0289デフォルトの名無しさん2008/03/10(月) 14:05:56
>>286
VC6は、販売期間と.net移行前の最終リリースだけあって結構それで作られたソフト多いからねぇ
いまさら、VC6で作ることは無いにしてもメンテで必要になる可能性は多いよ
俺のPCは今でも3.1とのデュアルブート環境だし
0290デフォルトの名無しさん2008/03/10(月) 14:14:31
>>289
メンテで必要になるくらいなら、OSごとVC6環境を静態保存するだろ。常考
0291デフォルトの名無しさん2008/03/10(月) 14:53:25
だからビルドの中止はそのオブジェクトのコンパイルが終了した時点だって。つまりcl.exe(だっけ?)が終了した時点。
でかいソースにオブジェクト分割もせずにズラズラと書いてればすべてのコンパイルが終了するまで中止できない。
0292デフォルトの名無しさん2008/03/10(月) 16:53:48
VC++2008を使用しているのですが、console.hをインクルードする為のコンソールAPIはどうやって追加するんですか?
0293デフォルトの名無しさん2008/03/10(月) 20:15:39
console.hなんて聞いたことないけど、
<windows.h>や<conio.h>は違うの?
0294デフォルトの名無しさん2008/03/10(月) 20:55:38
VC++6はVistaでも動きますか?
0295デフォルトの名無しさん2008/03/11(火) 10:07:33
>>293
コンソールAPIの使用法がいまいち解らないんで……。
ネットで検索しても、どのヘッダーファイルをインクルードするのか詳しく書かれておらず、console.hなるものを見つけたんですが、VC++2008にはそれらしいのがなくて……。
0296デフォルトの名無しさん2008/03/11(火) 10:23:31
console.hなんてVC6にもないよ
0297デフォルトの名無しさん2008/03/11(火) 12:10:33
やりたいことを書いたほうがいい。
やりたいことを探してるうちに、console.hの存在を知り
それを探す/使うのが目的になっちゃってないか?
0298デフォルトの名無しさん2008/03/11(火) 14:36:55
>>296
そうなんですか……。

>>297
あ、いえ、やりたいことはあるのですが、それを成すにはコンソールAPIがないと出来ないと思ったんです……。
コンソールで文字位置、色を変えたり。それで方法を探してた結果、検索で出てきたのがconsole.hなんです。


0299デフォルトの名無しさん2008/03/11(火) 14:42:34
いやだから、コンソールAPIはwindows.hのincludeで使えるよ。
そのconsole.h とやらはどこで出てきたの?
unix系なら sys/console.h とかあるし、CEにもそれらしいのあるけど
その console.h のインクルードは、 <console.h> なのか?
"console.h" ならそこのローカルなファイルだぞ。
0300デフォルトの名無しさん2008/03/11(火) 14:53:33
すみません。
console.hはC言語のサイトからです。
ttp://www.plustarnet.com/aspil/Programming/CConsole.htm

"console.h"です。

>>いやだから、コンソールAPIはwindows.hのincludeで使えるよ。
そうなんですか・・・。
0301デフォルトの名無しさん2008/03/11(火) 15:55:01
ttp://www.plustarnet.com/aspil/Programming/console00.htmに
>これらの API を簡単に使って頂く為に、CConsole クラス として、一つのクラスにまとめてみました。
って思いっきり書いてるじゃねーか。
このHPの作者が、処理しやすいようにクラス化したってことでしょ
0302デフォルトの名無しさん2008/03/11(火) 16:43:29
>>301
いろいろすみません……ありがとうございます。
そして申し訳ないです。。

VC++2008に<windows.h>をインクルードするには何か追加が必要なんですか?

0303デフォルトの名無しさん2008/03/11(火) 16:49:40
ほらきたきた
0304デフォルトの名無しさん2008/03/11(火) 16:52:07
>VC++2008に<windows.h>をインクルードする
VC++以前の問題で基本が分かってないから、入門書読んできなさい。
0305デフォルトの名無しさん2008/03/11(火) 16:54:10
VCの入門書でもAPIの入門書でもなくC言語の入門書な。
0306デフォルトの名無しさん2008/03/11(火) 16:55:11
これは初心者の俺から見ても痛い。

何が痛いかって、行動が
0307デフォルトの名無しさん2008/03/11(火) 16:55:32
>>302
Cは初めてか?力抜けよ。

console.h使いたいなら、そのサイトのページまるまるコピーしてconsole.hというファイル名で
セーブすりゃいいし、

>>301のコードをconsole.h無しでやるなら
#include <stdio.h>
#include <windows.h>

int main(int argc, char* argv[])
{
COORD coord;
HANDLE hConsoleStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

printf("012");

coord.X = 3;
coord.Y = 1;
SetConsoleCursorPosition(hConsoleStdOut, coord);

printf("345");
return 0;
}
とかやればいい
0308デフォルトの名無しさん2008/03/11(火) 17:06:53
すみません。ありがとうございます。
出直します。
0309デフォルトの名無しさん2008/03/11(火) 17:32:16
VisualC++ 6.0でログ出力画面を作成しようとしています。

1.外から1行分ずつデータが常にとばされてくる
2.スタートボタンとストップボタンを用意し、スタート押下時からストップ押下時
  までの間のみ、画面に出力する
4.出力中はTeratermでtail -fをしたように、新しいログがくればスクロールしていく
  (上限を超えたら古いものから削除)
5.画面上のログは範囲選択でき、クリップボードにコピペや
  名前をつけて保存ボタンによるファイル出力を可能とする

以上の内容を作るにあたり、参考になるサイトはないでしょうか?
VBをさわったことはあるんですが、VC++は初めてで、GUIやクラスの使い方から
結構つまづいています。
0310デフォルトの名無しさん2008/03/11(火) 17:47:59
>>309
つまりC++でのウィンドウズプログラミング入門だな。「猫でも」とかどうぞ。


しかし今VC初めてなのにVC6ってのが不思議。
0311デフォルトの名無しさん2008/03/11(火) 18:36:28
ハノイの塔で再起なんたらの項目なんですが、これ頭で最後までたどれる人いますか?板の数は3です
これできないレベルだとこの先勉強する価値が脳にありますか?
0312デフォルトの名無しさん2008/03/11(火) 18:46:12
遊びでC++やるとしても4本までは図に描かなくても最初からできないと結局ポインタも使いこなせないだろうしやめた方がいいよ
自分の出来る事でがんばるんだ。あきらめよう
0313デフォルトの名無しさん2008/03/11(火) 18:55:39
学校じゃ教えてくれないすばらしいレスだ
0314デフォルトの名無しさん2008/03/11(火) 20:09:21
ソフトからtxtやhtmlのファイルの開くのを
vcでやるのはどういう関数を使えば良いですか?
0315デフォルトの名無しさん2008/03/11(火) 20:24:10
日本語でおk。たぶんsystemで事足りる。
0316デフォルトの名無しさん2008/03/11(火) 20:27:55
>>312
たしかに思考の階層の深さってのは努力ではどうしようもない
能力で稼ぐ業界だからまず社会で戦えないだろうし、遊ぶならベーシックのほうが楽しい
スレタイが初心者ってなってるからって勘違いして雑魚がたまに来るのが痛い
0317デフォルトの名無しさん2008/03/11(火) 20:31:50
よく入門書のハノイの塔がうんたらとか言うけど
そういうの載ってる本みたことないんだが
0318デフォルトの名無しさん2008/03/11(火) 20:35:57
>>317
再帰関係かアルゴリズム関係でググればすぐ見つかる。
0319デフォルトの名無しさん2008/03/11(火) 21:25:33
>309
Teratermのソース持ってるから見てみればいい
0320デフォルトの名無しさん2008/03/11(火) 21:29:04
>>311
東急ハンズなどで売っているから手に取って試してみたら?
0321デフォルトの名無しさん2008/03/11(火) 21:30:24
>>309
「Teratermでtail -f」じゃなくて、Unix系OSでtailコマンドを使っただけだろ。
Cygwinでも入れて使うか、tailのソースでも探してきたら?
0322デフォルトの名無しさん2008/03/11(火) 21:39:05
TeratermはMFCなのか
今まで使ってて気がつかなかった
0323デフォルトの名無しさん2008/03/11(火) 22:51:41
>>321
すれ違いだし、>>309 の方がまともなこと言ってるし。

要するに、巣に帰れと言うことだ。
0324デフォルトの名無しさん2008/03/12(水) 05:39:15
質問です
VS.NET 2003 で Visual C++ を使用しているのですが、
みなさんは、普段完成品をリリースするときに、最適化のオプションはなにを選びますか?
0325デフォルトの名無しさん2008/03/12(水) 06:26:00
特に遅くないからまったく気にしたことない。
0326デフォルトの名無しさん2008/03/12(水) 07:59:06
普段意識しないが、最適化するとはまることがあるので、最適化しないようにする方が吉なのかも。
0327デフォルトの名無しさん2008/03/12(水) 08:04:52
アホかい。
0328デフォルトの名無しさん2008/03/12(水) 08:14:57
VCで作られたバイナリは、少なくともどのくらい古いCPUで動くんですか?486?
逆に言うと、cmov*とか使わないんですか?
0329デフォルトの名無しさん2008/03/12(水) 10:25:51
コンソールアプリでもdosで起動した16bitモ−ドじゃ動かない
0330デフォルトの名無しさん2008/03/12(水) 11:51:30
>>328
コンパイラのオプションで選べた気がする
0331デフォルトの名無しさん2008/03/12(水) 12:12:25
>>309
外から飛ばされてくる部分についてはどういう仕組み?
それによってはVBで別アプリとして作ったものを利用するというのも出来そうだが
0332デフォルトの名無しさん2008/03/12(水) 15:51:27
VC++2008を使い始めたのですがEclipseでの[Ctrl]+[I]のようなインデント修正機能ってありますか?
0333デフォルトの名無しさん2008/03/12(水) 16:50:57
Eclipse知らんけど
Ctrl + K , Ctrl + F
だろうか?
0334デフォルトの名無しさん2008/03/12(水) 17:47:26
独習C++の第5章の理解度チェック8の問題で思い切り恥じかいた。
解答が間違ってるじゃん。
0335デフォルトの名無しさん2008/03/12(水) 17:49:43
連投ですまんが、まあ俺が未熟だというのも問題なんだがな。
でも間違った解答を載せるなよ(怒)
0336デフォルトの名無しさん2008/03/12(水) 18:04:15
『独習C++ 第3版』正誤表 1刷(26件)
0337デフォルトの名無しさん2008/03/12(水) 18:23:36
http://seshop.com/book/errata/Default.asp?mode=detail&pid=3236&printno=1&pageno=all

26件中13件は、15刷で修正
0338デフォルトの名無しさん2008/03/12(水) 19:01:14
F5でデバッグするときに確認画面が出なくなってしまいました
どうすれば今まで通り確認画面が出るようになりますか?
0339デフォルトの名無しさん2008/03/12(水) 19:02:59
確認画面ってなんだよ
0340デフォルトの名無しさん2008/03/12(水) 19:22:20
「ビルドしますか?」ってやつか? チェック入れると次から出なくなるからかな。 解決方法は分からないが。
0341デフォルトの名無しさん2008/03/12(水) 19:36:01
>>340
それです
0342デフォルトの名無しさん2008/03/12(水) 19:36:55
再インストール
0343デフォルトの名無しさん2008/03/12(水) 19:57:50
ツール
> オプション
> プロジェクトおよびソリューション
> ビルド/実行
0344デフォルトの名無しさん2008/03/12(水) 22:46:39
ちょっと今ネット環境がなくて調べられないんで携帯から質問です

doubleの中身をchar型に変換するにはどうしたらいいですか?

コンソールではprintfで%fを指定すれば勝手に小数点以下6位まで表示されますよね?
wsprintfではできなくて困ってます

wsprintfでchar型にし、ダイアログのスタティックテキストに表示したいんですが、
double型だけどうしても分かりません
0345デフォルトの名無しさん2008/03/12(水) 22:49:51
wsprintfではできない
0346デフォルトの名無しさん2008/03/12(水) 22:53:39
swprintf ではダメなのか?
wsprintf じゃないとダメな理由があるのか?
0347デフォルトの名無しさん2008/03/12(水) 22:54:19
そうだったんですか;

何を使えば小数点以下を表示出来るでしょうか?
0348デフォルトの名無しさん2008/03/12(水) 22:55:57
StringCchPrintf
0349デフォルトの名無しさん2008/03/12(水) 23:21:57
できました!
早いお返事ありがとうございます。
0350デフォルトの名無しさん2008/03/13(木) 15:44:50
VisualC++ 6.0のファイルの展開で質問です。

ビルドして出来た実行ファイルを色んなPCで起動してみたところ
エクスプローラーのアイコンの表示を縮小版にしていると
何故かfopenやcreatefileといったファイルを開く関数が失敗しました。
一覧や詳細の表示ならば問題なく動きました。

また、表示を縮小版にしていてもVisualC++ 6.0から実行した場合は
関数で失敗することはありませんでした。
表示を縮小版にしなければ問題ないのでしょうが、
原因がわからないのも気味が悪いので、分かる方いましたら教えてください。
0351デフォルトの名無しさん2008/03/13(木) 17:05:13
エクスプローラがサムネ作るためのファイルアクセスと衝突してるんだろ
0352デフォルトの名無しさん2008/03/13(木) 21:04:59
フリーウェアでメニューからヘルプを選択するとマニュアル.htmが
開くソフトがありますが、あれはどのような関数を使ってますか?
IE.exeを起動するのは出来ますがIE.exe起動とマニュアル.htm
の結び付け方が分かりません。
0353デフォルトの名無しさん2008/03/13(木) 21:24:32
拡張子
03543522008/03/13(木) 22:08:57
自己解決すますた。
0355デフォルトの名無しさん2008/03/14(金) 10:24:41
>>351
なるほど・・・ありがとうございます。
それではこの場合、どうすればファイルを開くことができるのでしょうか?
0356デフォルトの名無しさん2008/03/14(金) 12:31:22
VisualC++ 6.0を使用したいんですが有料ですか?
またどこで手に入りますか?
0357デフォルトの名無しさん2008/03/14(金) 12:38:11
http://www.microsoft.com/japan/msdn/subscriptions/
すでに販売終了してるけどサブスクライバダウンロードで入手可能
0358デフォルトの名無しさん2008/03/14(金) 13:00:56
ありがとうございます
早速ダウンロードさせてもらいます
0359デフォルトの名無しさん2008/03/14(金) 13:06:39
金持ちだな
0360デフォルトの名無しさん2008/03/14(金) 13:47:54
http://www.microsoft.com/downloads/details.aspx?FamilyId=A8494EDB-2E89-4676-A16A-5C5477CB9713&displaylang=ja
0361デフォルトの名無しさん2008/03/14(金) 14:06:51
>>355
衝突しないような共有モード指定するとか、オープンできるまでリトライするとか。
0362デフォルトの名無しさん2008/03/14(金) 20:14:00
VisualC++ 2005を起動しようとすると、問題が発生しましたと出て強制終了してしまいます
そこで新しく2008を入れて始めてみたのですが、途中から同じような症状になりました。どうしたらいいんでしょうか
0363デフォルトの名無しさん2008/03/14(金) 20:41:17
Expressて、ライセンス登録してもほんとにタダなんですか??
すいませんがどなたか教えてください
0364デフォルトの名無しさん2008/03/14(金) 21:17:31
タダだよ馬鹿
0365363です2008/03/14(金) 22:00:17
>>364

どーもありがと。
0366デフォルトの名無しさん2008/03/14(金) 23:05:53
なんかうまくいかないので質問なのですが、

class test{
public:
int i;
test(){ test(1); }
test(int i){ this->i = i; }
}

こういう感じでコンストラクタをオーバーロードし、コンストラクタからコンストラクタを呼ぶことはできないのでしょうか?
0367デフォルトの名無しさん2008/03/14(金) 23:18:16
C++スレで聞け
0368デフォルトの名無しさん2008/03/14(金) 23:21:30
つーかiはないだろ
0369デフォルトの名無しさん2008/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;}
};
0370デフォルトの名無しさん2008/03/15(土) 01:44:31
コンストラクタというものがわかってらっしゃらない
0371デフォルトの名無しさん2008/03/15(土) 07:30:38
>>366 をやりたいだけなら、ディフォルト引数でいいんじゃね?

class test{
public:
int i;
test(int i = 0){ this->i = i; }
}

ディフォルト引数だと難しい (例えば、違う型の引数でオーバーロードしたいとか)
なら、>>369 のように共通部分をくくりだしたメンバ関数を作ればいいだけ。


0372デフォルトの名無しさん2008/03/15(土) 09:07:55
ディフォルトwwww
0373デフォルトの名無しさん2008/03/15(土) 09:24:06
別に「デ」でも「ディ」でもいいんでない?
ttp://cougar.eb.com/soundc11/d/defaul01.wav
0374デフォルトの名無しさん2008/03/15(土) 09:39:06
ディスクトップパソコン
0375デフォルトの名無しさん2008/03/15(土) 12:00:42
ハードデスクドライブ
0376デフォルトの名無しさん2008/03/15(土) 13:14:45
ディスク、デスクの場合とは違うっしょ。
ttp://cougar.eb.com/soundc11/d/desk0001.wav
ttp://cougar.eb.com/soundc11/d/disk0001.wav
0377デフォルトの名無しさん2008/03/15(土) 13:36:59
disk [di'sk]
default [difo':lt]

アクセント位置の違いなのかな
0378デフォルトの名無しさん2008/03/15(土) 14:55:27
デホルト
0379デフォルトの名無しさん2008/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 のエディタで開く
文字コードに関してどんな判定がされているのかを知りたいです。
0380デフォルトの名無しさん2008/03/15(土) 17:23:07
他のエディタか変換ツール使えばいいだけ
0381デフォルトの名無しさん2008/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;
}
0382デフォルトの名無しさん2008/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);
}
0383デフォルトの名無しさん2008/03/15(土) 18:51:41
さあ?
0384デフォルトの名無しさん2008/03/15(土) 18:56:28
> 全部きれいに消すにはどうすればいいですか
ブレークポイント等を活用しながらトレースし、
問題箇所を探っていこう。
0385デフォルトの名無しさん2008/03/15(土) 21:04:38
TranslateMessageの前に、
if( msg.message == WM_QUIT ) break;
でも入れたら?
0386デフォルトの名無しさん2008/03/15(土) 21:46:59
DestroyWindowにこだわるのは何で?

PostQuit・・・じゃダメなの?
0387デフォルトの名無しさん2008/03/15(土) 22:19:54
DestroyWindowは呼んでも呼ばなくてもいい
ただ自分で呼ばないときはDefWindowProcが代わりに呼ぶように作る
だからどっちみちDestroyWindowは呼ばれる
0388デフォルトの名無しさん2008/03/16(日) 02:23:27
Visual Studio 2008 Express Editions をインストールしたのですが

ファイル > 新規作成 > プロジェクト > 「新しいプロジェクト」のダイアログで
プロジェクト名を入力してもOKボタンが有効になりません。

OSは、XP Home SP2です。
0389デフォルトの名無しさん2008/03/16(日) 07:57:00
VC2008です。
L""でない""の文字列定数をANSI(SJIS)でなく、UTF-8にしたいのですが、どうすればいいですか。
ソースコードをUTF-8で保存しても、SJISにされるようです。
0390デフォルトの名無しさん2008/03/16(日) 08:32:57
WideCharToMulltiByte
0391デフォルトの名無しさん2008/03/16(日) 08:45:39
定数をUTF-8にしたいんですが…
実行時に変換するしか方法はないですか?
0392デフォルトの名無しさん2008/03/16(日) 10:07:31
あとはファイルから読み込むとか、
"\xe4\xb8\xAD"のように地道に十六進拡張表記を書くくらいしかない。
0393デフォルトの名無しさん2008/03/16(日) 10:27:27
Visual C++ では wchar_t の文字列は
UTF-16 なんですか?それとも UCS2 なんですか?
0394デフォルトの名無しさん2008/03/16(日) 11:08:08
サロゲートペアを扱えたらUTF-16、そうでなければUCS-2。
それは冗談としても、最近のWindowsはUTF-16だから、
UTF-16として扱っておくのが吉。
0395デフォルトの名無しさん2008/03/16(日) 16:47:44
Windowsの内部でUnicode使ってるからVCでUnicodeを使うようになっただけだから
あくまでWindowsのためのUnicodeなんだと考えておいた方がいい。
0396デフォルトの名無しさん2008/03/16(日) 17:42:10
結局マルチバイトじゃん・・・
いや、マルチワードじゃん・・・
まぁ合成文字とかもあるから仕方ないか。
いっそのこと Mule の内部表現にしてしまへ!
0397デフォルトの名無しさん2008/03/18(火) 01:45:20
VisualC++6.0を使って一人でプログラムを作っているのですが、
だんだんとソースファイルが増えてきて60個ぐらいになりました。
これらのファイルは1つのフォルダに入れているのですが、
ファイル名の衝突が気になり始めました。衝突を防ぐ方法として
次の二つの方法を思いつきました。

(1) ファイル名にサフィックスやプリフィックスを付けるなどして
名前が重複しないようにする。(今まで通り、1つのフォルダに全て
のソースファイルを入れる。)

(2) ファイルをフォルダに分けて管理。

ソフトウェア開発の現場では多数のソースファイルをどのように
管理していますか?アドバイスをお願いします。
0398デフォルトの名無しさん2008/03/18(火) 01:51:54
>>397
ファイル名が衝突する=ファイル分割が間違っているorファイル命名が間違っている
とは思うけど、まぁよくあることだよな。
1も2も大差はないと思うけど見た感じ管理されてそうに見える2を選択するかな?
ただincludeパスを書くのが面倒かもしれないが・・・
0399デフォルトの名無しさん2008/03/18(火) 01:56:41
>>398
>ファイル名が衝突する=ファイル分割が間違っている
>orファイル命名が間違っている
>とは思うけど、まぁよくあることだよな。

適切にファイル分割して正しく命名すれば、ファイルがいくら
増えても名前が衝突することはないのですか?
0400デフォルトの名無しさん2008/03/18(火) 02:00:48
名前入れ忘れたけど399==397です。
0401デフォルトの名無しさん2008/03/18(火) 02:01:45
>>399
システムの規模にもよると思うけど、俺のしょぼい経験じゃまず無いように思う。
きちんと命名し、役割が変わってしまった、役割を分割したときなんかに正しくリネームしてれば無さそうだけど・・・
04023972008/03/18(火) 02:22:48
>>401
とすると、開発の現場では1つのフォルダで全てのソースを管理する
のが一般的だということでしょうか? ちょっと意外です。
0403デフォルトの名無しさん2008/03/18(火) 02:31:40
>>402
いやいやw>>397の2だよ。いちばん深い階層で4くらいかな?
ファイル数はヘッダー含めて100位だと思う。数えたことないけど・・・
1フォルダあたりファイルが20超えるくらいから考え始めて、50超えたらまずフォルダわけする。
というか、ファイルが増えたからフォルダわけっていうより役割の分割が自然とフォルダ単位になる。
04043972008/03/18(火) 02:57:59
>>403
やっぱりそうですか。ファイルの役割に着目してフォルダ分けする
のが自然ですよね。

僕の場合、Visual C++のFileViewのツリーで細かくフォルダ分けして
ファイルを分類しています。だから実際のファイルのフォルダ分けは
特に必要がないように感じていました。FileViewのツリーとWindowsの
フォルダのツリーを同じに保つのはめんどくさい(片方を変更したら
もう片方も変更しなければならない。)ので実際のファイルは分類せず
に1つのフォルダに放り込んでいました。

一人で開発していると、このような方法が一般的かどうかわからない
ので、アホなことをやってるんじゃないか、とか思うことが良くあります。
0405デフォルトの名無しさん2008/03/18(火) 06:02:52
一般的ではないアホなことをやっている

普通はプロジェクトごとにフォルダわけするだろ
さらに別プロジェクトでも共有するライブラリなどのヘッダも
別フォルダにしてパスを通す
0406デフォルトの名無しさん2008/03/18(火) 08:37:57
大量のソースがある巨大プロジェクトなのかと思ったけど
ファイル名の衝突とか言ってるから、今まで作ってきた全然関係ないプログラムが
1つのフォルダにごっちゃごちゃに存在してるということか?
0407デフォルトの名無しさん2008/03/18(火) 12:33:31
>>397
参考までに衝突する(した)ファイル名を教えてほしい
一人で作っていて名前が衝突するって考えられんのだが
0408デフォルトの名無しさん2008/03/18(火) 19:04:09
>>362みたいな感じでVisualC++起動時にエラーが出るんですけど、解決法は無いですか
0409デフォルトの名無しさん2008/03/18(火) 19:06:35
新しいパソコン買う
0410デフォルトの名無しさん2008/03/18(火) 19:08:29
>408
しつこい
04114082008/03/18(火) 19:21:38
初心者に教えるスレでそんな風に言われても…
0412デフォルトの名無しさん2008/03/18(火) 19:29:36
いやだから新しいパソコン買えよ
てかまずPCスペックぐらい書けや
04134082008/03/18(火) 19:33:50
>>412
WindowsXP HomeEdition
Intel Celeron M processor 1.60G
メモリ 704M
0414デフォルトの名無しさん2008/03/18(火) 19:53:55
OSから再インストール、それで駄目なら新しいパソコン買う
04154082008/03/18(火) 19:59:06
分かりました。ありがとうございました
0416デフォルトの名無しさん2008/03/18(火) 21:47:42
VC++2008でC++の勉強を始めたものです。新規プロジェクトでコンソールアプリを選択して
新規プロジェクトを作成し、そこに既存のCPPファイルとかヘッダとかを追加したのですが、
ヘッダがコンパイラに認識されておらず、コンパイル時にヘッダがないというメッセージが
でてコンパイルできません。どうすればよいですか?
どうかよろしくお願いします。
0417デフォルトの名無しさん2008/03/18(火) 23:06:01
ヘッダーがないなら
ヘッダーを用意しなきゃだめじゃない。
0418デフォルトの名無しさん2008/03/18(火) 23:15:08
>>416
全部がファイルシステム上で同じフォルダにあるか?
違うフォルダにあるなら、同一のフォルダにまとめてから追加しろ。
0419デフォルトの名無しさん2008/03/19(水) 00:43:20
今windowsにログインしているユーザーに
管理者権限があるかどうかを判別する関数があれば教えてください。
0420デフォルトの名無しさん2008/03/19(水) 00:51:44
Administratorsグループに属しているかってこと?
0421デフォルトの名無しさん2008/03/19(水) 01:43:08
すいません、今インストールするなら
Visual C++ 2008 再頒布可能パッケージ (x86)
だけでいいでしょうか?

Visual C++ 2005 再頒布可能パッケージ (x86)
も入れておいた方がいいですか?
0422デフォルトの名無しさん2008/03/19(水) 04:46:11
最近VisualC++2005ExpressEditionをインストールして
簡単なHelloWorldプログラムを書いてビルドしようとしたのですが
エラーが出て先に進めなくなってしまいました。
OSはWindows2000。win32/コンソールアプリケーション/空のプロジェクト、で書いてます。

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

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

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

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

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

もしわかる方いたらおしえてください。
0423デフォルトの名無しさん2008/03/19(水) 06:10:26
リビルド 最初から全部ビルドやりなおし
簡易リビルド 一部のファイルを除いてビルドやりなおし

一回リビルド通ったら次からは簡易リビルドで問題ないはず
04243972008/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)

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

を削除してしまいました。そして以下のようにツリーを構成
しました。(ファイル数が多いので簡略化しました。)
04263972008/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
04273972008/03/19(水) 08:08:08
1つのクラス用に hと.cppを作り、それらをセットにして一つのフォルダに
入れています。フォルダといっても、FileViewのフォルダです。
本当のフォルダ(Windowsのフォルダ)ではありません(念のため)。

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

さて、この方法は変でしょうか?
開発現場での方法が知りたいのですが。。。
0428デフォルトの名無しさん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;
}
0429デフォルトの名無しさん2008/03/19(水) 10:00:38
WAVファイルのヘッダを知りたいのか
ファイルへのバイナリ出力が知りたいのか
まあ両方書いてもいいけど、それあっという間にスタック食いつぶさないか?
普通にループでいいべ。
0430デフォルトの名無しさん2008/03/19(水) 10:14:09
>427
オープンソースで開発してるのがいっぱいあるから好きなだけ見ればいい
0431デフォルトの名無しさん2008/03/19(水) 10:36:46
>>429
すみません、両方です。
0432デフォルトの名無しさん2008/03/19(水) 10:45:18
ProgramingWindowsにsinwaveとかいうサンプルあったと思う
0433デフォルトの名無しさん2008/03/19(水) 14:17:11
Visual C++ 2005の超初心者ですが、今、誰か教えてくれる人いらっしゃいますか?
ちなみにC言語では簡単なプログラムをいくつか作ったことありますが、VCは初めてです。
0434デフォルトの名無しさん2008/03/19(水) 14:19:27
何?
0435デフォルトの名無しさん2008/03/19(水) 14:22:26
MFCアプリのダイアログベースでボタンを用意し、そのボタンを押したらRS232で通信するプログラムを作りたいです。
http://www.geocities.jp/terukat/_geo_contents_/win/comm.html

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

よろしくお願いします。
0436デフォルトの名無しさん2008/03/19(水) 14:25:36
>>427
はっきりいいますがアナタは頭がおかしいです
同一のプロジェクトに参加しているのならば別のファイル名にするべきです
0437デフォルトの名無しさん2008/03/19(水) 14:28:00
まずはファイルを読み書きするプログラムから勉強すれば?
あとは通信でも同じようなもんだ
0438デフォルトの名無しさん2008/03/19(水) 14:30:28
>>435
分不相応な事はしない事です。
まったくの初心者であればまずは理解からはじめましょう
0439デフォルトの名無しさん2008/03/19(水) 14:40:12
>>437さん
アドバイスありがとうございます。
ファイル読み書きやってみます。

ちなみに私のやってることって考え方間違ってますか?
init関数にして呼び出したりって。
Cでのイメージが抜けないのですが、、、
0440デフォルトの名無しさん2008/03/19(水) 14:42:51
>>436さん
全くその通りです。ほんとはもっと時間をかけてやるべきですが、仕事で時間が限られているので相談させてもらいました。。。
04414402008/03/19(水) 14:43:43
間違えました。>>438さんです。
0442デフォルトの名無しさん2008/03/19(水) 14:44:34
そういうサンプルなら探せばあると思う
0443デフォルトの名無しさん2008/03/19(水) 14:56:32
VC++ 2005ProでPCの情報を取得する→CSVで指定したフォルダに吐き出す
というプログラムをあと三日で作成しなければなりません。
慣れた方なら1日で出来るみたいに言われたのですけど、
VBしかやったことなくてプロジェクト作成からさっぱりです。
本当はちゃんとC++の勉強をしてから取り組んだ方がいいのでしょうが
時間がないので無理なんです。
誰か手取り足取り教えてくれませんか?
ちなみに取得する情報は
PC基本情報
ハードウェア基本情報
ユーザー情報
ネットワーク情報
論理ドライブ情報
物理ドライブ情報
プリンタ情報
インストールされている全アプリケーション情報
です。
お願いします。。。



0444デフォルトの名無しさん2008/03/19(水) 14:57:56
>>432
その本(サイトじゃないですよね)って、5版>4版>3・・・
って考えていいんですか。
0445デフォルトの名無しさん2008/03/19(水) 15:26:52
>444
最初に出てくるサンプルは単に正弦波を描画するやつで
音を鳴らす用に改造したサンプルはあとの方に出てくる

サウンド関係のサンプル
AddSynth
BachTocc
Drum
KBMidi
Record1
Record2
Record3
SineWave
TestMci
WakeUp
0446デフォルトの名無しさん2008/03/19(水) 15:28:56
上下卷必要?
0447デフォルトの名無しさん2008/03/19(水) 16:23:44
>>443
仮にWMIで取得できる情報だけだったら、
VBScriptやVB6系でやるのが簡単だと思う。

あと、手取り足取り教えるほどのお人好しはここにはいないと思うぞ。
04484432008/03/19(水) 16:28:58
>>447
そうですか。。。
VB6のソースはあります。
これをVC++2005で作り直さなければならないのです。
0449デフォルトの名無しさん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.
//
//---------------------------------------------------------------------------
0450デフォルトの名無しさん2008/03/19(水) 17:04:51
シリアルは慣れてないとハマるから、mscomm.ocx使ったほうが楽かも
0451デフォルトの名無しさん2008/03/19(水) 17:40:12
>>397
職業プログラマだけど、自分はそうやってるし、他の人もそうやってる。
一般的かどうかまでわからないが、合理的な方法と思う。

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

ファイル名はプリフィックスをつけて一意にする。
ディレクトリが別になってても、単体で見たときに区別できないから。
0452デフォルトの名無しさん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_;
}
};
0453デフォルトの名無しさん2008/03/19(水) 18:29:00
>>452
CoInitialize()はちゃんとやってる?
04543972008/03/19(水) 20:53:43
>>430
なるほと。調べてみます。お勧めのがあったら教えてください。

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

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

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

(1) (今まで通り)すべてのファイルのファイル名が一意になるようにする。
(2) ファイルを機能別にフォルダ分けする。
  (FileViewでの分類とは別の観点で分類する)
04554512008/03/19(水) 21:29:52
>>454
>(2) ファイルを機能別にフォルダ分けする。
>  (FileViewでの分類とは別の観点で分類する)

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

ちなみに今のプロジェクトでは主にnamespaceにあわせてる。フォルダ階層も。
比較的管理しやすい。
0456デフォルトの名無しさん2008/03/19(水) 23:35:16
OPENFILENAME でファイルを読み込む場合に最初にパスを指定しないと
プログラムを再起動しても最後に開いたパスがカレントディレクトリ
になってますが、これは何処にパスが記憶されてるのでしょうか?
0457デフォルトの名無しさん2008/03/19(水) 23:39:56
ゲーム作るとしたら

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

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

ネタじゃないです
マジレスお願いします
0458デフォルトの名無しさん2008/03/19(水) 23:41:45
ゲーム製作板がある
0459デフォルトの名無しさん2008/03/20(木) 01:50:42
複数のファイル(cpp)を作ると
クラスとかの変更があるたびに
いちいちexternのほうも修正しなくてはならなくてめんどくさいんですが
そこらへんを自動でやってくれる機能はないですか?
0460デフォルトの名無しさん2008/03/20(木) 01:51:52
全部ヘッダに書けば。
0461デフォルトの名無しさん2008/03/20(木) 01:51:53
2008にMFCはないんですか?
0462デフォルトの名無しさん2008/03/20(木) 08:27:22
>>457
もうちょっと具体的でないと答えづらいが、beginthreadexでループというのは普通じゃないと思う。

>>459
C++でexternは使わないことが多い。
0463デフォルトの名無しさん2008/03/20(木) 10:50:29
>>461
Standard以上に付いている。
0464デフォルトの名無しさん2008/03/20(木) 12:21:59
>>457
ネタじゃないなら、beginthreadex について調べてからこい。

どんなプログラムかわからんので beginthreadexe をループで
と言うのがおかしいかどうかはわからんけど、peekmessage と
同列にしてるのは明らかにおかしいと思う。
04654622008/03/20(木) 12:32:49
>>464
うん。そういう意味で書いた。メッセージにつき1スレッドで処理するってことかな。
使ったことないけどユーザーインタフェーススレッドがそんな感じなのかな。
0466デフォルトの名無しさん2008/03/20(木) 18:01:37
>>463
もしかしてMFCはいらない子ですか?
0467デフォルトの名無しさん2008/03/20(木) 19:10:59
貧乏人にはいらない
0468デフォルトの名無しさん2008/03/20(木) 19:14:23
Expressは試供品だろ
0469デフォルトの名無しさん2008/03/20(木) 21:32:54
>>454
まさかと思うが、1クラス1ファイルなんて妄執に囚われていないだろうな。
0470デフォルトの名無しさん2008/03/20(木) 22:06:12
>>469
いやそれは基本だろ…
0471デフォルトの名無しさん2008/03/20(木) 22:12:14
>>457
普通にメインスレッドにゲーム用ループ作って
そのループの中にメッセージループを処理する関数つくって入れてた
ただ、メインスレッドでやると、メニューポップアップ時とかにメッセージループで
処理がとまるから
ユーザー操作に関係ないリアルタイム系のゲームを作っている場合などは
気をつけないとはまるかも
0472デフォルトの名無しさん2008/03/20(木) 22:13:21
>>457
つまり、peekmessage方式ね
0473デフォルトの名無しさん2008/03/20(木) 22:19:15
>>464
別に>>457はおかしいことは言ってないよ
win32プログラムの場合、一般的にはメッセージをgetmessageによるループで処理させるけど
ゲームみたいな場合にはメッセージ処理をループではなく局所的に処理させたい場合がある
メッセージがない時抜けるためにpeekmessageでメッセージの有無確認を行うというのは良くやる手法
0474デフォルトの名無しさん2008/03/20(木) 22:25:24
間違えた
peekmessage使うとメニューポップアップとかではとまらないかも
VBのDoEventsはとまったような気がしたが
0475デフォルトの名無しさん2008/03/20(木) 22:29:40
ゲーム関係はゲーム板のやつが詳しいだろ
0476デフォルトの名無しさん2008/03/20(木) 22:34:38
ためしにpeekmessageを使ってメニューポップアップしてみたらやっぱり止まるね
ということで、>>474は無しでw
0477デフォルトの名無しさん2008/03/20(木) 22:40:02
>>475
確かにw
俺もWindowsゲーム作ってたのって
もう8年も前だからすっかり忘れてるわ
0478デフォルトの名無しさん2008/03/20(木) 23:19:31
>>473
peekmessage に突っ込んでる奴なんていないから、

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

についての君の意見を聞かせてくれ。
0479デフォルトの名無しさん2008/03/21(金) 00:28:42
478みたいな
俺のほうが正しいと認めるまで論議をやめない
みたいな奴がいるとウザイ
0480デフォルトの名無しさん2008/03/21(金) 00:56:00
ヘッダってなんで自動で書いてくれないわけ?
全部読み込んでから使わないヘッダを削除して軽くすればいいじゃん
04814732008/03/21(金) 01:25:33
>>478
457 の言ってるのは、ゲームループの為に、新しいスレッドを作るか
メインスレッドでループさせるのとどっちが良いかという意味でしょ
で、beginthreadexについて俺は何を意見すればよいんだ?
0482デフォルトの名無しさん2008/03/21(金) 01:39:13
>>480
何が言いたいのかよくわからんがヘッダに何を書くかは自由だぞ?
書くのが面倒ならヘッダなんて作らなきゃいいじゃないか。
0483デフォルトの名無しさん2008/03/21(金) 01:50:33
まず標準関数がなんのヘッダ使ってるか調べるのがだるい
使わなくなったら他に使ってないか全コード調べて使ってなかったらゴミだからヘッダ消すのもだるすぎる
0484デフォルトの名無しさん2008/03/21(金) 02:21:33
めんどくせぇならすべてをincludeしたヘッダでも作れば?
include消すのならincludeをコメントアウトしてコンパイルエラーでなけりゃOKとかでいいんじゃね?
ってか余分なヘッダーをincludeしたからといって実害は無いと思うぞ?
0485デフォルトの名無しさん2008/03/21(金) 03:01:52
ほんとだ!なんでいっぱいインクルードしてもプログラムサイズ増えないんだ??
0486デフォルトの名無しさん2008/03/21(金) 03:39:45
コンパイラは賢いから。
宣言と定義の違い。実態がないもの(宣言)はいくらあったところでプログラムサイズは変わらない。
0487デフォルトの名無しさん2008/03/21(金) 07:30:02
>>481

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

あと457がこういう意図なのかどうかは不明。自分は457からはそう読み取れない。
464のように解釈した。
0488デフォルトの名無しさん2008/03/21(金) 10:04:35
>>485
増えるのはコンパイル時間だけ。
ヘッダの中で変数定義しているのでもない限りプログラムの大きさは増えない。
0489デフォルトの名無しさん2008/03/21(金) 10:39:27
>>487
普通かどうかについてはわからない 
少なくとも、俺が勤めていたゲーム会社のゲームライブラリはゲームループを
メインスレッドに組み込んでいた(ADVだからそれでぜんぜん問題なかった
ただ、>>471で書いたようにメニューポップアップが発生するとイベントループ関数から
戻ってこないような状況もあるから、サブスレッドによるゲームループもありだと思うよ

俺の場合は逆で
beginthreadexとpeekmessageを対比しているのでゲームループ処理を行う場所を
メインスレッドかサブスレッドどっちすればよいか?と質問していると判断したんだけどね
0490デフォルトの名無しさん2008/03/21(金) 12:25:44
ありがとうございます。全ヘッダを書いたヘッダを作ってそれを使うことにしました。
0491デフォルトの名無しさん2008/03/21(金) 20:18:35
>>489
サブスレッドでメッセージループする場合、メインスレッドはサブスレッドからの通知を待つの?
どうもこの方法の意義が分からないな。

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

あと質問を489のような解釈をするには「普通はbeginthreadexで作った別スレッドででループさせるもんですか?
それともメインスレッドででループさせますか?」じゃなきゃ変だと思う。
0492デフォルトの名無しさん2008/03/21(金) 20:51:01
>止まるのはモーダルダイアログ出す場合とか。

ごめん。間違えた。これもメッセージは止まらんわ。処理時間の長い処理を入れなければ。
0493デフォルトの名無しさん2008/03/21(金) 22:19:29
>>479
だったら、スルーしとけばいいのに。
0494デフォルトの名無しさん2008/03/21(金) 23:05:37
>>493
見なければいいのに
ヌルーすればいいのに
書き込まなければいいのに
なんて言うだけ無駄です
0495デフォルトの名無しさん2008/03/22(土) 00:46:04
確かに無駄だったな。(w
0496デフォルトの名無しさん2008/03/22(土) 12:05:43
VisualStadioをインストールしたのですが、なぜかコンパイルができません。
ちなみに作ったテキストを.cに変換してCソースファイルになるはずなのですが、それも行われません。
しかし、ビルドは行うことが出来ます。
コンパイルの操作を行おうとする時に「拡張子に関連したコンパイルツールがありません」となります。
これは私なりに考えてCソースファイルになってないからだと考えます。
しかし、その根本的な原因がわかりません。
原因は何でしょうか?(長文失礼)
0497デフォルトの名無しさん2008/03/22(土) 13:09:51
Vistaなんじゃねーの
0498デフォルトの名無しさん2008/03/22(土) 13:27:30
単純に拡張子が表示されていないだけだと思われ。
Vista の Explorer でデフォルトがどういう表示なのかは知らん。
0499デフォルトの名無しさん2008/03/22(土) 14:18:50
> VisualStadio

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

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

質問者がすでに消えたようなのでもうこの問題はこれで収めようとおもうんだけど
0504デフォルトの名無しさん2008/03/22(土) 19:24:12
とっくに終わってるのに1人で何やってんの?
0505デフォルトの名無しさん2008/03/22(土) 19:43:05
>>503
誤解されると良くないからちゃんと書いておくが
メッセージループは、beginthreadexによる別スレッドでゲームループを作る場合も、
peekmessageをつかったメインスレッド中にループを作る場合も、メインスレッドで行うと言う意味ね

このことは当たり前の前提で話していたつもりなんだが、>>465の書き込みを見ると
すでに認識の違いがそこにあったようなので一応書いておいた
0506デフォルトの名無しさん2008/03/22(土) 19:45:15
>>504
この板は、どの書き込みが>>491なのか判らないので
終わっているかどうかは判らんから一応ね
0507デフォルトの名無しさん2008/03/22(土) 19:45:20
また始まったか
05084912008/03/22(土) 20:20:46
なるほど。ゲームループというのを知らなかったから話が噛み合わなかったわけだ。申し訳ない。
なんでGetMessageじゃなくてPeekMessageなんだろうと思ってたけど、そういうことね。

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

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

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

#質問者は去ったが、もうちょっと続けさせて欲しい。
0509デフォルトの名無しさん2008/03/22(土) 21:10:00
どっかよそでやってほしい
ゲーム製作板あたりで
0510デフォルトの名無しさん2008/03/23(日) 00:57:12
お聞きしたいのですが

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

と言う推奨比率みたいなのを
その昔MS発行の何かの書籍で見た記憶があるのですが
どなたかご存じであり 且つ 教えていただけませんでしょうか…
05114222008/03/23(日) 09:02:43
>>423
ありがとうございます。
初回のビルドでは警告がでて当然なんですね。
実際にも簡易リビルドの警告のあと、自動的に通常ビルドされていました。
通常のビルドでのエラーに絞ってなお調べてみようと思いますm(_ _)m

あれからすぐ書き込み規制に入ってしまい返事が遅くなりすみません。
0512デフォルトの名無しさん2008/03/23(日) 16:58:57
何度でも蘇るよ!
0513デフォルトの名無しさん2008/03/24(月) 14:12:56
Win32APIとランタイムライブラリを使ったプログラムで、_beginthreadを使ったら
_beginthreadexを使えって怒られたんだけど、_beginthreadの問題点を調べても
なかなかわからない。

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

どんな問題点があるんですか?おすえてくらさい。
0514デフォルトの名無しさん2008/03/24(月) 14:46:22
スレッド起こしっぱなしで放置でいい用途なら_beginthreadで問題ないんじゃ。
WaitForSingleObjectとかするなら_beginthreadexを使うべし。

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

でも上司に反抗するのも建設的じゃないんで_beginthreadexに書き換えますたw
0516デフォルトの名無しさん2008/03/24(月) 22:40:12
WindowsXPでVisual C++ 2008 Express Editionを三日くらい使っているのですが、
プログラムを実行したときの表示が一瞬で消えてしまいます
ずっと表示させるにはどうしたらいいですか?
0517デフォルトの名無しさん2008/03/24(月) 22:53:00
ヤフオク見るとVC++.netのスタンダードしかないんだけどプロフェッショナル
って品薄なのですか?スタンダードとプロフェの価格が知りたいです。
0518デフォルトの名無しさん2008/03/25(火) 01:12:14
>>516
[デバッグ]-[デバッグなしで開始]
0519デフォルトの名無しさん2008/03/25(火) 01:33:58
>>516
main関数の最後に↓を追加
getchar();
0520デフォルトの名無しさん2008/03/25(火) 14:32:27
>>517
スタンダード2〜3万 プロフェショナル8〜9万ぐらい
0521デフォルトの名無しさん2008/03/25(火) 20:58:40
>>516
コマンドラインで実行
0522デフォルトの名無しさん2008/03/25(火) 22:42:33
>>517
おとなしくExpress使ってろよ
0523sage2008/03/26(水) 19:21:13
ListBoxで長いテキストの右は隠れんだけど、マウスを乗せて
ポップアップ窓に全文表示ってどうすんの?
調べんだけどわからん
05245232008/03/26(水) 19:24:34
久し振りで来たら名前とE-mail間違え
0525デフォルトの名無しさん2008/03/26(水) 20:07:35
>>523
tooltip
0526デフォルトの名無しさん2008/03/26(水) 20:32:13
>>525
ありがとうございます
tooltipにテキストを取得ってどうするんでしょうか?
コントロールやなんかのヘルプは表示できるんですが
0527デフォルトの名無しさん2008/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があるんですが、原因が分かりません;
分かるかた是非お願いいたします。
0528デフォルトの名無しさん2008/03/26(水) 21:35:34
そのエラーは、大方Visual C++のランタイムをインストールしていないのだろう。
2005, 2005 SP1, 2008とかそれぞれ分かれているから、
自分のプログラムをビルドしたVC++のバージョンと同じやつを選んでインストールしろ。
0529デフォルトの名無しさん2008/03/26(水) 21:46:44
やっぱりそれ関係のエラーだったのか・・

相手にそーいった環境が一切なくても動くようにするにはどうすればいいですか?
0530デフォルトの名無しさん2008/03/26(水) 21:56:48
原因が分かりません
     ↓
やっぱりそれ関係のエラーだったのか・・
0531デフォルトの名無しさん2008/03/26(水) 22:28:56
1度コード書いてコンパイルに成功する
EXEができてそれが起動する
コードを修正したけどコンパイル失敗
なのに1番目にコンパイルしたEXEが起動する

これ、コンパイル失敗したらEXE起動しないようにするにはどうすれば?
0532デフォルトの名無しさん2008/03/26(水) 22:34:26
コンパイルではEXE起動しないよ
0533デフォルトの名無しさん2008/03/26(水) 22:39:50
原因を特定できなくて「分からない」と言ったんで、
これかな?あれかな?って思ったのはあったんだよね;
0534デフォルトの名無しさん2008/03/26(水) 23:27:08
>529
/MDじゃなくて、/MTでコンパイルすれば。
0535デフォルトの名無しさん2008/03/26(水) 23:51:28
>>534
すいません。どーゆー意味でしょう・・?
0536デフォルトの名無しさん2008/03/27(木) 00:45:33
ヘルプ嫁
0537デフォルトの名無しさん2008/03/27(木) 11:57:29
Microsoft Visual C++ 2008 Express Editionを使用しています。
c:\Program Files\Microsoft Visual Studio\Common\MSDev98\Template
というフォルダにawxファイルを入れたいんですが
見つかりません。
Expressには無いんでしょうか??
0538デフォルトの名無しさん2008/03/27(木) 12:00:26
>>531
前に作ったEXEを起動するか?って聞いてくるはずなんだけど。
「今後この問い合わせをしない」にチェック入れたのか。

ツール-オプションのプロジェクトおよびソリューションのビルド/実行に
それ関連の設定あるみたいだから見てみては。
起動する/しない/確認の3通り設定できる
0539デフォルトの名無しさん2008/03/27(木) 13:24:47
で、MTとMDの違いが分かりませんw
0540デフォルトの名無しさん2008/03/27(木) 13:45:04
ヘルプ嫁
0541デフォルトの名無しさん2008/03/27(木) 13:50:12
ヘルプヘルプってそんくらい教えてやれよ
どーせお前わかんねーんだろ?w
ぷっ
0542デフォルトの名無しさん2008/03/27(木) 13:58:51
エラーになったとき、エラーの原因が表示されるコンパイラはありますか?
0543デフォルトの名無しさん2008/03/27(木) 23:43:27
>>539
[プロジェクト]-[プロパティ]-[構成プロパティ]-[C/C++]-[コマンドライン]にあるよ
0544デフォルトの名無しさん2008/03/28(金) 00:49:43
>>543
あ。ありがとー
リンクの静的と動的が具体的にどう違うのかいまいち理解しきってないなぁ・・
0545デフォルトの名無しさん2008/03/28(金) 02:16:49
CRTを自分のEXE/DLLに内蔵するか、外のDLLに頼るかの違い。
0546デフォルトの名無しさん2008/03/28(金) 11:38:52
お。ありがとうございます
0547デフォルトの名無しさん2008/03/28(金) 20:11:35
自分でクラス作るところでつまづく
Cも関数作るところでつまづいた
0548デフォルトの名無しさん2008/03/28(金) 21:45:30
VC++2005で、バイナリデータをchar型の配列にいれてから、DATファイルに保存していましたが、
SQLSERVER2005にそのバイナリデータを直接保存できるようにしたいです。
varchar型のFIELDにそのデータを保存しようとすると、認識できないデータ(文字?)
があるらしく、データがそこで切れてしまいます。FIELDのデータ型をいろいろ変えたり
してみましたがやはり駄目でした(binary型などはエラーになってしまいます)。
何かヒントを頂ければ幸いです。スレ違いだったらすみません。
0549デフォルトの名無しさん2008/03/28(金) 21:48:24
初心者スレでSQLSERVER2005はないだろ
0550デフォルトの名無しさん2008/03/28(金) 21:51:27
↑すいません。SQLSERVERにデータを保存する際には、DATファイルに保存
する時と同様に、char型配列にバイナリデータをmemcpyしてから、データを転送しています。
よろしくお願いします。
0551デフォルトの名無しさん2008/03/28(金) 21:52:27
>>549
すいません。。。
0552デフォルトの名無しさん2008/03/28(金) 21:52:27
Microsoft Visual C++ 2008 Express Editionを使ってます
プログラムを書き込む際に普通のテキスト感覚で行うと
前の文字まで消えてしまいます (挿入ができない)

x+600 +の後に4500といれたい
しかしx+4500となって600が消えてしまいます
そういった設定はどこで行えばよいのでしょうか?
0553デフォルトの名無しさん2008/03/28(金) 22:02:11
まさか Insert 押せば終わりってオチじゃないよな…
0554デフォルトの名無しさん2008/03/28(金) 22:08:47
>>553
その通りでした すみません・・
0555デフォルトの名無しさん2008/03/28(金) 22:11:51
>>548
> 認識できないデータ(文字?)
> があるらしく、データがそこで切れてしまいます。

文字列型なんだから、\0がきた時点で切れるだろ。


> binary型などはエラーになってしまいます

エラーの原因を調べろよ。
0556デフォルトの名無しさん2008/03/28(金) 22:25:24
>>555
ありがとうございます。

>文字列型なんだから、\0がきた時点で切れるだろ。

全く同じデータをDATファイルに保存して、そのファイルをテキストエディタで開き、
そのデータをSQLSERVERのFIELDにコピペすると、やはりデータが切れてしまいます。
データを変換する必要があるんですかね?
0557デフォルトの名無しさん2008/03/28(金) 22:30:44
#include <stdio.h>
void main()
{
int count;

for (count = 0; count < 5; count++) {
printf( "countは今%dです\n", count );
}
printf("aaa");
if(count==4){printf("正解です%dです\n",count);}
else{printf("残念");}


getch();
return;

}

VC++2008でデバックしましたがなぜかこれが"残念"のほうが出力されます。
countは4だと思うんですが
0558デフォルトの名無しさん2008/03/28(金) 22:33:21
>557
Cスレで聞けば?
0559デフォルトの名無しさん2008/03/28(金) 22:36:41
すいませんCスレいきます
0560デフォルトの名無しさん2008/03/29(土) 09:00:44
countの値は5
0561デフォルトの名無しさん2008/03/29(土) 10:14:51
>>556

特定のデータまたは文字長で切れるのか調べること
またFIELDのデータ型のルールに違反してないかを調べること

を勧めます。

0562デフォルトの名無しさん2008/03/29(土) 21:25:27
>>557
forの機能を調べなおして来い
0563デフォルトの名無しさん2008/03/29(土) 21:39:00
>562
お前もCスレ行け
0564デフォルトの名無しさん2008/03/29(土) 21:59:18
count=0
今0です表示
countが1になる。
条件式参照(for・・・にもどる。count<5なのでループ継続。
・・・
今4です表示。
countが5になる。
条件式参照。count<5なのでループ終了。
0565デフォルトの名無しさん2008/03/29(土) 22:02:13
スレ違いに気づけ
0566デフォルトの名無しさん2008/03/30(日) 09:40:54
全く関係ないんじゃないからいいんじゃない?
英語の文法の授業で先生がSpeakingの話はじめたら
「先生、今文法の授業です」っていうタイプかしら。
0567デフォルトの名無しさん2008/03/30(日) 09:56:39
落ちこぼれのために小学校の復習からやられたら迷惑
0568デフォルトの名無しさん2008/03/30(日) 11:52:00
バカは気づかない。
スレ違いでも、分かるやつが答えを1レスすればそこで終わることを。
結局何も分からないやつがアホみたいに、スレ違い、ヘルプ嫁を書き続けるからリソースも無駄遣いすることになる。
教えたくないなら完全にシカトしろ。どーせ答えられねーんだからよ
0569デフォルトの名無しさん2008/03/30(日) 14:08:47
ばかじゃん
0570デフォルトの名無しさん2008/03/30(日) 14:11:54
>559でとっくに終わってるのに
0571デフォルトの名無しさん2008/03/30(日) 14:23:53
このスレの回答者はゴミレベルが幅を利かせてるからな
557なんかは560のレスが出れば終わるだろ。
運悪くゴミに糞回答された質問者は可哀相だよ。
0572デフォルトの名無しさん2008/03/30(日) 14:30:15
というゴミレスを必死に繰返してる君はいったい
0573デフォルトの名無しさん2008/03/30(日) 15:32:35
質問です。
C++の勉強をしようと思って、express editionをダウンロードしたんですが。
.NetFrameworkというのも一緒にダウンロードされました。

これって、何ですか?
0574デフォルトの名無しさん2008/03/30(日) 15:39:00
express editionはC++の勉強に使えないこともないけど
本来は.NetFramework用の開発ツールですよ
0575デフォルトの名無しさん2008/03/30(日) 15:41:44
すみません。
.NetFrameworkって、何なんですか?
0576デフォルトの名無しさん2008/03/30(日) 15:42:48
ググレかす
0577デフォルトの名無しさん2008/03/30(日) 15:44:15
★初心者にVisual C++を教えるスレ★
0578デフォルトの名無しさん2008/03/30(日) 15:45:58
人類にまだ正義は残っている。
http://www.nicovideo.jp/watch/sm930541
0579デフォルトの名無しさん2008/03/30(日) 15:47:51
wikipediaで調べたら・・・
Microsoft .NET Framework(マイクロソフト ドットネット フレームワーク)は、マイクロソフトが開発したアプリケーション開発、実行環境。

WindowsアプリケーションだけでなくXML WebサービスやWebアプリケーションなどWebベースのアプリケーションなどを取り入れた環境。一般に.NETという場合.NET全体の環境を指す。

また.NET Frameworkの基盤となっている仕様はEcmaインターナショナル、ISO、JISにて標準化されており、マイクロソフト以外のベンダーが独自に実装することもできる。

実際にいくつのオープンソースによる実装プロジェクトがある。なお、CLIのマイクロソフトの実装をCLRと呼ぶ。.NET FrameworkはCLRにその他ライブラリ群を加えたものと言える。


初心者の俺には意味がわかりません。
0580デフォルトの名無しさん2008/03/30(日) 15:52:27
なんでもすぐ聞くな
調べろ
徹底的に調べろ
0581デフォルトの名無しさん2008/03/30(日) 16:22:59
調べてみました。

簡単に言うと、同じプログラムで.NetFrameworkが入ってるコンピュータなら
書き直さなくても、同じように動作するってことですか?
0582デフォルトの名無しさん2008/03/30(日) 16:40:49
スクリプト言語みたいなもんです
C++の勉強がしたいならコンソールアプリで十分
0583デフォルトの名無しさん2008/03/30(日) 16:48:02
質問失礼します。
現在ゲームを製作中なのですが、複数のcppファイルで同一のヘッダを
参照すると変数の多重定義によるエラーが出てしまいます。

環境はVC2005EEで、error LNK2005でググって色々試したりしてみましたが何ともいかず、
コンソールアプリケーションですごく簡単なプログラムをコーディングして試してみてもうまくいきません。
申し訳ないのですが少しでも解決方法の手立てをお教え頂けると幸いです・・・。
0584デフォルトの名無しさん2008/03/30(日) 16:52:55
インクルードガード
0585デフォルトの名無しさん2008/03/30(日) 16:53:23
#ifndef __HOGE_H__
#define __HOGE_H__

//・・・

#endif
0586デフォルトの名無しさん2008/03/30(日) 16:54:34
#ifdef __MAIN__
#define EXTERN
#else
#define EXTERN extern
#endif

EXTERN int g_hoge;
0587デフォルトの名無しさん2008/03/30(日) 16:58:10
ここに
http://pc11.2ch.net/test/read.cgi/gamedev/1193935988/491
0588デフォルトの名無しさん2008/03/30(日) 17:23:06
>>561
ありがとうございました。もうちょっと調べてみます。
0589デフォルトの名無しさん2008/03/30(日) 17:26:23
皆さんご返答ありがとうございます。

>>584-585,>>587
この用法は既知だったので実装し、尚且つヘッダ内でstatic変数を作成し定義することも、
関数の定義を行うこともせずにビルドしてたのですが、それでもエラーが起こるため
甚だ疑問でした。環境から考えればコンパイラが古いということはないはずなのですが・・・。

>>586
そちらの用法を実装したところ、うまくいきました。ありがとうございます。
出来れば>>585さんの記述の仕方でうまくやりたかったのですが、
何ともいかないのでこちらのやり方で何とかしてみようと思います。

しかし本当に何で#ifndefのほうはうまくいかないのか・・・。
0590デフォルトの名無しさん2008/03/30(日) 17:27:32
目的が違うから。
0591デフォルトの名無しさん2008/03/30(日) 17:34:50
int main ()
{
try { LogFile logFile( "c:\\log.txt" ) ; }
catch(...) { return -1 ; }

logFile.Write( "hoge" ) ;
}
みたいに書きたいんだけど、tryのスコープにlogFileが捕らわれてしまうんだけどどうすれば解決できるでしょうか
0592デフォルトの名無しさん2008/03/30(日) 18:28:59
>>591
LogFile のインスタンスが try 内でのみ有効なのでは?
ポインタを使うのが常套手段かと


LogFile *LogFile;
try {
LogFile = new LogFile( "c:\\log.txt" );
}
catch (..) {
return -1;
}
LogFile->Write( "hoge" );
....
delete LogFile;


LogFile が ref class なら * を ^ に、 new を gcnew で置き換えればOK
05935912008/03/30(日) 18:36:17
mainのreturnが複数の箇所になって、ポインタをいちいち開放するのがスタイリッシュじゃないと感じて、
オブジェクト使って自動的にデストラクトさせようという狙いだったんです。
0594デフォルトの名無しさん2008/03/30(日) 18:47:29
>>593
goto 文でエラー処理すれば?

err_1:
delete a;

err_2:
delete b;

return -1;
みたいな感じで

著名なツールでも内部でgoto文使って
コードを簡潔化してる事あるよ
あとはdefine使うぐらいしか無いんじゃ

オヤジプログラマーに「goto文使ったら減給」とか
言われかねないけどw
0595デフォルトの名無しさん2008/03/30(日) 18:50:14
どうでもいいけどスレ違い
0596デフォルトの名無しさん2008/03/30(日) 18:52:28
>>591
これでダメな理由は?
try {
  LogFile logFile( "c:\\log.txt" );
  logFile.Write("hoge");
} catch(...) {
  return -1 ;
}


05975912008/03/30(日) 18:55:55
>>596
かなり簡潔に書いたけど、main内でいろいろ処理しながら、いろいろとログ書き込んでるからきびしいかと
0598デフォルトの名無しさん2008/03/30(日) 18:56:05
そんなことよりスレ違いを気にしたほうがいい
0599デフォルトの名無しさん2008/03/30(日) 19:01:13
このスレの対象ってC++なの?CLRなの?MFCなの?
0600デフォルトの名無しさん2008/03/30(日) 19:06:35
ttp://pc11.2ch.net/test/read.cgi/tech/1068359871/896
↑
誰かご存知の方いませんか?(´;ω;`)ブワッ


センセー、C++もCLIもMS VC範囲内だと思います。
0601デフォルトの名無しさん2008/03/30(日) 19:14:57
>599
標準C/C++のスレでないことは確か
0602デフォルトの名無しさん2008/03/30(日) 19:18:16
C++をVCに含めるならVCはWinに含まれるのか?
0603デフォルトの名無しさん2008/03/30(日) 19:33:55
>>596
コンストラクタで例外が発生する場合もあるしね。

すれ違いなんて気にするな。
その方が愛が育まれる。
0604デフォルトの名無しさん2008/03/31(月) 11:37:10
case WM_CREATE:
hdcMem=CreateCompatibleDC(GetDC(hWnd));
break;
case WM_PAINT:
hDC=BeginPaint(hWnd,&ps);
BitBlt(hDC,0,0,500,415,hdcMem,0,0,SRCCOPY);
EndPaint(hWnd,&ps);
return 0;

こんな感じで、ウィンドウのDCと互換性のあるDC(hdcMem)を作り
WM_PAINTでhdcMemからウィンドウのDCへコピー(画面に表示させる)・・・
というようにしたいのですが
例えばTextOutなどでhdcMemに書き込んでも
画面に何も表示されません。

教えて欲しいです。
あと、このプログラムはゲームのソースの一部ですが、この考え方って
一般的なものでしょうか?
0605デフォルトの名無しさん2008/03/31(月) 11:59:58
更新ないと描画されないからか?
0606デフォルトの名無しさん2008/03/31(月) 13:55:22
ビットマップ選択してないとか?
0607デフォルトの名無しさん2008/03/31(月) 14:03:39
どのcaseでtextoutしてんだ?
PAINT以外でInvalidateRectしてないとか?

てかbitmap選択してないからじゃないの?
0608デフォルトの名無しさん2008/03/31(月) 14:34:06
最初は1x1ドットのビットマップが選択されてるから、
1ドットだけコピーされてるよ。
同じ色になってなけりゃ虫眼鏡で見ればわかるよ。
0609デフォルトの名無しさん2008/04/01(火) 12:22:11
リストビューにファイルを表示させようと思い、SHGetFileInfoでファイル情報を取得したところ、ファイルの種類とアイコンが思惑と異なりました。
対象はあるアプリケーションのファイルなんですが
 ファイル種類 → システムフォルダ
 アイコン → マイコンピュータのアイコン
となってしまいます。

第一引数のLPCITEMIDLISTはフルパスを元に自作したものを使っています。
IEnumIDListのNext()関数で取得したLPCITEMIDLISTを用いた場合は正常に取得できる所を見ると、やはりLPCITEMIDLISTの自作部分に問題があると思った方がいいのでしょうか?
0610デフォルトの名無しさん2008/04/01(火) 12:28:54
そこまでわかってたらデバッガか何かで確認するだけ
0611デフォルトの名無しさん2008/04/01(火) 13:45:21
この辺が参考になるかも。
[ファイルを列挙する]
http://www.kab-studio.biz/Programing/Codian/ShellExtension/05.html
0612デフォルトの名無しさん2008/04/01(火) 15:05:06
>610
同じハズの2処理で結果が違うのですから、やはり何か異なるはずですよね。
もう少し追跡に集中してみます。

>611
こちらのサイトは参考資料として活用させてもらっています。
もう一度最初から読み直すなどして、もう少し理解を深めようと思います。


お二方ともありがとうございました。
0613デフォルトの名無しさん2008/04/01(火) 15:40:57
>>611

http://www.kab-studio.biz/Programing/Codian/ShellExtension/06.html

↑に「IEnumIDList::Next()で取得するアイテムIDリストは、たったひとつのアイテムID、つまりそのファイルかフォルダだけしか持っていません。」
て書いてある。
これが原因じゃない?
06146112008/04/01(火) 15:42:10
>>612

と書きたかった。
06156112008/04/01(火) 15:57:38
多分フルパスで取得したLPITEMIDLISTを先頭にたどっていけばいいんじゃないかな。
そうすれば最後はNext()で取得したLPITEMIDLISTと一致すると思う。

マイコンピュータのアイコンが表示されてしまうのは、
フルパスの先頭である「マイコンピュータ」を指してるからじゃないかな。

06166112008/04/01(火) 15:59:46
>>多分フルパスで取得したLPITEMIDLISTを先頭にたどっていけばいいんじゃないかな。
「先頭に」じゃないな。「末尾に」だな。

確認はしてないので違ってたらごめんね。
0617デフォルトの名無しさん2008/04/01(火) 16:23:02
>616
いえ、ありがとうございます。
ここは多少立ち止まってでもしっかり理解したい所なので、全て試してみようと思います。
0618デフォルトの名無しさん2008/04/01(火) 17:48:04
初心者に教えてくれる掲示板ということで教えてほしいのですが、
スタティックテキストの文字の色、大きさ、フォントの種類を変更したいと思っています。
初期の設定で変更し、その後は特に変更しません。
VisualC++2005のダイアログベースで作成中です。
よろしくお願いします。
0619デフォルトの名無しさん2008/04/01(火) 18:25:29
>>618
ダイアログベースってMFC?そうでない?
スタティックテキストは個別に変更したいってこと?
リソースエディタでは無理だから、大きさとフォントは、別に作ったフォントを
WM_INITDIALOGでWM_SETFONTしてやると変更できる。
色はWM_CTLCOLORSTATICメッセージでSetTextColor呼ぶとか
0620デフォルトの名無しさん2008/04/01(火) 18:26:03
>618
そのへんは普通に勉強すれば誰でもわかることだし
掲示板でいちいち説明できる分量じゃない。
0621デフォルトの名無しさん2008/04/01(火) 18:30:53
初心者に教えるスレでっせ。
0622デフォルトの名無しさん2008/04/01(火) 18:37:09
教えるのはいいけど理解できるか?
0623デフォルトの名無しさん2008/04/01(火) 18:42:36
この掲示板で説明するべき話題でないというのは同意。
ググった方が早くて確実で分かりやすいと思う。

突き放すことはないかなって思っただけです。
0624デフォルトの名無しさん2008/04/01(火) 18:50:00
まあ環境もうちょっと書いてくれないとね。
詳しく書いた後で、MFCだとどう書きますかとか聞かれたらやだしね。

適当にはしょって答えて、そのキーワードでググってもらうのがいいかと。
0625デフォルトの名無しさん2008/04/01(火) 19:19:54
>619
ありがとうございます。
MFCです。スタティックは個別にそれだけを変更したいです。
その辺のキーワードを頼りに勉強してみます!

>620
初心者なんですいません。
>そのへんは普通に勉強すれば誰でもわかることだし
ということですが、その普通にを教えていただけませんか?
もちろん参考書で勉強をしていますが、各コントロールの使い方が主に載っていてそれはわかるが、応用するときにはどうしていいかわかりません。

未熟者ですいませんがキーワードとかこういうの参考になるよってのを教えていただけたらと思います。
よろしくお願いします。
0626デフォルトの名無しさん2008/04/01(火) 19:22:22
>各コントロールの使い方が主に載っていてそれはわかるが、応用するときにはどうしていいかわかりません。

>625
林本だろそれ
0627デフォルトの名無しさん2008/04/01(火) 20:11:22
本は欲しい情報が載ってないことが多いし探すのが大変。
自分はMSDNを調べたりキーワードでググったり掲示板を利用したりしている。

掲示板
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi
http://m--takahashi.com/
0628デフォルトの名無しさん2008/04/01(火) 20:15:42
コントロールのデバイスコンテキスト取得
↓
pDC->SetTextColor(0xffffff);
0629デフォルトの名無しさん2008/04/02(水) 01:29:08
DLLファイルを作成するプロジェクト(A)と、そのDLLファイルを使う
プロジェクト(B)があります。AとBは別個のフォルダに収められている
ので、BからAのDLLを使うには次のことをしなければなりません。

(1) .libファイルの場所をBで設定。(コンパイル時)
(2) Bの.exeとリンクされる.dllの場所を設定。(実行時)

(1)については[プロジェクト]→[設定]→[リンク]タブで設定しました。

(2)についてはどうすればいいのでしょうか?
Aが作るDLLにはデバッグバージョンとリリースバージョンがあります。そこで、
Bの.exeがデバッグバージョンであれば、AのデバッグバージョンのDLLが、
Bの.exeがリリースバージョンであれば、AのリリースバージョンのDLLが
リンクされるようにしたいのですが。
0630デフォルトの名無しさん2008/04/02(水) 02:02:28
>>629
AとBの出力フォルダをデバッグ同士・リリース同士で揃えたらいいんじゃない?
0631デフォルトの名無しさん2008/04/02(水) 02:13:14
>>630
.exeと.dllが作成される場所はデフォルトのままにしておきたいのですが。。。
0632デフォルトの名無しさん2008/04/02(水) 02:31:13
>>631
ならBのプロジェクトのプロパティのデバッグの環境変数の設定で
Aの出力フォルダをパスに追加しておくというのはどう?
0633デフォルトの名無しさん2008/04/02(水) 02:46:44
>>632
すみません。具体的にどうやって設定したらよいか教えてもらえませんか?
[プロジェクト]→[設定]とか[ツール]→[オプション]とかは散々いじくった
のですが。。。

Visual C++6.0です。
0634デフォルトの名無しさん2008/04/02(水) 06:53:44
カスタムビルドプロセスで、Aのdllをこっちのexeの出来るフォルダにコピーするとか。
0635デフォルトの名無しさん2008/04/02(水) 08:19:54
>>633
出力はデフォルトのまま出来たDLLとかlibをコピーするのは駄目なの?
コンパイル後のコマンドでコピーすればよいと思うんだけど
あと、デバッグとリリースを分けるなら別名にしたほうがいろいろ便利だよ
0636デフォルトの名無しさん2008/04/02(水) 10:26:22
同じソリューションに入れて依存関係作っとけばよかった気がする
06376252008/04/02(水) 11:54:51
>>626
林本です!

一応初期化のところでCreateFontでフォントを作成し、GetDlgItemでIDを取得し、SetFontでフォントを指定して文字の大きさは変更できました。
あとは色ですね。。。
もうちょっと勉強してみます!
0638デフォルトの名無しさん2008/04/02(水) 12:05:55
>>637
色は
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
で
if (pWnd->GetDlgCtrlID() == IDC_HOGE)
{
  pDC->SetTextColor(RGB(0xff,0,0));
}
とか }
0639デフォルトの名無しさん2008/04/02(水) 18:23:21
デバッグウインドウに文字を表示するにはどうすればよいでしょうか?
0640デフォルトの名無しさん2008/04/02(水) 18:29:20
以前学校の授業でC言語を簡単に勉強した事があるのですが
C++とCはまったくの別物と考えたほうがいいのでしょうか?

また、勉強用に独習C++あたりを購入しようかと思っているのですが、他におすすめの入門用の書籍などありますか?
0641デフォルトの名無しさん2008/04/02(水) 18:31:58
あまり別物でないように使う事も出来るけど、
フルに機能を利用すれば全くの別物になる。

入門書は
・ 独習 C++
・ C++ プライマー 第4版
・ ロベールの C++ 入門教室
の3つを実際に店頭で読んでみて決めてみたら。
0642デフォルトの名無しさん2008/04/02(水) 18:36:17
>>639
デバッグ中の出力ウィンドウのこと?
OutputDebugStringとかOutputDebugStringFormatとか使う
MFCだとTRACEマクロもある
0643デフォルトの名無しさん2008/04/02(水) 18:41:14
>>641
なるほど、基本的な部分が似てるのなら少し安心です

前に独習Perlがすごい役にたったから今回も独習シリーズでいいや、とか思ってた
たしかに読んでみて自分に合ったの探したほうがよさそうですね。
どうもありがとうございます
0644デフォルトの名無しさん2008/04/02(水) 19:53:10
>>636
依存関係ではダメと思う。

自分は634のようにしている。
0645デフォルトの名無しさん2008/04/02(水) 21:00:54
>>643

自分は「やさしいC++」がオススメ
0646デフォルトの名無しさん2008/04/02(水) 23:31:13
>>642
アリガトン
0647デフォルトの名無しさん2008/04/03(木) 02:55:42
>>634 >>635
ありがとうございます。うまくいきました。

[プロジェクト]→[設定]→[ビルド後の処理]タブで、
出来たての.dllをコピーするコマンドを指定しました。

  copy $(TargetPath) コピー先フォルダ

これでビルド後に.dllが(対応する).exeのフォルダにコピーされ、
.exeの実行時に適切な.dllが使われるようになりました。

>あと、デバッグとリリースを分けるなら別名にしたほうがいろいろ便利だよ
考えてみます。今のところ不都合はないように思います。

>>636
>同じソリューションに入れて依存関係作っとけばよかった気がする

>>644さんのおっしゃる通り、この方法はダメでした。
1つのワークスペース(VisualC++6.0なので)に2つのプロジェクトを挿入して、
それらのプロジェクトの間に依存関係を指定してみたのですが、
うまくいきませんでした。この方法でできれば簡単で良いのですが。。。
0648デフォルトの名無しさん2008/04/03(木) 07:19:02
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_OWNDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, LoadCursor(NULL,IDC_CURSOR1), NULL, NULL,
L"Cursor Test", NULL };

カーソルを自作カーソルIDC_CURSOR1にするにはどうすればいいんですか?
こうやるとエラーになってしまいます。
0649デフォルトの名無しさん2008/04/03(木) 08:12:29
■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう。
・できるだけ具体的に。
0650デフォルトの名無しさん2008/04/03(木) 08:20:17
>>648
-LoadCursor(NULL,IDC_CURSOR1),
+MAKEINTERSORSE(IDC_CURSOR1)
綴りまちがってるから自分で確認して
0651デフォルトの名無しさん2008/04/03(木) 09:06:33
開発環境は2008です。

WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_OWNDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, LoadCursor(NULL, MAKEINTRESOURCE(IDC_CURSOR1)), NULL, NULL,
L"Cursor Test", NULL };

- + の意味がわからないのですが
これで実行した時のエラーは

error C2065: 'IDC_CURSOR1' : 定義されていない識別子です。
warning C4003: マクロ 'CreateWindowW' に指定された実引数の数が少なすぎます。
error C2059: 構文エラー : ')'

です。
0652デフォルトの名無しさん2008/04/03(木) 09:38:12
IDC_CURSOR1っていう名前のカーソルのリソースがないんじゃないのかい?
0653デフォルトの名無しさん2008/04/03(木) 10:09:47
Windowsフォームアプリケーションだとコントロールを個別にフォントとかをプロパティで簡単に設定できるんですね。
なんでMFCだとできないんですかね。。。実はできたりするんですか?
0654デフォルトの名無しさん2008/04/03(木) 10:14:51
ポトペタRAD環境をC++で使いたいならC++Builderへどうぞ
VC++ではできません
0655デフォルトの名無しさん2008/04/03(木) 11:50:43
>>651
LoadCursor(NULL,IDC_CURSOR1) だと IDC_CURSOR1 でエラーにならないのに
LoadCursor(NULL, MAKEINTRESOURCE(IDC_CURSOR1)) だとエラーになるのはおかしいだろ。

そして、LoadCursorの第一引数がNULLなのはシステム定義アイコンを使うときだ。
hInst を入れてみ。
0656デフォルトの名無しさん2008/04/03(木) 12:30:44
だめでした。
IDC_CURSOR1 を定義する方法は、

リソースビュー>追加>リソース>cursor>新規作成
出来た resource.h をcppにインクルード

だけでいいですか?
LoadCursorのヘルプに afxwin.h が必須インクルードと書いてあるのですが、インクルードすると

#ifdef _DLL
#ifndef _AFXDLL
#error Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

の#errorに飛んでしまいます。
0657デフォルトの名無しさん2008/04/03(木) 15:09:25
MFCのLoadCursor使うならafxwin.hが必要でMFCとしてビルドしないといけない
0658デフォルトの名無しさん2008/04/03(木) 16:21:45
もしかして>>648のエラーも
>error C2065: 'IDC_CURSOR1' : 定義されていない識別子です。
なのか?
そうでないなら出たエラー書いてみて
0659デフォルトの名無しさん2008/04/03(木) 16:29:47
あと、>>648 のその行以外は問題ないとすると
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_OWNDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, LoadCursor(GetModuleHandle(NULL),MAKEINTRESOURCE(IDC_CURSOR1)), NULL, NULL,
L"Cursor Test", NULL };

こうだな。GetModuleHandle(NULL)がかぶってるから、
事前に呼んでとっておくといい、けどこれWinMainの第一引数なんだけどな。
0660デフォルトの名無しさん2008/04/03(木) 18:12:45
エラーが出なくなりましたが、今度はウインドウが出てこなくなりました。
正常だった記述に戻してもウインドウが出てこなくなりました。
中間ファイルもソリューションのクリーンで消しましたがだめです。WINごと再起動してもだめです。

DirectX9SDKのサンプルCreateDeviceのVS2005プロジェクトをVS2008で自動変換して取り込み自作カーソルリソースを新規作成で追加して
#include "resource.h"追加と

WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
L"D3D Tutorial", NULL };

の部分を

WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_OWNDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, LoadCursor(GetModuleHandle(NULL),MAKEINTRESOURCE(IDC_CURSOR1)), NULL, NULL,
L"Cursor Test", NULL };

に書き換えただけです。たすけてください。もう12時間これやってます^^;
0661デフォルトの名無しさん2008/04/03(木) 18:18:42
エラーが出ないって事はコンパイルできたんだろ?
そしたら次はデバッガの使い方をだな・・・

とりあえず、F10連打だ
0662デフォルトの名無しさん2008/04/03(木) 18:53:10
ああそうか!カーソルはこれでクリア出来てるってことですよね
LoadCursor(GetModuleHandle(NULL),MAKEINTRESOURCE(IDC_CURSOR1))
の意味と、CreateDeviceが失敗してるのはまた明日調べます。
まじありがとうございました。
0663デフォルトの名無しさん2008/04/03(木) 19:00:16
ちょっとサンプルみたけど、hInst でいいんじゃん。
LoadCursor(hInst,MAKEINTRESOURCE(IDC_CURSOR1))
で。前のGet・・・につられたわ
0664デフォルトの名無しさん2008/04/03(木) 19:24:36
拾ったサンプルをあてずっぽうで改造?
ほとんど何も知らないでやってる?
06656442008/04/03(木) 20:28:26
>>647

dllのコピーは必要だけど、依存関係を設定するのはオススメ。
libのリンクを自動的にやってくれるし、
exeをビルドする前にdllをビルドしてくれるので、
古いdllを使ってハマルようなことがなくなる。

つまり 依存関係+ビルド後の処理でコピー と。
06666472008/04/04(金) 00:44:33
>>665
なるほどです。そうしてみました。
0667デフォルトの名無しさん2008/04/04(金) 08:56:37
>>663
hInstで動きました。ありがとうございました。
0668デフォルトの名無しさん2008/04/06(日) 00:09:59
PCSX2というソフトをコンパイルしたいんですがやり方がわかりません。
プログラムについての知識0です。
勉強したいとかではなくこのソフトがほしいだけです。

Microsoft Visual C++ 2008をとりあえずインストールしましたがやり方がまったくわかりません。
サルにも判るように教えてくれる方がいれば幸いです。

ttp://www.pcsx2.net/files/10490

ttp://pcsx2.svn.sourceforge.net/viewvc/pcsx2/pcsx2/GS.cpp?view=markup&pathrev=346
0669デフォルトの名無しさん2008/04/06(日) 00:25:00
readme嫁
0670デフォルトの名無しさん2008/04/06(日) 02:26:07
勉強する気ないやつに教えるほど俺は性格良くないです
0671デフォルトの名無しさん2008/04/06(日) 04:37:38
>>668
エミュレータでタダゲーしたいんだけど、コンパイルしないといけない。
だれか手取り足取り教えろ、ということか。
…たしかに何も教える気がまったく起こらんなw 初心者には寛容なほうなのだが。
0672デフォルトの名無しさん2008/04/06(日) 10:00:14
実は頭悪いだろ、ここの人たち
0673デフォルトの名無しさん2008/04/06(日) 10:29:33
残念ながらそんな煽りに乗るほどには悪くないんだな。(w
0674デフォルトの名無しさん2008/04/06(日) 16:45:39
>>668
ここは勉強する意欲のある初心者に教えるスレであって
勉強するつもりもない素人に教えるスレではありません
お帰り下さい
0675デフォルトの名無しさん2008/04/06(日) 20:47:50
今までXPで開発していましたがPCをVistaで新調して開発したところ、
Vista機では問題なく実行できるexeがXPマシンに持っていくとアプリケーション構成エラーが出て実行できません
おそらく>>527さんとほぼ同じ症状で、/MTでコンパイルを通すと実行できるようにはなりますが
ファイルサイズが大きくなるのでできるだけ/MDにしたいです
何か良い手段はないでしょうか
VC2008を使用しています
0676デフォルトの名無しさん2008/04/06(日) 21:08:55
それが嫌なら>528の方法
それも嫌ならライブラリ使わない
06776752008/04/06(日) 21:26:15
なるほど…
やはり基本的には/MTにするかランタイム導入を促す方向になるのですね
ありがとうございました
0678デフォルトの名無しさん2008/04/06(日) 21:32:39
ランタイムをインストールするのが嫌なら、
EXEと同じフォルダに置くという方法もできる。
マニフェスト関係が面倒だけど。
0679デフォルトの名無しさん2008/04/07(月) 00:18:33
intやfloatの値をLPSTRに変換するにはどうすればいいですか?
0680デフォルトの名無しさん2008/04/07(月) 00:26:55
キャスト

int i = ...;
LPSTR s = (LPSTR)i;
0681デフォルトの名無しさん2008/04/07(月) 02:39:25
すごいな。 いろいろと。 dobuleでなくて良かったとかそういう話なんだな。。
0682デフォルトの名無しさん2008/04/07(月) 03:11:47
どぶれ?
0683デフォルトの名無しさん2008/04/07(月) 06:17:22
>679
CやC++でintやfloatを文字列に変換するのと同じでもいいし
apiやMFC使う方法もある
0684デフォルトの名無しさん2008/04/07(月) 06:19:08
でもfloatは対応してないのもあったかも
0685デフォルトの名無しさん2008/04/07(月) 08:34:49
>>680
オマイ天才
0686デフォルトの名無しさん2008/04/07(月) 08:42:03
2008のMFCで、チェックボックスのメンバ変数を追加して、初期化時に

変数名 = TRUE;

とすればチェックされた常態で起動されるとVC++6.0の本に書いてあるのですが
error C2679: 二項演算子 '=' : 型 'int' の右オペランドを扱う演算子が見つかりません (または変換できません)。
のエラーが出てしまいます。
VBのようにプロパティにもそれらしき項目がないです。教えてください。
0687デフォルトの名無しさん2008/04/07(月) 09:36:44
何の問題もなくできたよ
0688デフォルトの名無しさん2008/04/07(月) 10:06:14
変数を作ったら
DDX_Control(pDX, IDC_CHECK1, as);
この行が追加された。
で
OnInitDialog()の中に
as = TRUE;
を追加してもだめです。
0689デフォルトの名無しさん2008/04/07(月) 10:27:05
このスレの住人なら知っていますね、あの糞開発ツールのことを

・自分のプログラムのバグなのかコンパイラのバグなのかわからない
・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している
・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている
・糞開発ツールを批判すると「性格が悪いから糞ツールを批判するんだ」と言われる

糞だけど、政治的な理由で無理やり使わされているんですよね。
もう、あんな厨の作った糞ツールを我慢して使うのはやめましょう。

・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。
 上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。
・糞開発ツールを使わせる上司の下では働けません、と上司の上司に直訴しましょう。
・あの糞開発ツール提供会社には「おたくの糞開発ツールは話にならない」と突き放しましょう。
 バグレポートなどしてはいけません。改善要求などもってのほかです。
 あの会社はあなたたちのことをテスター/モルモットとしか思っていません。
・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」
 なんて話が出たら力強く机を叩き、会議室を出ましょう。
 あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。

糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
0690デフォルトの名無しさん2008/04/07(月) 10:48:51
>>688
単にデフォルトでチェック状態にしたいなら
as.SetCheck(BST_CHECKED)
をすればいいんじゃないの?
0691デフォルトの名無しさん2008/04/07(月) 12:21:28
できました。ありががとうございます。
できましたが、わからないことを逆引きできず、きりがありません、本も相当買いましたが、VBと違いまったく応用できません
このまま一個ずつ積み重ねるしかないのでしょうか?
0692デフォルトの名無しさん2008/04/07(月) 12:25:51
MSDNで調べる癖をつけましょう
それでもわからなければWebやメーリングリストの過去ログなども使いましょう

CheckBoxの場合はCButtonというクラスの変数なのでそのメンバを調べましょう
0693デフォルトの名無しさん2008/04/07(月) 13:01:00
DDX_Controlにするから型があわない
たぶん本に書いてあるのと違うことやってる
0694デフォルトの名無しさん2008/04/08(火) 17:56:11
Visual C++6.0を起動すると、

 「ワークスペースにあるウィンドウのすべてを開くことはできません。」

という意味不明なメッセージボックスが表示されることがあります。
[OK]ボタンがひとつあるだけの単純なメッセージボックスです。
このメッセージは次のように言っているように聞こえます。

「ワークスペースにはウィンドウがいくつかある。あなたはそれをすべて
開こうとした。でもそれはできない。」

???

別に困っているわけではないのですが起動時に数回に一回の割合で出現するので
気になります。一体、このメッセージボックスは何が言いたいのでしょうか?
0695デフォルトの名無しさん2008/04/08(火) 19:13:41
http://support.microsoft.com/kb/315617/ja
このぺージの ダイアログ ボックスでWebBrowserコントロールを使用
の部分なのですが、webbrowser2.hが存在していないエラーが出ます。2008では使えないんですか?
代りに何を使えば同じように使えるんでしょうか
0696デフォルトの名無しさん2008/04/08(火) 19:45:02
http://msdn2.microsoft.com/en-us/library/aa752044.aspx
ここらへんをみるとwebbrowser2.hは、該当
ActiveXからMFCクラスを生成するとできる、
って書いてあるような気がする
0697デフォルトの名無しさん2008/04/08(火) 19:47:36
>694
メニュー > ウインドウ
0698デフォルトの名無しさん2008/04/09(水) 10:09:33
そこの英語ページぜんぜんわかりません
CWebBrowser2とIWebBrowser2の違いもわかりません。
ドキュメント自体しないですよね

void CtestDlg::OnBnClickedOk()
{
//CWebBrowser2* hExp1 = (CWebBrowser2*)GetDlgItem(IDC_EXPLORER1) ;
//hExp1->Navigate2((CString*)("http://www.google.com/intl/ja/"), &noArg, &noArg, &noArg, &noArg);

IWebBrowser2* hExp1 = (IWebBrowser2*)GetDlgItem(IDC_EXPLORER1) ;
hExp1->Navigate2((VARIANT*)("http://www.google.com/intl/ja/"), NULL, NULL, NULL, NULL);
}

これで起動するとコンパイルはできるのですが、ボタンをクリックすると

test.exe の 0x78a49c05 (mfc90ud.dll) でハンドルされていない例外が発生しました
: 0xC0000005: 場所 0x8b55ffdb を読み込み中にアクセス違反が発生しました。

と出てしまいます。VC++2ヶ月でこれはまだ早いですかね
0699デフォルトの名無しさん2008/04/09(水) 11:03:06
IWebBrowser2はインターフェイスでCWebBrowser2はその実装されたクラスだけど多分難しいと思う

単に表示させたいならGetDlgItem使わずにダイアログに直接貼り付けてクラス変数作ってNavigateした方が楽だよ

なんにしてもCOMとかActiveXとかめんどくさい物を勉強した方がいいと思う
0700デフォルトの名無しさん2008/04/09(水) 15:18:28
VC++6.0の初心者です。
 マウスのイベントについて教えて下さい。
 (漢字はよく読めないので、なるべく平仮名でお願う)
MFC AppWizard(exe)を使って、しゅるい はダイアログベース(D)を使います。

1つめ. ダブルホイールマウスを使ってた。
  マウスにかんけい知るイベントで、自分で調べて解ったのは
  WM_MOUSAWHEEL という奴ですが・・・ホイールが2つある、もっと、マウスで
  アプリケーションに必要な処理をおこうなうには何すれば?
   どう考えればいいでしょうか?
0701デフォルトの名無しさん2008/04/09(水) 15:47:15
日本語でOK
0702デフォルトの名無しさん2008/04/09(水) 15:59:22
ホイールが二つあるマウスのイベントを拾いたい
0703デフォルトの名無しさん2008/04/09(水) 17:39:18
横ホイールか
0704デフォルトの名無しさん2008/04/09(水) 17:39:57
>>702さん。
Yes.ホイールが2つ以上あるマウスのイベントを拾いたいです。
(日本語あってる?)
0705デフォルトの名無しさん2008/04/09(水) 18:05:07
VisualC++2005のMFCのダイアログベースでプログラムを作成しています。
まだ初めて1ヶ月もたってないので初歩的なことを聞いてすいません。

OnInitDIalog内の//TODO: 初期化をここに追加します。
というところで

font.CreateFont( 36,
0,
0,
0,
FW_NORMAL,
TRUE,
FALSE,
0,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS,
"Italic");

GetDlgItem(IDC_STATIC)->SetFont(&font);

として、文字のフォントを変更しようとしました。
最初は問題なく変更できていたのですが、気づいたらいつの間にか変換できていませんでした。

ボタンを使って、ボタン動作で
GetDlgItem(IDC_STATIC)->SetFont(&font);
を行うと変更されますので、一度変更した後になんらかの理由で元に戻ってると推測していますが、その理由と場所がわかりません。

これだけの情報でわかれば教えていただけますか?
0706デフォルトの名無しさん2008/04/09(水) 18:25:46
そのfontは保持し続けてるのか?
どこで宣言してる?
0707デフォルトの名無しさん2008/04/09(水) 21:21:31
long ldata[] = {0x00000000,0x00000001,0x00000002,・・・・・};

このような配列を、文字列、"0x000000000x000000010x00000002・・・・・"
と変換するにはどのようにしたらいいでしょうか。
また、この文字列を逆に配列に戻すことは可能でしょうか。

0708デフォルトの名無しさん2008/04/09(水) 21:40:00
VCというよりCかC++を勉強すれば可能
0709デフォルトの名無しさん2008/04/09(水) 21:54:15
>>708
ありがとうございました。可能ということで、勉強したいと思います。
0710デフォルトの名無しさん2008/04/09(水) 22:33:41
>>709
sprintfとかで速効
07117052008/04/10(木) 09:50:43
>706
一応グローバルで宣言してるつもりで関数の外で宣言してます。

ちなみにC言語は初心者レベルで理解してるつもりです。
まだ、簡単なソフトを1つ作っただけですが。。。初心者レベルで。
0712デフォルトの名無しさん2008/04/10(木) 10:50:01
最近VisualC#2008 Expressをダウンロードして使っているものです。
質問なのですが、
イミディエイトウィンドウを使ってコマンドを入力してデバッグできる
ことを知ったのですが、普通にGUI上からデバッグするだけでは
できないことや効果的な利用方法などがあったら教えて頂きたいです。
0713デフォルトの名無しさん2008/04/10(木) 10:53:47
ここC#じゃないよ
0714デフォルトの名無しさん2008/04/10(木) 12:20:50
static DWORD beforeTime = 0;
DWORD nowTime;static int fps = 0;char buff[80];

nowTime = timeGetTime();fps++;
if ( nowTime - beforeTime >= 1000 ) {wsprintf(buff, "%05d FPS\n", fps);
TextOut(hDC,1,1,buff,lstrlen(buff));fps = 0;
beforeTime = nowTime;
}
counter++;

これは某所にあった
FPSを表示するソースの一部なんだけど
これを使うと(WM_TIMERで呼ぶと)
最初の一回は00001FPSと出て、その後は25000とか二万を越える値が出ます。
どうして?
0715デフォルトの名無しさん2008/04/10(木) 12:31:49
1秒に25000回呼ばれてるんだろ
0716デフォルトの名無しさん2008/04/10(木) 12:56:24
>713
あ、思いっきり間違えました!
すいません。
0717デフォルトの名無しさん2008/04/11(金) 05:19:00
リソースファイルは、Express Edition じゃビルドできないんですか?

ちなみにバージョンは2008です。
0718デフォルトの名無しさん2008/04/11(金) 06:07:09
リソースコンパイラはRC.EXE
07197052008/04/11(金) 10:28:39
どなたかヒントだけでも教えていただけませんか?
0720デフォルトの名無しさん2008/04/11(金) 11:27:20
>>705
文字を替えたいコントロールのIDをIDC_STATICから別の名前に替えてみて
0721デフォルトの名無しさん2008/04/11(金) 12:07:17
>>720
変更しましたところ、グループボックスの文字が変化しました。
グループボックスのIDもIDC_STATICになっていました。
その原因は GetDlgItem(IDC_STATIC)->SetFont(&font); でIDを変更していなかったので、
ここでGetするIDも変更したのですが、文字は変化しませんでした。

原因はこれですか??
0722デフォルトの名無しさん2008/04/11(金) 12:40:58
>>721
IDC_STATICってのは (-1) になってて
ID未設定でいいときに使うんだよ。
プログラム中で指定するなら自分でIDつけろ
0723デフォルトの名無しさん2008/04/11(金) 13:36:40
>>722
ありがとうございます。
しかし、変更しましたが文字は変化しません。。。
0724デフォルトの名無しさん2008/04/11(金) 13:43:12
すいません。文字変更できました!
なぜかスタティックテキストの上に全く同じスタティックテキストができていて、
上を必死に変更してたのですが、下のものが表示されてたためにいくらやっても変化しなかったようです。

コピーやペーストをした覚えはないんですが、、、


でも、おかげさまでIDのことを覚えることができました。ありがとうございました。
もっと勉強してきます!!
0725デフォルトの名無しさん2008/04/12(土) 21:00:41
しかしこのスレって土日になるととたんに書き込みなくなるよね
仕事でこんなところに書き込んでる奴ばかりなんだろうか
0726デフォルトの名無しさん2008/04/13(日) 03:40:49
仕事でか(((( ;゚Д゚))))
0727デフォルトの名無しさん2008/04/13(日) 09:24:12
VC++2008ExpressでReleaseでビルドしてもtest.exeファイルが作成されません
Releaseフォルダにはtest.exe.intermediate.manifestやtest.objがあるだけです
どうすればいいですか?
0728デフォルトの名無しさん2008/04/13(日) 09:52:27
>>727
あるじゃん
0729デフォルトの名無しさん2008/04/13(日) 10:16:14
Releaseフォルダは2箇所にある。
0730デフォルトの名無しさん2008/04/13(日) 10:35:39
>>727
ほんとだ
0731デフォルトの名無しさん2008/04/13(日) 12:13:21
>>727
リンクエラー出てませんか?
0732デフォルトの名無しさん2008/04/15(火) 18:04:24
設定に関する質問です。
以前VisualC#2005をつかっていた時は、
括弧を閉じたりセミコロンを入れると自動でコードが綺麗に整列されて、例えば
x=5 が x = 5 というように、空白が挿入されたりインデントされたりしてたのですが、
こういった機能はVisualC++2008にはありますか?
自分でも調べたのですがよくわかりませんでした。設定方法がありましたらお願いします。
上手く説明できなくてすみません。。orz
0733デフォルトの名無しさん2008/04/15(火) 19:18:10
>>732
C++に、そういう機能はなかったはず
C#なら2008にもある
0734デフォルトの名無しさん2008/04/15(火) 20:07:24
そうですか。。回答ありがとうございました
0735デフォルトの名無しさん2008/04/15(火) 20:50:01
C#はそんなのがあるんだ。
C++は他の言語や環境と比べると不便さを感じるかもね。
0736デフォルトの名無しさん2008/04/15(火) 21:11:22
昔からVBがそうだけど、特にVCが不便と感じたことはない
逆にいちいち余計なことされるとむかつく
0737デフォルトの名無しさん2008/04/15(火) 22:37:16
VBは改行時にいちいち構文チェックしてうざかったな〜
.netになってからVBとかC#とかのインテリセンスはかなり優秀に
C#になれてたんでVC++にきたときに不便さに困った
今となっては慣れたけど
0738デフォルトの名無しさん2008/04/16(水) 03:22:50
C++ はマクロとかあるし、それ抜きにしても文法凶悪だからね。処理系的には。
賢くしづらいのはよく分かる。
0739デフォルトの名無しさん2008/04/16(水) 03:29:29
VCで極力小さい実行ファイルを作るにはどうしたら良いのでしょうか。

#include <windows.h>
int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{ return 0; }
だけをコンパイルしても24KBにもなってしまい、ビルドオプションで
サイズ優先とかしても変化せず。

変なランタイム使ったり実行ファイルが圧縮されてるわけでも無いのに、
ファイルサイズ10KB台で色々な処理をしてるまともなGUIツールが
あるんですが、何をどうしたらこう言う実行ファイルが作れるのか
皆目見当が付きません。
0740デフォルトの名無しさん2008/04/16(水) 05:43:44
既存のライブラリを使わない
0741デフォルトの名無しさん2008/04/16(水) 06:57:12
あとは/opt:nowin98だっけか。
0742デフォルトの名無しさん2008/04/16(水) 09:55:28
どなたか
http://www.whitire.com/vbs/tips0199.html
をvc++に移植してください!
0743デフォルトの名無しさん2008/04/16(水) 10:43:12
移植もなにも…
0744デフォルトの名無しさん2008/04/16(水) 11:16:47
できあがったDLLからC++のdllexport関数をDEFファイル形式で吐くツールとかないかな・・・
07457422008/04/16(水) 11:40:27
こんな感じで呼べますか?
http://www.geocities.co.jp/SiliconValley-SanJose/5309/vbaxdll_smp.html
0746デフォルトの名無しさん2008/04/16(水) 14:58:36
>>740-741
きっちり1KBの実行ファイルが生成される様になりました。
有り難うございました。
0747デフォルトの名無しさん2008/04/17(木) 00:53:24
ファイルから読み込んだ文字列から数字を取り出す方法を教えてくれないか

[100,100]

こんな感じの文字列なんだが

"[%d,%d]"

こんな書式を使って文字列から数字とか文字列とか取り出せるCの関数ってなんだっけ?

もし、C++だったら別のいいやり方があったらそっちを教えてくれたら嬉しい。
0748デフォルトの名無しさん2008/04/17(木) 00:58:11
自己解決、sscanfだ!
0749デフォルトの名無しさん2008/04/17(木) 03:33:25
スクリプト処理させるなら","やらスペースやら"[" "]"やらでトークン識別して
個々の文字列をatoiとかで読み取らせる方がいいよ
0750デフォルトの名無しさん2008/04/17(木) 08:14:17
sscanf()で%[]や%nを駆使する方がましな希ガス。
0751デフォルトの名無しさん2008/04/17(木) 08:38:20
sscanfは黒歴史だよ
0752デフォルトの名無しさん2008/04/17(木) 08:48:49
Cスレ行け
0753デフォルトの名無しさん2008/04/17(木) 14:51:45
>>750
入力ミスのチェックとか考えると自前で文字列解析処理作った方がいい
仕事でスクリプターが別にいる場合とかはチェック必須だしな
0754デフォルトの名無しさん2008/04/18(金) 13:51:12
あるクラス(以下CTest)をdllにして別のプロジェクトでリンクして
使ったときに、デバッグモードの時だけエラーが出ます。

ソースはこれだけなんですが・・・

1: CTest *ptest = new CTest;
2: delete ptest;

2行目実行時に「Invalid Address specified to RtlFreeHeap」
が出力されてブレークします。ヒープ領域の開放が上手くできて
いないような感じかと思ったのですが、具体的にどうしたら
良いのか分からないです。よろしくお願いします。
0755デフォルトの名無しさん2008/04/18(金) 14:04:11
CTestの中身がなんか悪さしているんじゃない?
0756デフォルトの名無しさん2008/04/18(金) 14:36:49
実際のheapいじるメモリ確保がdllと本体側でまたいでんじゃないの?
0757デフォルトの名無しさん2008/04/18(金) 22:27:40
new CTest;
0758モンキー2008/04/18(金) 23:07:11
BorlandのBCC55を使って初めてコンパイルを試みましたが、うまくいきません。
c:\に「cppprog]というフォルダを作成し、そこに「hello.cpp]という名前で
保存しました。
 コンパイル手順として、コマンドプロンプトを開き、スタートメニュー
から「ファイル名を指定して実行」を選び、名前(O)にcmdと入力し、cmd.exe
ウィンドウが開き、プロンプトがカレントディレクトリとして、Documents and
Settings¥木村が表示されます。ここで「cd\cppprog]でEnterキーを押しても
カレントディレクトリは、Documents and Settings\木村のままです。
どこで違った可能性があるかご指摘いただきたいとおもいます。
0759デフォルトの名無しさん2008/04/18(金) 23:10:25
cd c:\cppprog

ですにょjk
0760デフォルトの名無しさん2008/04/18(金) 23:15:10
>>758
木村さん乙。
0761モンキー2008/04/18(金) 23:16:13
758です。間違いました。C:¥>cd \cppprog エンターキーで
   指定されたパスが見つかりません。と表示されました。よろしく
  お願いいたします。
0762デフォルトの名無しさん2008/04/18(金) 23:22:45
タダで使えるBorland C++ Part5
http://pc11.2ch.net/test/read.cgi/tech/1135127048/

Borland C++ Compiler オ ワ タ
http://pc11.2ch.net/test/read.cgi/tech/1206951221/

Borlandにはやられた...
http://pc11.2ch.net/test/read.cgi/tech/1146850339/
0763デフォルトの名無しさん2008/04/18(金) 23:42:37
木村乙
0764デフォルトの名無しさん2008/04/18(金) 23:42:44
すれ違いな気がしなくもない

ってかBC++使ってるやつって
VC++けなす奴が多くてなんか嫌
0765デフォルトの名無しさん2008/04/18(金) 23:46:42
BC++Builderは、あれはRADだと俺は思う。どっちかっつーとVBに近いような。
0766デフォルトの名無しさん2008/04/18(金) 23:55:36
C++使えるんなら、態々VC++使う理由が判らん
マゾか何か?
0767デフォルトの名無しさん2008/04/19(土) 03:32:23
C++使えるんなら? VC++使う理由がわからん?

その日本語がわからん。 中国人か何か?

0768デフォルトの名無しさん2008/04/19(土) 12:00:27
766みたいなキモイのがいるからBC++はさわる気にもならない
VC++使いたくなくても使わなきゃならない場合もあるんだけど
BC++マンセーしてるやつにはそういう状況は想像できないんだろうね

キモすぎ
0769デフォルトの名無しさん2008/04/19(土) 22:06:58
いきなりですが、質問です。

Dim img As New Bitmap(16,16)でビットマップを作成して

img.SetPixel(4, 4, col) でに色をセットして

PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage
PictureBox1.Image = img でピクチャーボックスに拡大表示

するとなんとSetPixelでセットした色が丸くピカーンと光ります。
並べると干渉したりします。

1pixelを四角く表示する方法を教えてくだされ。

リージョン作って黒く塗りつぶしたのを最初に作ったbitmapに描きこむのかなー?
その方法もよくわからんし、助けてー
0770デフォルトの名無しさん2008/04/19(土) 22:21:28
日本語でおk
0771デフォルトの名無しさん2008/04/19(土) 22:39:44
懐かしいコピペだな
0772デフォルトの名無しさん2008/04/20(日) 08:01:03
超初心者的質問で恐縮なのですが、ダイアログボックス表示について質問させてください。
下のように、ダブルクリックしたときにリソースエディタで作成したIDD_DIALOG1のダイアログを
表示させたいのですが、どうすれば表示できるのでしょうか。
開発環境はVisual C++ 2005です。


void CChildView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。

/* ここでダイアログボックスを表示させたい */

CWnd::OnLButtonDblClk(nFlags, point);
}
0773デフォルトの名無しさん2008/04/20(日) 10:46:31
VC超初心者です。
ソリューション、プロジェクトのプロパティで、
構成のデバック、リリースて切り替えることで、なにか変化あるのでしょうか?
0774デフォルトの名無しさん2008/04/20(日) 11:38:20
ファイルサイズが違う。生成されるコードも違う。そもそもデバッグビルドは再配布禁止。
0775デフォルトの名無しさん2008/04/20(日) 13:28:38
>>772
mfc ダイアログボックス

でぐぐれ
0776デフォルトの名無しさん2008/04/21(月) 01:36:45
以前、C++相談室スレでも質問したのですが解決せず、原因はVC++の設定にあるようなので、
こちらで再度、質問させてください。

ttp://www.asahi-net.or.jp/~yf8k-kbys/newcpp18.html
このサイトを見ながらC++の基礎を勉強しているのですが、このページのデストラクタのサンプルプログラムを
VC++2008EEに打ち込んでも「消滅しました」のメッセージが出ないのですが、考えられる原因はありますでしょうか?

ページ内にある2つのプログラム両方で、「生成されました」「呼び出されました」のメッセージは表示されるものの
デストラクタの「消滅しました」に関する部分だけスルーされているように表示されないのです。
筆者の書いたものをコピペしても解決しないうえ、C++相談室スレでの報告によると、
報告者の環境では問題なく表示されているそうです。

宜しくお願いします。
0777デフォルトの名無しさん2008/04/21(月) 01:39:30
とりあえず中間ファイルを消して、
ディレクトリ全体を zip なり lzh なり圧縮してうpしてくれ。
0778デフォルトの名無しさん2008/04/21(月) 02:06:22
>>776
VC2008に原因を求めるよりは、君に原因を求める方が早い。 
打ち込みミスとか、そのまんまなら打ち込みでなくコピペするから、それ以前で何か思い違いがあるとか。
つまり>>777に従ってくれるのが手っ取り早い、と。

#ああ、>>777getしたかった。。
0779デフォルトの名無しさん2008/04/21(月) 02:14:50
C++/CLIなので
デストラクタじゃなくて、ファイナライザが動いてるとか
0780デフォルトの名無しさん2008/04/21(月) 02:32:50
あー、それありそう。
0781デフォルトの名無しさん2008/04/21(月) 02:32:59
…と思ったけど、
どのみちlocal変数だから
デストラクタが呼ばれるか…

ちなみに、 VC2008EE で試してみたけど
いずれもちゃんとデストラクタが呼ばれたぞ。
07827762008/04/21(月) 03:33:59
中間ファイルというのがよく分らなかったので、とりあえず丸ごとUPしました。
http://kissho.xii.jp/1/src/1jyou33385.zip.html
DLKeyは「cpp」です。

こういったファイルに個人情報が自動的に含まれてしまうのか分りませんが、
もしあったら削除しておいてください^^;
ちなみに、アップ前にもう一度テストしてみましたが、やはりダメでした。

宜しくお願いします。
0783デフォルトの名無しさん2008/04/21(月) 04:12:53
分かったわ。
デバッグ実行してるだろ?
pause の部分ではまだデストラクタは実行されないから、
そこでは消滅しましたってところは表示されない。
で、何かキーを押したらデストラクタが実行されて表示されるんだけど、
すぐウィンドウが閉じられるからそれを見ることは出来ない。
Ctrl+F5 で実行してみれ。
0784デフォルトの名無しさん2008/04/21(月) 04:26:33
KENT君乙
0785デフォルトの名無しさん2008/04/21(月) 11:03:36
学習過程はC→C++→API→MFCといった順序がよろしいのでしょうか?
0786デフォルトの名無しさん2008/04/21(月) 12:41:26
どんな順序でも覚えられれば何でもいいが、その順序は悪くない
0787デフォルトの名無しさん2008/04/21(月) 13:37:54
>>785
ベストといっても過言ではない
07887762008/04/21(月) 15:02:24
>>783
pauseがダメだったんですね。。。
ctrl+F5で実行してみます。ありがとうございました。

>>784
そこは分っちゃうんですね^^;
0789デフォルトの名無しさん2008/04/21(月) 17:16:41
Visual studioでコンソールアプリケーションを実行したときに、cmd以外(ckwなど)で実行させる方法ってありますか?
0790デフォルトの名無しさん2008/04/21(月) 17:27:38
実行させるプログラムを書く
0791デフォルトの名無しさん2008/04/21(月) 17:36:21
具体的に何がしたいのか。
パイプを標準入出力として子プロセスでコンソールアプリを動かすのはよくやる。
0792デフォルトの名無しさん2008/04/21(月) 17:43:07
適当にコード書いてF5押してデバッグ開始したら、cmd.exeの代わりに別のもので実行するようにしたいのです
0793デフォルトの名無しさん2008/04/21(月) 18:48:27
ここ初心者スレだし
通常と異なる特殊な使い方の質問はスレ違いとしか思えない
0794デフォルトの名無しさん2008/04/21(月) 18:51:17
普通か特殊かなんて初心者に求めるなよ
Visual C++で書いてんならスレ違いじゃないだろ
0795デフォルトの名無しさん2008/04/21(月) 19:00:15
はっきり言ってスレ違いです
0796デフォルトの名無しさん2008/04/21(月) 19:03:55
cmd.exeが起動されてるんだったらそれを違うものに置きかえるだけ
0797デフォルトの名無しさん2008/04/21(月) 19:11:12
cmd.exe呼んでるかねぇ
0798デフォルトの名無しさん2008/04/21(月) 21:15:18
コマンドプロンプトにprintf命令で文字を表示させたいんだけど、実行するとすぐにコマンドプロンプトが消えます。
getchar()でコマンドプロンプトが消えるのを止めるしかないんですかね?
0799デフォルトの名無しさん2008/04/21(月) 21:27:00
>798
それがwindowsの仕様で正常な動作
別に変でもなんでもないから気にするな
というかコンソールプログラムはコンソールで使うものだ
0800デフォルトの名無しさん2008/04/21(月) 21:29:39
もうVCスレにはFAQでテンプレに入れた方がいいんじゃないかってくらい多い・・・
0801デフォルトの名無しさん2008/04/21(月) 22:46:51
VC++2005とVC++2008ってどっちが使いやすい?
両方触ったことある人に聞きたい
0802デフォルトの名無しさん2008/04/21(月) 22:51:07
機能を使いこなせてないと、どっちも変わらないとおもうぞ。
0803デフォルトの名無しさん2008/04/21(月) 23:33:19
>>802
そっか
それなら最新の2008版にしてみる
情報サンクス
0804デフォルトの名無しさん2008/04/22(火) 01:12:32
C++を学ぶオススメサイトってやっぱ猫でもわかるってヤツ?
0805デフォルトの名無しさん2008/04/22(火) 01:18:48
ねこは嫌
0806デフォルトの名無しさん2008/04/22(火) 02:31:19
wisdomsoftってとこで今勉強してるけどこれ良いんだろうか
0807デフォルトの名無しさん2008/04/22(火) 02:49:31
Kitty on your lap か? 俺は使い方とかの参考で世話になった。

俺の経験を言わせて貰えば、猫もそうだけど、この手のサイトは函数の使い方の確認にして、
詳細はMSDNみたり、実際に簡単なテストコード組んでためしたほうがいい。
0808デフォルトの名無しさん2008/04/22(火) 03:33:09
コンソールアプリ作るならまずはDOS窓使いこなせよ
0809デフォルトの名無しさん2008/04/22(火) 05:18:24
C++ を学びたいのか Windows プログラミングを学びたいのかで
大きく変わってくるな。
0810デフォルトの名無しさん2008/04/22(火) 09:26:52
>>798
これが最後だぞ
つ【Ctrl + F5】
0811デフォルトの名無しさん2008/04/22(火) 09:49:25
main()の最後にブレークポイントとかな
0812デフォルトの名無しさん2008/04/22(火) 09:50:36
>>808
DOS窓じゃなくてコマンドプロンプトって言え
0813デフォルトの名無しさん2008/04/22(火) 11:10:39
ちわ、MSに氏ね氏ねメールを送るところでした
マネージ形式でデバッグ中に中断してソースを変更してデバッグ開始すると
第2コンパイラが中間言語を解放しなくて(?
exeファイル削除できない>exeを作成できない>デバッグできないという状態になり
ログオフログオンをしないとデバッグが出来なくなり1日苦しみました
ちゃんとデバッグを停止しないといけないんですね、僕だけですか
これからお世話になると思いますがよろしくです、でわでわ
0814デフォルトの名無しさん2008/04/22(火) 20:12:22
タスクマネージャで〜.vhost.exeを殺せばええやん。
0815デフォルトの名無しさん2008/04/22(火) 20:12:33
なんなんだこれは
0816デフォルトの名無しさん2008/04/22(火) 22:47:36
おにいさんおねいさん、
ファイル操作について質問です。

−条件−
ログファイルがあって、アプリは1行書くごとにopen/write/closeを行います。
エラーが発生した際とアプリの開始・終了時に書き込みを行います。
ログファイルはサーバーPCに保存され、アプリ利用者(クライアントPC)からログファイルを見ることはできません。
保守担当がリモート接続でのみ見れます。

−質問内容−
アプリ起動中にログを見たいのですが、メモ帳などで見てしまうと、
排他がかかってしまい、アプリが書き込めません。
書き込みエラーでアプリが強制終了してしまいます。
どうしたらよいでしょうか?
ファイルが書き込み可能になるまでループさせるのがよいでしょうか?
今はファイルをコピーして、「コピー 〜 AAA.log」を見ています。
ファイル操作はMFCを利用しています。
おにいさんおねいさんよろしくです><
0817デフォルトの名無しさん2008/04/22(火) 22:50:26
CreateFileのFILE_SHARE_READ属性
0818デフォルトの名無しさん2008/04/23(水) 08:35:19
コピーできてるんなら読めないわけないだろ
0819デフォルトの名無しさん2008/04/23(水) 12:23:02
>どうしたらよいでしょうか?
メモ帳で見なければ良いんじゃないか
ログに対して外部から書き込みする必要が無ければ
排他ロックのかからないファイルオープンをするビューアーを探すか、作ればいい
>ファイルが書き込み可能になるまでループさせるのがよいでしょうか?
ファイル処理で、そういう作り方はする場合は結構ある(書き込みも指定サイズ書き込むまでループとか)
どちらにしても、タイムアウトは忘れずに
>今はファイルをコピーして、「コピー 〜 AAA.log」を見ています。
べつにこの方法で問題なければこれで良いような気もするが
ログを間違えて編集してしまう危険性が低くなるわけだし
0820デフォルトの名無しさん2008/04/23(水) 13:10:39
メモ帳で開いても排他なんてかかったか?
0821デフォルトの名無しさん2008/04/23(水) 14:12:33
>>801

2008の方が容量小さくね?
2005のプラットフォームSDKがファイルでかすぎる
0822デフォルトの名無しさん2008/04/23(水) 14:20:08
>>808

漢はフロッピー一枚で作る
0823デフォルトの名無しさん2008/04/23(水) 14:22:36
#include <stdio.h>

void main(){
int tdn;

for (tdn=0;tdn<100000;tdn++){
printf("アッー!");
}
}
0824デフォルトの名無しさん2008/04/23(水) 17:26:46
vectorの配列を作ろうと思い

vector<vector<string> > vecStrDim;
vector<string> vecStr;
string strTest = "test";

vecStr.push_back(strTest);
vecStrDim[0].push_back(vecStr);

とやってみました。コンパイルは通るのですが
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
とでて実行してもデバッグエラーになります

vecStrDim[0].push_back(vecStr);が悪いのはわかるのですが、方法が思いつきません
どうすればデバッグエラーを対処できるのでしょうか?
0825デフォルトの名無しさん2008/04/23(水) 17:40:09
字が読めないのか?
Please contact the application's support team for more information.
Please contact the application's support team for more information.
Please contact the application's support team for more information.
Please contact the application's support team for more information.
Please contact the application's support team for more information.
0826デフォルトの名無しさん2008/04/23(水) 18:56:09
>824
C++のスレあるだろ

【初心者歓迎】C/C++室 Ver.59【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1206809426/
0827デフォルトの名無しさん2008/04/23(水) 18:57:45
>>826
申し訳ない、スレ違いでしたか
0828デフォルトの名無しさん2008/04/23(水) 20:04:26
×vecStrDim[0].push_back(vecStr);
○vecStrDim.push_back(vecStr);

ビルドが通るのはおかしい。どういう環境?
0829デフォルトの名無しさん2008/04/23(水) 20:29:39
>>828
vector<vector<string> > vecStrDim





[10];

ってなってたです。
08308162008/04/23(水) 23:15:55
サーバーにはエディタ含めサーバーAP以外をインストールしてはいけない契約になってて、
Windows標準のメモ帳やワードパッドでしか見れない状況です。

書き込み時のエラーを回避して正しく書き込めればいいので、
失敗したらどこかに、、
って自分で書いてて気が付きました><
メモリに持たせておいて排他が解除されたときに書けばいいですねっ!

おにいさんおねいさんありがとですっ(^-^)
0831デフォルトの名無しさん2008/04/23(水) 23:44:07
>>830
> メモリに持たせておいて

書く前に異常終了したら、そのログなくなってしまうからそんな解決策は
ダメダメだろ。

せっかく >>817 がヒント書いてるんだから、ちょっとぐらい調べたのか?

さっぱりわからんと言うなら、コピーしてメモ帳開くバッチファイルでも
作るほうがマシ。
0832デフォルトの名無しさん2008/04/23(水) 23:53:43
プログラムの一番最後に入れるだけじゃなく、cin命令を使ったあとにもgetchar()を入れないと、実行でコマンドプロンプトが消えるがなぜ?
0833デフォルトの名無しさん2008/04/24(木) 00:15:44
>>832
cinなどは改行文字を喰い残すから、その喰い残しの改行文字が(処理停止のための)入力で喰われてしまうから。
0834デフォルトの名無しさん2008/04/24(木) 08:28:27
>>830
メモリに確保するくらいなら、書き込み用のファイルと
閲覧用ファイルを別個に用意して
書き込み用に書いた後に、閲覧用にコピー
失敗したら、時間を置いてコピー
の方が良いな
0835デフォルトの名無しさん2008/04/24(木) 09:33:26
ちわ、>>813です
>>814さんのアドバイスを生かすことが出来ず力不足を感じてます
どうやらメモリが足りなかったみたいでセキュリティソフトを切ったら調子良いです
詳しいことは分からずじまいで悔しいです
Vistaでメモリ1Gじゃ辛いですかね

今はこんなソフトを作っています、まだソースには手を付けてませんが
ttp://www.dotup.org/uploda/www.dotup.org24874.png
年内には何とか・・・でわでわ
08368282008/04/24(木) 20:09:20
それだったらエラーにはならないけどな。(.net 2003)
0837デフォルトの名無しさん2008/04/29(火) 23:02:10
VS2005なんですが
なにか押したらソース内のtabが「→」に,スペースが「・」になってしまいました
これはどうやったら元に戻るんでしょうか
0838デフォルトの名無しさん2008/04/29(火) 23:09:49
>>837
どこかで反対の質問を見たような気がするが、ctrl+r ctrl+w なのだ
0839デフォルトの名無しさん2008/04/30(水) 09:11:18
質問です。

組込みプログラムでは一定時間たったら処理をするというタイマー割り込みができるのですが、
VisualC++2005のMFCでもそういった一定時間たったら処理ってのはできますか?
0840デフォルトの名無しさん2008/04/30(水) 09:14:35
とんぜん
08418392008/04/30(水) 09:56:05
WindowsアプリケーションではツールボックスにTimerがあったと思うんですが、
MFCだとそのようなコントロールが見当たらないのですが。

どのようにやったらいいですか?
0842デフォルトの名無しさん2008/04/30(水) 10:05:18
APIで対応してるって 一定時間停止やシグナル発生まで待ちとかできる
0843デフォルトの名無しさん2008/04/30(水) 10:27:26
組込みの割り込みに相当する機能あるのかな・・・?
SetTimer()だと、設定時間経過後にWM_TIMER発行するだろうけど、
実行中の関数を中断して割り込んで来ないし
0844デフォルトの名無しさん2008/04/30(水) 10:30:13
>>843
リアルタイムOSじゃないのにそんなレベルの割り込みなんて期待しないでください。
0845デフォルトの名無しさん2008/04/30(水) 10:32:59
APIならCreateWaitableTimer

MFC(Windowタイマかな)を使う方法は説明しづらいので検索してみて。
TimerというコントロールはMFCでは使えない。
0846デフォルトの名無しさん2008/04/30(水) 10:40:05
>>839
素直に、RT系ライブラリ組み込んだ方が良いよ
一時期、クリティカルにA/D値を1msでサンプルするソフト作ってたけど
どうやっても、windowsに制御が移ってしまうのに対応できなくて、結局RTライブラリ組み込んだ
0847デフォルトの名無しさん2008/04/30(水) 10:55:15
>>843
そんな機能はAPIレベルではない
マルチスレッドにして、割り込みをOSに期待するしかない
0848デフォルトの名無しさん2008/04/30(水) 12:35:26

Microsoft Visual C++ Toolkit 2003
ftp://195.252.112.9/programiranje/programski-jezici/VCToolkitSetup.exe

VCToolkitSetup.exe

size 32952488
sha1sum 956c81c3106b97042c4126b23c81885c4b5211f4

edonkey checksum
ed2k://|file|VCToolkitSetup.exe|32952488|c534888fa7605403dcb183d2d15282d1|/



08498392008/04/30(水) 13:37:24
皆さんありがとうございます。

ちなみにやりたいことはいろいろテストしてて、
その途中でエラー出したら即終了したいんですよ。

で、エラーフラグを作って定期的にそれを見に行って、
エラーが出てれば終了にしたかったのです。
0850デフォルトの名無しさん2008/04/30(水) 14:03:45
>>849
エラーを検出したら終了すればいいだけじゃん。
エラー監視の必要はないと思うのだけど。
# その為に例外機構があるのだし、変な小細工を弄する前にちゃんと言語の勉強しようよ。
0851デフォルトの名無しさん2008/04/30(水) 17:13:48
組込みと言ってるから外部の機器なんかを監視するんじゃないかな
0852デフォルトの名無しさん2008/04/30(水) 18:14:20
>>849
素直にマルチスレッドで作ったら?
0853デフォルトの名無しさん2008/04/30(水) 18:41:03
CreateDialogでダイアログを作って、
親ダイアログを表示した後に子ダイアログを表示させたいんですけど、
WM_INITDIALOGが来た後に必ず来るメッセージってありますか?

08548532008/04/30(水) 18:42:12
失礼。
CreateDialog()じゃなくてDialogBox()でした。
0855デフォルトの名無しさん2008/04/30(水) 18:54:18
WM_INITDIALOGじゃだめなんだろうか
0856デフォルトの名無しさん2008/04/30(水) 18:56:12
WM_INITDIALOGでユーザーメッセージを自分にPostすれば?
08578532008/04/30(水) 19:08:35
一応、
WM_INITDIALOGでの処理の最後で自作のウインドウメッセージをPOSTし、
そこで子ウィンドウを作成する処理を書いたんですけど、変わらず
親ウインドウ表示の前に子ウィンドウが表示されてしまいました。
0858デフォルトの名無しさん2008/04/30(水) 19:14:57
そんなに表示される順序が大事なら
WM_SHOWWINDOW使って判定しろ。
08598492008/04/30(水) 21:04:44
>>850
エラーがどこで出るかわかんないんでエラーを常に監視したいんです。
で、エラーが出たらもちろん終了させます。
0860デフォルトの名無しさん2008/04/30(水) 21:16:01
エラーと言ってもいろいろあるから話が通じない
0861デフォルトの名無しさん2008/04/30(水) 21:16:40
常に監視したいという割には、
タイマーなんてたまにしか呼び出されないものを使おうとする意図がよくわからん。

で、エラーというのは具体的に何?
関数なんかがエラー値を返すというならmallocみたいにきちんと戻り値確かめろ。
C++例外ならキャッチしろ。アクセス違反なんかならSEHとかで同様に捕まえられる。
08628532008/04/30(水) 21:17:53
とりあえずいろいろ試してみます。

コメントありがとうございました。
0863デフォルトの名無しさん2008/04/30(水) 21:48:15
すみません。C言語の基礎を一通り覚えたところで
C++を始めようと思って調べだしたのですが
ただ文字の出力を行うだけでも
Console::Write("");
と
cout<<"";
があってどちらの勉強をしていけばいいのか混乱しています。

勉強するにあたって参考になるサイトがあれば教えて欲しいです。
0864デフォルトの名無しさん2008/04/30(水) 21:54:34
どっちも使わない
0865デフォルトの名無しさん2008/04/30(水) 21:57:49
TextOutかDrawTextかSetWindowTextあたりを使う
他にもあるかも
0866デフォルトの名無しさん2008/04/30(水) 21:57:55
どっちでもいいけど世の中の書籍ではcout<<"";使ってる方が多いからこっち使っとくのお勧め。
0867デフォルトの名無しさん2008/04/30(水) 22:00:13
というかConsole::Writeが使えるC++コンパイラと言えば、VC++しかない罠。
要.NET Frameworkだし。
0868デフォルトの名無しさん2008/04/30(水) 22:03:10
ということは基本的にメジャーなcout<<"";からはじめているC++の入門サイト
からはじめたほうがいいということですね!
できればオススメの書籍なんかも教えて欲しいのですが・・・これから買おうと
思っているので参考にしたいです。
0869デフォルトの名無しさん2008/04/30(水) 22:04:18
Nクイーン問題を解くプログラムの一番分かりやすい(オススメ)サイトあります?
0870デフォルトの名無しさん2008/04/30(水) 22:07:53
単にC++を勉強したいならcoutでじゅうぶんだろうけど
VC++ではほとんど使わない
0871デフォルトの名無しさん2008/04/30(水) 22:15:44
>>870
C++とVC++の違いがわかりませんorz


僕はゲームプログラミングの勉強をしたくてC言語をいままで独学でやって
きたんですが今日図書館で借りた「アドベンチャーゲームプログラミング」
という本の内容を見てまったく理解できず

 Cを今までやってた意味ってあったのかな・・・と思い、基本はだいたい
把握できたはずなので、C++に踏み出そうと決めました。
正直今、勉強の方向性を見失ってる状況でもあります。
0872デフォルトの名無しさん2008/04/30(水) 22:30:31
C++はプログラミング言語の1つ。
VC++は、MicrosoftのC++コンパイラ、IDEなどがセットになった製品。
0873デフォルトの名無しさん2008/04/30(水) 22:30:56
>>868
最近、本を出したロベールさんのとこはどう?
0874デフォルトの名無しさん2008/04/30(水) 22:38:40
>>872
回答有難うございます。
C++が言語でVC++がコンパイラだということがわかりました!
細かいことはやっぱり二つとも使ってみないとわからないですよね・・・><

>>873
回答有難うございます。
とてもわかりやすいサイトですぐにでも始めたくなりました!
0875デフォルトの名無しさん2008/04/30(水) 22:56:53
教えてください
オフスクリーンビットマップは最大幅4000pixelくらいまでしか扱えないようですが
もっと大きい画像を表示させたい場合どうすればよいのでしょうか・・・
0876デフォルトの名無しさん2008/04/30(水) 23:07:08
coutでゲームプログラミング
0877デフォルトの名無しさん2008/04/30(水) 23:09:10
>>876
入門はハローワードからでしょ;;
0878デフォルトの名無しさん2008/04/30(水) 23:45:56
というかConsole::WriteはC++/CLIで、C++を含んではいるが別言語と思ったほうがいい。
0879デフォルトの名無しさん2008/05/01(木) 00:36:46
>>838
ありがとうございます
助かりました
0880デフォルトの名無しさん2008/05/01(木) 04:00:43
文字出力はprintf()しか使わない
0881デフォルトの名無しさん2008/05/01(木) 04:05:30
>>871
ゲームプログラミングをするなら
まずはバイナリデータの扱いに慣れる事だな
2進数、16進数、アドレス、ポインタについても知っておく必要がある
最低でもこれらを理解していないとどうしようもない
0882デフォルトの名無しさん2008/05/01(木) 04:09:09
>>871
C++とVC++は別
いくらC++を勉強してもVC++ができる訳ではない
DirectXとWindowsAPIをやらないと出来ない
0883デフォルトの名無しさん2008/05/01(木) 04:17:33
>>869

http://www.ic-net.or.jp/home/takaken/nt/queen/
0884デフォルトの名無しさん2008/05/01(木) 04:24:34
バイナリデータやC++はゲーム作るのに必ず必要とは限らない
HSPやDarkGDKを勧める

【HSP】HSPで3Dゲーム 2 【3D】
http://pc11.2ch.net/test/read.cgi/gamedev/1181967317/

DarkGDK
http://pc11.2ch.net/test/read.cgi/tech/1208941132/
0885デフォルトの名無しさん2008/05/01(木) 04:58:47
>>884
わざわざC言語からゲーム作ろうとする人は
ゲーム作るってのはあくまでモチベーションを保つための目標であって、
C言語習得が目的だと思っているんだがどうか
0886デフォルトの名無しさん2008/05/01(木) 05:44:21
何やっていいか知らないだけ
0887デフォルトの名無しさん2008/05/01(木) 05:55:23
>>884
ゲームプログラミングの「勉強」をするのには向いてないだろ
楽にゲームをつくりたいならそれでもいいが

HSPはともかくDarkGDKの方は日本人の初心者に勧めるのはどうかと思うしな
0888デフォルトの名無しさん2008/05/01(木) 06:12:35
Dark GDKはDirectX9cフルサポート。マイクロソフトVS2008/VC++のオプションとして無料配布。
初心者を強く意識した設計になっているので、あとは日本語の入門書でもあれば、小学生がひとりで、
3Dゲームを作ってしまう、なんてこともできそうです。もともと DarkBasic というホビーユーザー向けのゲーム開発ツールがあって、
その開発スタイルを C++ に持ってきたのが DarkGDK ということらしいですが、悪くありません。
http://myhome.cururu.jp/kacom/blog/article/21001671006
0889デフォルトの名無しさん2008/05/01(木) 06:40:06
あっそ
0890デフォルトの名無しさん2008/05/01(木) 08:29:36
listviewで一行に大きいアイコン小さいアイコンを表示するにはどうしたらいいですks?
┌──┐  
│   │  ┌─┐
│   │  │ ..│  ┌┐
└──┘  └─┘  └┘

また代替方法があったら教えてください
0891デフォルトの名無しさん2008/05/01(木) 10:13:38
>>885
俺は逆だったけどね
プログラムは手段であって、ゲームを作るのが目的
思い起こせば20年前、イースを自分で作りたいと思ってマシン語をやり始めたのが懐かしいw
0892デフォルトの名無しさん2008/05/01(木) 10:14:45
ふつうはなるべく実用的な速度が出せて完成されられるやつ選ぶよな
0893デフォルトの名無しさん2008/05/01(木) 10:16:20
>>890
アイコンを小さく描画した大きいアイコンを使う。
それかオーナードローとか。
0894デフォルトの名無しさん2008/05/01(木) 10:16:59
趣味ならHSPでもいいだろうし、ゲームツクールでもいいだろ
プログラムを仕事にしたいならC/C++だろう
0895デフォルトの名無しさん2008/05/01(木) 11:18:05
本当にゲーム業界に入るのを目指してるなら、
最初からVC++とDirectXで組むくらいでいかないと。
それでできないなら辞めた方がいい。
趣味なら別になんでもいい。
0896デフォルトの名無しさん2008/05/01(木) 12:14:57
>>892
ゲームプログラミングって、結局そこなんだよ
最初に、簡単な言語をつかってソフト組んで見る
で、おもったよりスピードが出ないのでほかの言語でためす
で、最後にアセンブラ最強!と叫ぶ
0897デフォルトの名無しさん2008/05/01(木) 12:47:18
最初から出来る限りのスピードが出る言語で組む
動作環境を推定する
デザイナーにその環境内で動作可能なデータを指示する
0898デフォルトの名無しさん2008/05/01(木) 14:19:01
BASIC から C に乗り換えた際に
あまりのスピードの違いに勃起した
0899デフォルトの名無しさん2008/05/02(金) 03:15:11
で、C#にいってまた萎える訳か
0900abc...xyz2008/05/02(金) 14:29:14
VisualStudio2005 でC++のコンパイルしていますが、
「cl : コマンド ライン warning D9025 : '/EHs' より '/EHa' が優先されます。」
っていう警告を出ないようにしたいんですが、どうしたらいいでしょうか?
/EHaの例外を処理するようにしたいです。

MSDNみたけど、解決できませんでした。
http://msdn.microsoft.com/ja-jp/library/8k3f51f1(VS.80).aspx

お互いに排他なオプションなんだから
/EHsを外せばいいだけだと思うんだけど

/EHs ってどこで定義されていますか?
0901デフォルトの名無しさん2008/05/02(金) 14:37:27
マルチ死ね
0902デフォルトの名無しさん2008/05/02(金) 15:00:36
答えようと思ったが、、、マルチならやめとく
0903デフォルトの名無しさん2008/05/02(金) 15:05:53
はわわ〜
0904abc...xyz2008/05/02(金) 15:06:43
答えがあるのかな?
0905デフォルトの名無しさん2008/05/02(金) 16:31:35
メアドにcomが入ってる奴のレスはあぼんされる
0906デフォルトの名無しさん2008/05/02(金) 23:28:25
インスタンス内に動的な構造体の配列を確保したいのです。
C言語混じりで書くと下のようなイメージですが・・・
VC++ ではどのように書くとよいのでしょうか?


typedef struct {
} HogeElem;

ref Hoge
{
private:
HogeElem *array;
public:
Hoge(int cnt);
}

Hoge(int cnt)
{
Hoge::array = malloc(cnt, sizeof(HogeElem));
}

0907デフォルトの名無しさん2008/05/02(金) 23:58:42
VC++なんて言語は無い。
C++なのかC++/CLIなのかはっきりしてくれ。
0908デフォルトの名無しさん2008/05/03(土) 00:02:00
>>906
C++ならこうかな。
class Hoge
{
private:
HogeElem *array;
public:
Hoge(int cnt);
:array(new HogeElem[cnt])
{
}
~Hoge()
{
delete[] array;
}
};
0909デフォルトの名無しさん2008/05/03(土) 00:36:15
>>908>>906
変なタイミングで例外が投げられることを考えるとやってられないので、
std::vector使えということになる。
09109062008/05/03(土) 05:22:46
レスありがとうございます。

>>907
ごもっともです。C++/CLI と書くべきでした。
結局、まずはC++をきちんと学ばねばと感じることになりましたが。

>>908
なるほど。 new をそのように使うのですね。
当面の問題は解決しました。ありがとうございます。

>>909
今の私には理解できませんでしたが、調べてみます。
0911デフォルトの名無しさん2008/05/03(土) 16:50:05
Javaを経験し、現在VC++でのアプリ開発を勉強し始めました。
テキストファイルを監視し続け、新しく更新された場合
更新内容(文字列)をフォームに表示するというものを作ろうとしているのですが、
Application::Runでフォームを出すとそこでメッセージループに入りJavaとは違い制御が戻ってきません。
テキストファイルを監視する処理のループは別スレッドを起動しておくという形になるのでしょうか?
0912デフォルトの名無しさん2008/05/03(土) 16:58:30
自分で監視しなくても更新あったらメッセージくる
0913デフォルトの名無しさん2008/05/03(土) 17:01:32
別スレッドだったり、タイマだったり。好きなほう選べば。
0914デフォルトの名無しさん2008/05/03(土) 19:05:54
backgroundWorkerなんてものがあるんですね。
無事別スレッドで思い通りの機能を実現できました。

レスありがとうございます。
0915デフォルトの名無しさん2008/05/03(土) 22:47:27
本読み見ながらC++勉強してるんですが、2元配列の初期化がよくわからないのですが
ループ処理でChar型の2元配列を初期化するとき、どのような記述を行えばいいのでしょうか?
0916デフォルトの名無しさん2008/05/03(土) 22:49:37
ごめんなさい、ここはVC++の質問スレでした・・・ごめんなさいOTL
0917デフォルトの名無しさん2008/05/03(土) 22:53:18
>>910
C++/CLIならHogeElem *をarray<HogeElem>に、newをgcnewに書き換えれば、
ref型で使えるようになってdelete[]要らず。
0918デフォルトの名無しさん2008/05/04(日) 00:09:57
VB2008EEやVC#2008EEでデスクトップアプリを作り、そのメモリ食いに愕然としてVC++2008EEでWin32アプリを作ろうと思っています。

MessageBox以外のウィンドウを一切表示しない、そもそもウィンドウを作らないアプリはどのプロジェクトを選択し、プロジェクトの何処のプロパティを変更すれば良いのでしょうか。

Win32コンソールプロジェクトでwindows.hをインクルードしましたが、コンソールウィンドウとダイアログの両方が表示されてしまい、コンソールウィンドウを起動時から消す事が出来ません。

Win32ウィンドウプロジェクトは表示されるソースの意味すら解らず、適当にファイルを削除したら大量のエラーが出て何も出来ませんでした。
0919デフォルトの名無しさん2008/05/04(日) 01:07:22
>>918
Win32コンソールプロジェクトから改変していくのが楽。

プロジェクトを作った後、(プロジェクト名).cppの
int _tmain(int argc, _TCHAR* argv[])
をこう書き変える(もちろん引数の名前はお好きに)。
int WINAPI _tWinMain(HINSTANCE hinst, HINSTANCE, PTSTR pszCmdLine, int nCmdShow)

次にstdafx.hを開き、#include <windows.h>を追加して、
#include <stdio.h>を消す(使わないなら)。

さらに、VC++ 2008ならtargetver.hを開いて
_WIN32_WINNTの値をせめて0x0500 (Windows 2000)くらいにしておくのが吉。

最後にプロジェクトのプロパティ。先に構成で「すべての構成」を選んでおくといい。
リンカ→システム→サブシステムで、Windows (/SUBSYSTEM:WINDOWS)を選択してOK。
09209182008/05/04(日) 01:48:53
>>919
出来ました、ありがとうございます。

これは要するに_tmainをGUIアプリのエントリポイントである_tWinMainに置き換えるけど、ウィンドウを作る処理やリソースを用意しないという事でしょうか。
0921デフォルトの名無しさん2008/05/04(日) 06:34:02
>>920
そういうこと。
だから、_tWinMainに変えることとリンカのサブシステムの設定を変えることが要点。
0922デフォルトの名無しさん2008/05/04(日) 09:44:52
プリプロセッサの設定に_CONSOLEがあったら_WINDOWSに変えたほうが良かったかもかも
09239002008/05/04(日) 12:31:23
>>905 さんありがとうございます。
0924デフォルトの名無しさん2008/05/04(日) 12:59:37
バーカ
0925デフォルトの名無しさん2008/05/04(日) 17:37:31
初心者なんですが、教えてもらえますか?
0926デフォルトの名無しさん2008/05/04(日) 17:44:17
どうぞどうぞ
0927デフォルトの名無しさん2008/05/04(日) 18:31:14
>>921
解りました。

>>922
_CONSOLEがあったので_WINDOWSに変えておきました。

その後、stdafx.hに#include <shlwapi.h>を追加し、_tWinMain内でPathFileExistsを使ったところ、

LNK2019: 未解決の外部シンボル __imp__PathFileExistsW@4 が関数 _wWinMain@16 で参照されました。
LNK1120: 外部参照 1 が未解決です。

のエラーが出てしまいました。
lpCmdLineの値を使っても、L"C:\\WINDOWS\\system32\\winlogon.exe"などとしても駄目でした。
Win32ウィンドウプロジェクトから>>919になるよう削っても、純粋なWin32コンソールプロジェクトでも同じエラーが出ます。
原因は何でしょうか。
0928デフォルトの名無しさん2008/05/04(日) 18:48:33
>>927
その関数は追加されたヘッダ内で宣言されてるもの?
だったら、そのヘッダはC用に書かれてるんじゃないか?該当箇所をexternを "C" { }でくくって味噌
0929デフォルトの名無しさん2008/05/04(日) 18:52:21
いいかげんうざすぎ
0930デフォルトの名無しさん2008/05/04(日) 18:59:32
質問しても良いのと、自分で考えなくて良いってのは別だぜ
0931デフォルトの名無しさん2008/05/04(日) 19:34:49
>927
ヘッダとライブラリは別。
MSDNでPathFileExistsを参照して
必要なライブラリをプロジェクトに足せ。
09329182008/05/04(日) 20:14:59
丸一日試行錯誤したりググったりした上でどうしても判らなかったので再び訊きに来た訳ですが…。
「こんな事も解らないならC++なんて使うな」という事ですか。

使おうとしていたのは「Shell Utility API」というものです。
ttp://www5a.biglobe.ne.jp/~crab/winsdk/path_func.html

このAPIはググっても中々解説にヒットしなく、あっても組み込み方まで書いてある所がこの書き込みをするまで見つかりませんでした。

内包する別の関数でググったところ、漸く組み込み方が書かれている所に辿り着き、stdafx.hに書く方法も解りました。

#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib")

今回の件で「何故C++は習得が難しいのか」が解ったような気がしました。
0933デフォルトの名無しさん2008/05/04(日) 20:29:23
英語ページも検索できんやつはC++なんて使うな
0934デフォルトの名無しさん2008/05/04(日) 20:31:19
>>932
それC++関係ない
0935デフォルトの名無しさん2008/05/04(日) 20:39:00
学習始めていくらもたってないなら無理もないとこだけど、有る程度なれてくると、
未解決の外部シンボルエラー = ライブラリがリンク出来てない、ヘッダ宣言がない、ってのは脊髄反射的に連想される。
そうなったら、MSDNライブラリでその関数を探して必要なヘッダとライブラリを確認する
という一連の作業は、ゴルゴ13が懐から銃を抜いて背後のくせ者にぶっ放すのと同じくらいスムーズにやらにゃ。
0936デフォルトの名無しさん2008/05/05(月) 06:55:54
語尾ににゃとかかわいいな
0937デフォルトの名無しさん2008/05/05(月) 07:27:12
その発想はなかったわ
0938デフォルトの名無しさん2008/05/05(月) 09:15:32
年寄りくさい
0939デフォルトの名無しさん2008/05/05(月) 11:49:44
言いたいこともいえないこんな世の中じゃ
0940デフォルトの名無しさん2008/05/05(月) 11:52:19
ポイズンっ!
0941初心者2008/05/05(月) 16:35:55
Visual C# と C++ Builder をやってたけど
Visual C++ って、今から始めるなら
CLI と MFC のどっちがいいのかな。
0942デフォルトの名無しさん2008/05/05(月) 16:51:08
CLI は無料でMFCは有料
C#やってたらCLI は必要ないかも
0943デフォルトの名無しさん2008/05/05(月) 17:50:48
どちらも遣わずにWINAPIで
0944デフォルトの名無しさん2008/05/05(月) 23:34:08
ビルドしようとしてソリューションのビルドをしたら以下のようなエラーが出て
ビルドできません。環境に問題があるのでしょうか?

error PRJ0002 : エラーの結果 -1 が '' より返されました。

1>cl : コマンド ライン error D8045 : C ファイル '.\ara.c' を /clr オプションと共にコンパイルできません
0945デフォルトの名無しさん2008/05/05(月) 23:57:03
CのCLRってあるのか?CPPにしてみれ
0946デフォルトの名無しさん2008/05/06(火) 01:17:14
あるいはプロジェクトのプロパティからマネージ拡張をオフにしろ。
0947デフォルトの名無しさん2008/05/06(火) 01:30:50
>>941
C#とC++Builder使ってるなら、理由がない限りVC++に移るメリットって薄いような気がするが。
0948デフォルトの名無しさん2008/05/06(火) 10:58:14
メリットなんて人によって違うだろ。

会社で使うからとか言う理由かも知れんし。
0949デフォルトの名無しさん2008/05/06(火) 11:01:20
俺Vって文字が好きだからVC++使ってるんだぜ……
0950デフォルトの名無しさん2008/05/06(火) 11:37:08
ゲイツの策略にひっかかったな
0951デフォルトの名無しさん2008/05/06(火) 11:56:02
window.hってどこにあるんだよ・・・・
0952デフォルトの名無しさん2008/05/06(火) 12:00:42
脳内
0953デフォルトの名無しさん2008/05/06(火) 12:04:40
windows.hだった
間違えた死にたい
0954デフォルトの名無しさん2008/05/06(火) 14:43:04
2005 Expressだと自分でPlatformSDK入れないと無いよ。
2008 Expressだと一緒に入ってた、気がした。
0955おやじPG2008/05/06(火) 20:14:28
すいません、VC++初心者なのですが、図々しくも質問させてください。
SYSTEMTIME構造体の加減算を簡単に行う関数や方法を教えてください。
処理時間をミリ秒3桁まで取りたいのですが、現在 

SYSTEMTIME st_s, st_e;

::GetLocalTime(&st_s);

何かの処理・・・

::GetLocalTime(&st_e);

として時間をとっていますが st_s と st_e の差がとれる関数OR方法を知りません。

MSDNなどでみるとFILETIME構造体に変換してなどと書かれていますが、
そのFILETIME構造体の加減算を行う関数を知りません。
どなたか回答おねがいします。

開発環境は MFC VS2008を使用しています
0956デフォルトの名無しさん2008/05/06(火) 20:44:09
SystemTimeToVariantTimeでいけるかも。

(参考)
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200609/06090056.txt

単に処理時間だけ必要で日時の情報が必要ないのなら
GetLocalTimeの代わりにGetTickCount()でいいと思う。
09579562008/05/06(火) 20:47:37
ちゅうか処理時間を取りたいって書いてたね。
ミリ秒3桁という表現は変なんだが、ミリ秒の単位までってことだよね。
それならGetTickCount()でいいと思われ。
0958デフォルトの名無しさん2008/05/06(火) 20:51:29
MMTIMEでもいいんじゃないの?と独り言
0959デフォルトの名無しさん2008/05/06(火) 21:46:42
マゾマゾた〜いむッ!!!
0960おやじPG2008/05/06(火) 21:50:42
>956
>957
>958
早いレスありがとうございます。
0961デフォルトの名無しさん2008/05/06(火) 22:34:28
FileTimeは実体としては単なる64bit整数とみなせるので、無理矢理キャストして
引き算して、10とか10000とかで割ればいい。

int64_t fts, fte;
GetSystemTimeAsFileTime( (FILETIME*)&fts );
処理
GetSystemTimeAsFileTime( (FILETIME*)&fte );

dif_milisec = (fte - fts)/10000;
dif_usec = (fte - fts ) / 10;
0962デフォルトの名無しさん2008/05/06(火) 23:39:37
>>960
余計なお世話だが、GetTickCount() は起動後約 49日で一周するから、
もしサーバー用途のソフトのような長期間稼動するソフト作ってるな
らちょっと注意した方がいい。
0963デフォルトの名無しさん2008/05/07(水) 00:08:44
VC++2008EEで視覚スタイルを適用するにはどうしたらいいの?
手製のmanifestファイルをResource Hackerで差し替えたら「ランタイムが見つからないぞゴルァ」って怒られて起動しない。
ググってもマネージ関連しかヒットしない。
VB.NETやC#ならApplication.EnableVisualStyles()で一発なのに…。

↓手製のmanifestファイル

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" />
</dependentAssembly>
</dependency>
</assembly>
0964デフォルトの名無しさん2008/05/07(水) 01:40:19
>>963
そのマニフェストファイルをexeの出力先以外のフォルダに置いて、
そのパスをプロジェクトのプロパティの構成プロパティ
→マニフェストツール→入力と出力→追加のマニフェストファイルに書き込むんだ。

VC++ 2005から、CRTのDLLをmanifestで指定する必要があって、
VC++プロジェクトでビルドするとEXE内にそのためのmanifestが埋め込まれる。
Windows XPでは*.exe.manifestファイルがあると*.exeに埋め込まれたmanifestを無視するので、
CRT DLLを見つけられず、ランタイムが見つからないというエラーになる。
(たしかServer 2003/Vistaからこの優先順位は逆転したはず)

マニフェストツールはVC++リンカの吐いたmanifestと自分の書いたmanifestを混ぜて
できたmanifestをexeに埋め込む役目を担っている。
ちなみに、マニフェストツール本体mt.exeをコマンドプロンプトなどから直接使うと、
exeからmanifestを取り出すなどもう少し色々できる。
0965デフォルトの名無しさん2008/05/07(水) 03:37:25
microsoft visual c++ 2008 Express edition
をダウンロード&インストールしたのですが、使い方がまったくもってわかりません。
大学の講義でC言語を使うので、それのコンパイルなどをしようと思ったのですが…

誰かやり方を教えてください。
0966デフォルトの名無しさん2008/05/07(水) 05:44:48
>>965
[ファイル]->[新規作成]->[プロジェクト]->[Win32]->[Win32コンソールアプリケーション]
プロジェクトを作る場所、プロジェクト名を決定し、[OK]
[次へ]を選択し、[追加のオプション]で[空プロジェクト]を選択し[完了]
デフォルトでは左に表示される[ソリューションエクスプローラ]のツリー内の[ソースファイル]を右クリック
[追加]->[新しい項目]->[C++ファイル(.cpp)]
追加したいファイル名を入力して[OK]、拡張子まで書けば*.cにもできる。
で、ファイル内に以下のコードを記述する
#include<stdio.h>
int main( void ) {
puts( "ググレカス" );
return 0;
}
[Ctrl + F7]でビルドする。エラーがなければ[F5]で実行。
すぐにコマンドプロントが消えるのは仕様。出力結果を残したいならば[Ctrl + F5]で実行すればいい。

とりあえず、俺の環境ならこんな感じ。

0967デフォルトの名無しさん2008/05/07(水) 06:55:34
ACMLという線形代数ライブラリのdgesvdという関数を使いたいのですが、
このライブラリは関数のシンボルの先頭に_がついておらず、そのまま
dgesvdというシンボルで関数が入っています。
Visual C++で.cのファイルを作り(つまりCでコンパイルさせる)、
dgesvd(〜〜)と呼んでも、リンカは_dgesvdを探してしまうのでどうにかdgesvdを使うように
コンパイラを指定したいのですが、どうすればよいのでしょうか。
使用環境はVisual Studio 2008です。
0968デフォルトの名無しさん2008/05/07(水) 07:32:12
>>966
ありがとうございました。
学校から帰ったらためしてみます。
0969デフォルトの名無しさん2008/05/07(水) 09:40:49
>>964
ありがとうございます、出来ました。
manifestで使用ランタイムを明示する必要があったのですか…。
mt.exeに関してはMSDNライブラリ(翻訳でexe山に…)より/?で見た説明の方が詳しいのが謎ですが、色々試してみます。
本当にありがとうございました。
0970デフォルトの名無しさん2008/05/07(水) 12:42:40
>>967
_stdcallを使うと_はなくなるけど引数は右から左でスタックは関数側で開放になる。どんな呼び出し規約かは取り説に書いてあるだろうから確認してから使うべし。
0971デフォルトの名無しさん2008/05/07(水) 13:00:57
>>970
_stdcallもやってみたのですがうまくいきませんでした。
void _stdcall dgesvd(char jobu, char jobvt, int m, int n, double *a, int lda, double *sing, double *u, int ldu, double *vt, int ldvt, int *info);
→_dgesvd@48
void _cdecl dgesvd(char jobu, char jobvt, int m, int n, double *a, int lda, double *sing, double *u, int ldu, double *vt, int ldvt, int *info);
→_dgesvd
void _fastcall dgesvd(char jobu, char jobvt, int m, int n, double *a, int lda, double *sing, double *u, int ldu, double *vt, int ldvt, int *info);
→@dgesvd@48

のようになりました。一方、ライブラリを見ると
dumpbin /exports libacml_mp_dll.dll
のなかにdgesvdというのがあります。
(静的ライブラリとしてlibacml_mp_dll.libというのもリンクしています。DLLへの橋渡し?)
0972デフォルトの名無しさん2008/05/07(水) 14:12:21
ねぇ。VC++って求人ある? だいぶ勉強して色々つくれるようになったんだけど、
ぜんぜん求人みつからねえ。。Javaの派遣ずっとやってるんだけど、Javaはやりたくなくて
PerlとVC++がなんとなく好きでずっとやってたんだけど。。

両方求人みつからねぇぜ(;´д`)
0973デフォルトの名無しさん2008/05/07(水) 15:19:19
上の方でGetTickCountでミリ秒単位とあるけど
ミリの1桁が必要ならGetTickCountじゃ無理だよ
やってみればわかるが、GetTickCountだと15msec位の周期でしか計測できない
まともに計りたいなら、マルチメディアタイマーかCPUカウンター使った方がいいよ
0974デフォルトの名無しさん2008/05/07(水) 15:49:54
>>972
就職フェアでお待ちしております。
0975デフォルトの名無しさん2008/05/07(水) 16:03:07
みなさんのお知恵を拝借したいのですが・・・・よろしくお願いします。


関数 A、Bがあったとします。
�@関数A から構造体のポインタを引数として、関数 B を呼び出します。
�A関数Bの中で、 (Aから引き渡された)構造体のポインタに、 mallocでメモリ確保します。
�B関数Aの最後で、  free(構造体のポインタ) をおこないます。


これは、正しくメモリを開放すると保証されますでしょうか?

同一のメモリアドレスを指し示しているので、問題はないと思われるのですが、
いまいち確信が持てません・・・。

また、 これらが、newおよび、deleteであった場合もご教示願いたいと思います。


よろしくお願いいたします
0976デフォルトの名無しさん2008/05/07(水) 16:06:53
>>975
文章を読む限り、誤解しているみたいだからサンプルコードを書いて味噌。
0977デフォルトの名無しさん2008/05/07(水) 16:32:56
>>976様

下記のようなコードになります。


main ()
{
int r ;
struct MASTER *master;
r = MakeData( & master);
//省略

free(&master)
}


MakeData( struct MASTER **master )
{
int hit ; // データの個数格納

/* 省略 (hit を算出しています*/

   //構造体hit個分確保
*master = (struct MASTER *)malloc(sizeof(struct MASTER) * hit );
return hit;
}
0978デフォルトの名無しさん2008/05/07(水) 16:51:27
>>977
>free(&master)
&付けちゃダメ。
上記以外は問題無い。

mallocをMakeData()でやるのが嫌なら、返ってきてからやればいいだけだけど。
0979デフォルトの名無しさん2008/05/07(水) 17:03:13
>>978様
ありがとうございます。

&は誤記です。大変失礼しました。


Makedataで行うのが嫌。 という訳ではなくて、前任者のコーディングが
このようになっていたためです。

前任者が、【new】で確保したものを【delete】し忘れたり、
【free()】 が漏れていたりと、とりあえず動けばいいやー的な
コーディングがなされており困っておりましたので、
大変助かりました。 本当にありがとうございました。

0980デフォルトの名無しさん2008/05/07(水) 19:31:41
ここVCスレだろ
0981デフォルトの名無しさん2008/05/07(水) 19:38:49
>>970
stdcallでも_はなくならない。
呼出規約に関係なく、公開する名前は自由に決められ、
Windows APIではそうなっているだけのこと。
0982デフォルトの名無しさん2008/05/07(水) 20:01:13
>>968
今頃気づいた。[Ctrl + F7]はコンパイルだった。

×:[Ctrl + F7]でビルドする。
○:[F7]でビルドする。
0983デフォルトの名無しさん2008/05/07(水) 20:14:43
>>979
その状況よく分かる。
他の人が同じ苦労をしないように、そんなソース書かないようにね。
0984デフォルトの名無しさん2008/05/07(水) 20:17:28
>>971
ドキュメントはないの?
09859712008/05/07(水) 21:45:01
>>984
http://raptor.bii.a-star.edu.sg/acml/Linking_002fWindows.html

これとバージョンだけ違うドキュメントがライブラリには入っていたのですが、
同じことをしても全くダメです…
…と思ったけど、VCの場合はリンクするスタティックライブラリとは別にDLLが必要ですが、
スタティックライブラリの設定とは別にDLLにはパスが通ってなければならないのだとしたら、
それですかね。PATHをいじるところまではやっていないので...

もう少ししっかりドキュメントを読んでみます。
0986デフォルトの名無しさん2008/05/07(水) 22:33:06
>>971
extern"C" を使えば@以降は消えると思う
intelMKLなら_degsvdでリンクできるからextern "C"でOKなんだがなあ。
09879712008/05/07(水) 22:44:09
>>986
それがすでにextern "C"状態なんです。ソースファイルの名前が〜〜.cなので。
http://ray.sakura.ne.jp/asm/9.html
によると、@以降はC++の関数オーバーロードのせいでなってるわけではなく、
_stdcall,_fastcallの呼び出し規約としてついてるみたいです。
結局、prefixの_がとれないとリンクできない...
0988デフォルトの名無しさん2008/05/07(水) 22:56:14
うざいから早いとこ埋めてしまおう
0989デフォルトの名無しさん2008/05/07(水) 22:57:28
どうしよもない馬鹿だな
09909712008/05/07(水) 23:01:36
急いでます今日中にお願いします。
09919712008/05/07(水) 23:03:07
すみません上げるの忘れました
至急お願いします
09929712008/05/07(水) 23:06:20
まだですか?
誰もいないの?
0993デフォルトの名無しさん2008/05/07(水) 23:07:46
>992
死ねば?
0994デフォルトの名無しさん2008/05/07(水) 23:09:43
>>992
ここはお前専用のサポセンではない
あくまで善意でやってるだけ
リアルな解決を求めるなら正当なところへ問い合わせろ馬鹿
0995デフォルトの名無しさん2008/05/07(水) 23:12:17
リンクしなきゃいい
0996デフォルトの名無しさん2008/05/07(水) 23:19:43
なるほど
0997デフォルトの名無しさん2008/05/07(水) 23:20:32
頭いいな
0998デフォルトの名無しさん2008/05/07(水) 23:21:26
998
0999デフォルトの名無しさん2008/05/07(水) 23:22:05
999
1000デフォルトの名無しさん2008/05/07(水) 23:22:26
1000なら俺に嫁ができて、プログラマ廃業できる
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。