■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

★初心者にVisual C++を教えるスレ★ Part22
251 名前:デフォルトの名無しさん :2005/12/06(火) 22:05:59
アセンブリコードみれるならデバッグビルドする必要ないのでは?

252 名前:デフォルトの名無しさん :2005/12/06(火) 22:21:23
>>250
デバッグのオプションとは別にアセンブリコードをはくだけのオプションがあるはず。

253 名前:デフォルトの名無しさん :2005/12/06(火) 22:23:43
>>251
あ、リリースビルドでも見れるのは見れるんですね、
知りませんでした・・・(;´Д`)
でもブレークポイントの設定等ができないのですが、
これは最初から追っていくしかないということでしょうか?


254 名前:デフォルトの名無しさん :2005/12/06(火) 22:25:40
>>250
デバッグしたいのなら兎も角、アセンブリ出力を見たいだけなら出力の設定だけ変えてReleaseビルドでよかろう。

255 名前:デフォルトの名無しさん :2005/12/06(火) 22:30:27
デバッグ実行させながらアセンブリ出力を見たいのかな?
Releaseビルドでもブレークポイントは張れると思うけど。
#但し、最適化の影響で順序は変わるし行は消えるしで、あまり意味はないけど。

256 名前:250=253 :2005/12/06(火) 22:34:41
なるほど、ブレークポイント置く行が悪かったのですね。
色々試してみます、どうもありがとうございました。

257 名前:デフォルトの名無しさん :2005/12/06(火) 22:37:47
誰もブレークポイントの話なんかしていない。

258 名前:デフォルトの名無しさん :2005/12/06(火) 22:40:02
だからそもそも、なんで実行しながらアセンブリ出力を見たいのかと。

259 名前:デフォルトの名無しさん :2005/12/06(火) 22:43:55
実行しながらアセンブリみたいなら軟氷でも使えばいいんでないかな

260 名前:250 :2005/12/06(火) 22:50:38
ゲームのコードなんで、計算が結構大量になったり特に当たり判定なんかは
かなりの回数のループになると思ったので、速いか遅いかを完全に無視という
わけにはいかないので、今のうちから最適化されたコードを
ブレークポイント置いて確認する方法を知りたいと思ったのです。
説明が足りなくてすみません。
問題のコードだけ十行くらいで書いてビルド、というのもありかもしれませんが
恐らくそれでは実際にゲームの中で書いてビルドした場合とかなり異なると
思ったのです。だからブレークポイント置いて、そのコードがどうなるか
知りたいのです。

261 名前:デフォルトの名無しさん :2005/12/06(火) 22:50:45
学部で研究しています。
交通工学分野で、料金所混雑について調べています。
料金所利用車を、ETC利用車と人による料金支払いをする車に分けて、後者の車による渋滞にETC利用車が
巻き込まれる事象をシミュレートしたいと思っています。
到着率やETC普及率を変化させ、車の平均滞在時間がどのように変化してゆくのかを調べるために、プログラム
を書こうとしているのですが、Visual C++で表現できるのでしょうか?
滞在時間を2次元のグラフィックで表したいのですが。




262 名前:デフォルトの名無しさん :2005/12/06(火) 22:57:27
「〜でできるのでしょうか?」というのは愚問だな。

263 名前:デフォルトの名無しさん :2005/12/06(火) 22:58:12
>>261
出来る出来ないでいうなら出来る
後はおまい次第。研究なら自力でがんがれ


ところで交通工学って学部的には何処になるんだ?

264 名前:デフォルトの名無しさん :2005/12/06(火) 22:59:16
>>260
[リンカ]->[デバッグ情報の生成]を[はい]に。
適当にブレークポイントを設定して実行。
[デバッグ]->[ウインドウ]->[混合モード]で機械語が表示される。

265 名前:デフォルトの名無しさん :2005/12/06(火) 23:00:29
1-pの確率で職員が轢かれるのも考慮に入れたいのです

266 名前:デフォルトの名無しさん :2005/12/06(火) 23:03:21
工学部3年です。数理工学分野でORを扱ってます。
待ち行列理論を勉強してて、理論構築はできるのですが
プログラムが書けなくて、、
確かに、研究なので自力でやるべきです。

267 名前:デフォルトの名無しさん :2005/12/06(火) 23:03:26
専門課程で研究してる人間がこんな所で質問しなきゃなんないなんて
よほどの事情があるんだろう

268 名前:250 :2005/12/06(火) 23:17:32
>>264
なるほど、出来ました!
どうもありがとうございました。
でも10行くらいブレークポイント入れてみましたが
全部「設定できませんでした」になりました・・・
全然違うコードになってしまうのですかね(;´Д`)
ともあれ色々試してみて勉強します。
教えてくださった皆様どうもありがとうございましたm(_ _)m


269 名前:デフォルトの名無しさん :2005/12/06(火) 23:23:56
混乱しているなぁ。
・最適化されたコードのアセンブリ出力を読みたい
・最適化されたコードのデバッグをしたい
では全然話が違うぞ。
後者を本格的にやりたかったらICEに頼らないといけないと思うし。

270 名前:デフォルトの名無しさん :2005/12/06(火) 23:24:02
>>268
アウトオブオーダーとかやっちゃういまのCPUでは勉学のため
参照にする程度ならともかく、手作業での最適化は難しいでしょう。
どうしても少しでも高速化したいならIntel最適化コンパイラの
導入を検討するか、並列化可能ならばSSE2等を使用するのが
現実的な選択肢かと。

271 名前:デフォルトの名無しさん :2005/12/06(火) 23:32:12
float fPugya = ((2.0f * PI * fHoge / fHuga) / (60.0f * 75.0f)) * 1.5f;

これに、最適化のしようが無いと思われるが。

272 名前:デフォルトの名無しさん :2005/12/06(火) 23:41:40
定数は全てまとまるべさ。

273 名前:デフォルトの名無しさん :2005/12/06(火) 23:45:14
>>267
テーマが見つかったのはいいんですが、プログラム書くのにつまずいて、
先が見えなくなったので、何か助言をもらいたくてきました。

274 名前:デフォルトの名無しさん :2005/12/06(火) 23:51:21
>>273
まずは、コンソールアプリケーションから作るのがよいのでは?


275 名前:250 :2005/12/07(水) 00:05:29
>>269
誤解されやすかったですね、明確な説明でなくてすみませんでした。
目的は前者です。
デバッグの方は、いつも最適化無しのデバッグビルドでやってますし、
今後もそれで問題ないと思います。

>>270
なるほど〜・・・CPUの高速化技術とかは聞いた程度にしか
知らなかったので、あまり深く考えていませんでした。
なるべく、「意味がわかりやすいけど遅くならない」コードが書ければ、と
常々思っていたのですが、そのためにはそういうことを扱った
サイトを見た方がいいですかね。SSE2等もいずれ使ってみますm(_ _)m

>>272
ありがとうございます!
今回、float fPugya =の行のように書いて、
整数の定数がまとまることは知っていたのですが浮動小数点数でも
そうなるのか不安があったので、調べるついでに高速化の勉強のため・・・とか思って
質問しました。でもそう簡単にアセンブリコードを見てわかるものでは
ないのですね・・・・。アプローチを変えて勉強してみます。


276 名前:デフォルトの名無しさん :2005/12/07(水) 00:06:00
>>268
プロファイラ使って最適化したほうがいいと思うぞ

277 名前:デフォルトの名無しさん :2005/12/07(水) 00:17:29
>でも10行くらいブレークポイント入れてみましたが
>全部「設定できませんでした」になりました・・・

まさかCのコードにブレーク設定してるとか

278 名前:デフォルトの名無しさん :2005/12/07(水) 00:22:05
>>274 まずは、コンソールアプリケーションから作るのがよいのでは?

Windowsアプリケーションとの違いがあるのですか?コンソールアプリケーション
を用いる利点がいまいち分からないのですが、、

279 名前:274 :2005/12/07(水) 00:38:41
>>278
コンソールアプリケーションはCやC++の言語の知識だけで作れる。
WindowsアプリケーションはCやC++の言語、それにWindowsの知識(APIやらMFCやら)
が必要。そういうことです。

まずは、CやC++の言語の知識を取得してコンソールアプリケーションをつくる。
Windowsではコンソールアプリだけでは物足らなくなるでしょうから、CやC++
の言語の知識を習得したら、APIやらMFCやらの勉強をしてWindowsアプリを作るのが
良いのではないでしょうか?

>>278さんがCやC++の言語の知識をすでに習得しているのであれば、Windowsアプリを
いきなり作っても良いです。


280 名前:デフォルトの名無しさん :2005/12/07(水) 01:10:27
VB(Visual Basic)もいいよ!

281 名前:デフォルトの名無しさん :2005/12/07(水) 01:13:12
>>278
>>279が書いてくれてるように、GUIアプリとCUIアプリじゃ
必要とされる知識レベルが数段違う

282 名前:デフォルトの名無しさん :2005/12/07(水) 01:13:56
質問です。
他のプログラムがアクティブになっている状態で
Ctrl+Aなどで一定のキーボード操作を自動で行う。
というソフトを作りたいのですが、JavaとC++とどちらが簡単にできそうですかね?

Javaで作ろうと試みてみたのですが
「他のプログラムがアクティブになっている状態で」という機能が困難なため
C++で作り直すか迷っています。。

283 名前:デフォルトの名無しさん :2005/12/07(水) 01:33:22
>>282
>Ctrl+Aなどで一定のキーボード操作を自動で行う。
ここんとこがいまいち不明。とくに「自動」ってところ。
何をきっかけにCtrl+A(=全選択)を自動で行うの?

284 名前:デフォルトの名無しさん :2005/12/07(水) 02:21:58
>>282
Java/C++関係なくフォーカスのないウインドウはキーボードイベント
取得できないでしょ。
本気でやりたいならドライバ書くしかないんじゃ?

285 名前:284 :2005/12/07(水) 02:28:04
ああ、C++ならフック使えばできるかな…Javaはしらね。

286 名前:デフォルトの名無しさん :2005/12/07(水) 02:39:27
自分をA、他のプログラムをBとして
Bがアクティブになっている状態で、AがBに対してCtrl+Aを
送るってことでは?

287 名前:284 :2005/12/07(水) 02:52:25
アクティブなアプリに、ctrl+A等をトリガにして
自作アプリから任意のキー操作を発行するってことだと理解した。

288 名前:デフォルトの名無しさん :2005/12/07(水) 03:10:05
あ、なるほど(;´Д`)
APIならWM_SETHOTKEYあたりじゃないかな。自分は使ったことないけど。

289 名前:デフォルトの名無しさん :2005/12/07(水) 07:38:41
ゲームのチートツールでも作ろうってんなら鼬害。

290 名前:デフォルトの名無しさん :2005/12/07(水) 08:49:21
初めまして
最近VC++が楽しくなってきました

291 名前:デフォルトの名無しさん :2005/12/07(水) 12:09:44
それはそれは良かったですね。

292 名前:282 :2005/12/07(水) 15:38:18
レスありがとうございます。

>>283
別に処理開始のタイミングを決めるだけなんでキーはなんでも良いです。

>>284,285
常駐プログラムなら他のアプリケーションがアクティブになっている状態でも
処理開始のタイミングを伝えられるかと思ったんですが、無理ですかね?

>>286
ブラウザで一定の処理をしたいんですけど
ブラウザにメッセージを送っても、ブラウザを変更するほど技術がありません・・・

>>287
そういう事になりますね。

>>288
WM_SETHOTKEYは自プログラムをアクティブにするだけなんで
とあるキーを押したらブラウザで処理というのは難しそうです。。

>>289
NO!

>>290
これからも頑張ってください。

293 名前:デフォルトの名無しさん :2005/12/07(水) 19:16:49
CSimpleArrayをwatchしたいんだけど、どうやって記述すれば見れますか?

とりあえず、次の条件のとき、
CSimpleArray<CAtlString> strArray ;
配列の3番目をwatchしたいときに、入力フィールドどう記述したらいいですか?

strArray[3]
こんなふうにしてみましたダメでした。。。


294 名前:デフォルトの名無しさん :2005/12/07(水) 19:24:12
MFCスレ行ってら

295 名前:デフォルトの名無しさん :2005/12/07(水) 20:27:03
一定のプログラムをWhileで無限ループさせる文書いてくれません?

296 名前:デフォルトの名無しさん :2005/12/07(水) 20:41:09
それくらい自分で書け

297 名前:デフォルトの名無しさん :2005/12/07(水) 20:46:03
CSimpleMap<LPTSTR,CSimpleArray<LPTSTR>> map ;
こんな事したいんだけど、どうやって記述したらいいの?


298 名前:デフォルトの名無しさん :2005/12/07(水) 20:51:55
無限ループ漏れも知りたい( ゚∀゚)

299 名前:デフォルトの名無しさん :2005/12/07(水) 20:53:12
>>297
CSimpleMap<LPTSTR, CSimpleArray<LPTSTR> > map;
>>と書くと現在のC++の仕様上右シフト演算子と解釈されてしまう。

typedefを使って回避する方法もある。個人的にはこっちがお薦め。
typedef CSimpleArray<PTSTR> PTStrArray;
CSimpleMap<LPTSTR, PTStrArray> map;

300 名前:デフォルトの名無しさん :2005/12/07(水) 20:55:20
C++とかオシエレナイテコトナノデスカ

301 名前:デフォルトの名無しさん :2005/12/07(水) 21:35:54
ここはプログラムを教えるスレではありません まる

302 名前:デフォルトの名無しさん :2005/12/07(水) 21:39:12
>299
「>>」の演算子疑って「> >」こんなふうにもしてみたんだけど、ダメだったもんで
違う問題化と思ってた。。。
ありがとう!!!


303 名前:デフォルトの名無しさん :2005/12/07(水) 23:02:13
Goto文でnotepad開き続ける文書いてくれよ。

304 名前:デフォルトの名無しさん :2005/12/08(木) 02:27:12
ジャスティスキタ━(゚∀゚)━!

305 名前:デフォルトの名無しさん :2005/12/09(金) 15:12:32
すいません、質問です。

>>187と同じような質問なんですが、
標準入力のリダイレクトができません。

デバッグで開始すると、
「プログラムを開始できません。
出力をリダイレクトできません。指定されたファイルが無効です。」
と表示されます。

>>189にあるように、コマンド引数に < test.dat
と書いているんですが、
何か他に設定するべき所とかあるのでしょうか?

306 名前:デフォルトの名無しさん :2005/12/09(金) 17:11:48
>>305
<でのリダイレクトはコマンドプロンプトが行っているのであり、Windowsの機能ではない。
だからコマンドライン引数に指定してもリダイレクトはできない。

だからほかの方法を考えろ。たとえばfreopen(stdinとかさ。

307 名前:デフォルトの名無しさん :2005/12/10(土) 15:14:48
Visual C++6.0でCのコンソールアプリを勉強用に作ってます。

ビルドも上手く行って思った通りに動いているソースがあるんですが
これをステップインでデバッグしてみるとfopen.cやfprintf.cなどの
標準ライブラリの関数のソースのパスを入力しろというダイアログが出てきてエラーになってしまいます。
回避するにはどうしたらいいんでしょうか?

308 名前:デフォルトの名無しさん :2005/12/10(土) 15:50:14
crtソースコードも一緒にインストールする

309 名前:デフォルトの名無しさん :2005/12/10(土) 16:39:39
必要もないのにfopen.cやfprintf.cの中まで入らない

310 名前:デフォルトの名無しさん :2005/12/10(土) 17:34:00
>>307
エラーにはならない。
ちゃんとfprintf()の中もデバッグできる。
#ただし混合モードで。

311 名前:デフォルトの名無しさん :2005/12/10(土) 18:13:37
理解しました。
エラーでもなんでもなかった。
関数の中の処理を飛ばしたければステップオーバー使うってことですね。

312 名前:デフォルトの名無しさん :2005/12/11(日) 01:37:04
最近C言語を勉強し始めた者です。
卒研のためVC++.NETを研究室で購入してもらう事になりました。
で、VC++.NETでWebアプリケーション(ホームページに載せて動かす)を作りたく、
入門書を立ち読みしたりネットで勉強しようと思ったのですが、どれもWindowsプログラムの事は書かれているのですが
Web上で動かす方法については見つけることが出来ません・・・。
ホームページ上でプログラムを動かす勉強をするのにオススメな書籍やサイトがあれば教えていただきたいです。
ちなみに目的のプログラムはコマンドプロンプト上で動くものを作るのは成功し、
あとはそれをWeb上で動かせるようにしたい、という状況です。

313 名前:デフォルトの名無しさん :2005/12/11(日) 01:51:41
コンソールで動いているなら、
apacheとかのサーバープログラムをセットアップすれば
目標が達成される気が…

314 名前:伝説新人タクシ :2005/12/11(日) 02:09:43
使えない暇教授なんだな

315 名前:デフォルトの名無しさん :2005/12/11(日) 02:33:53
>>312
CGIってことなら細かいことは忘れたがヘッダはき出すようにすればいいだけだろ
XMLサービスって事ならシラネ。まぁググれば大量に出てくるだろ


つーか卒研するぐらいならこれぐらい自力で調べるとか教授に聞くとか出来るだろ
もし教授がそういうのやってないなら自分所の情報系の学部・学科の教授捕まえるなり
メールするなりして聞くとかさ

316 名前:デフォルトの名無しさん :2005/12/11(日) 03:50:46
Webプログラミング
http://pc8.2ch.net/php/

317 名前:デフォルトの名無しさん :2005/12/11(日) 08:33:27
俺でも教授になれるような気がしてきたよ

318 名前:デフォルトの名無しさん :2005/12/12(月) 19:59:48
VC7ってメモリダンプ見れないんですか?

319 名前:デフォルトの名無しさん :2005/12/12(月) 22:29:44
関係ないけどこの板のアップローダされたときのPASSって決まってるの?

320 名前:デフォルトの名無しさん :2005/12/12(月) 23:20:50
PASSかける必要あるのか?

321 名前:デフォルトの名無しさん :2005/12/12(月) 23:43:58
他スレで放置でしたのでこちらで質問させていただきます。
VC++.NET2003 でVBなどから参照できるクラスライブラリ作成しております。
基本的には機嫌良く動いているのですが、同じクラスライブラリ内のクラスを
継承した派生クラスでデストラクタを記述しようとするとエラーが出ます。
継承関係のないクラスのデストラクタは成功します。
中身を空にしたりvirtual や void を付けたり取ったりしても同じです。
また普通にFormのプロジェクト内で作成したクラスの継承では問題ありません。

error LNK2001: 外部シンボル ""void __cdecl __CxxCallUnwindDtor(void
(__thiscall*)(void *),void *)" (?__CxxCallUnwindDtor@@・・・・)" は未解決です。

クラスライブラリ内で継承したクラスにデストラクタをつけるにはどうしたらいいでしょうか?

322 名前:デフォルトの名無しさん :2005/12/13(火) 08:03:54
>>312
VB.NETやC#用の資料を見ろ。それを元にVC++.NETに置き換えろ。
文法が違うだけで、使用するフレームワークは同じなんだから、それで十分だろ。

それも出来ないようなら、中学校からやりなおせ。

323 名前:323 :2005/12/13(火) 11:36:07
こちらで質問していいのかわかりませんが
よろしければお願いします。
環境はWinXP・VC++6.0です。

IEコンポーネント(CWebBrowser2)をフォームに表示し
それを編集モードにしたいと思っています。

ttp://www.nitoyon.com/vc/tips/ie_component.htm
こちらを参考にしてサンプルソースをDLし、
put_designModeで編集モードに出来ることは確認できました。

自分はMFCAppウィザードで作ったSDIのプログラムで
同様の事を行いたいのですがうまくいきません。

サンプルではWinMainでAtlAxDialogBoxを使ってダイアログを表示していて
どうも自分がこれを使ってないことが原因のひとつに考えられるのですが
WinMainが無いプログラムの場合、AtlAxDialogBox、あるいは
それに変わる処理というのは何処で記述すればいいでしょうか?
よろしくお願いします。

324 名前:323 :2005/12/13(火) 11:36:32
こんな感じにしてます・・・

BOOL CXXXXView::PreCreateWindow(CREATESTRUCT& cs)
{
_Module.Init(0, cs.hInstance);
AtlAxWinInit();
return CFormView::PreCreateWindow(cs);
}
void CXXXXView::FuncA(){
CWnd* pIE = (CWnd *)GetDlgItem(IDC_EXPLORER1);
if (pIE == NULL) return;

// コントロールのハンドルを得る
HWND hWnd = pIE->GetSafeHwnd();

// 使えるかどうかチェック
if (hWnd != NULL && ::IsWindow(hWnd) != 0) {
CComPtr<IUnknown>punkIE;

if (AtlAxGetControl(hWnd, &punkIE) == S_OK){
CComQIPtr<IWebBrowser2> pWB2 = punkIE;
if(pWB2 != NULL){//ここにNullが入ってきてしまう
CComPtr<IDispatch> pDisp ;
pWB2->get_Document( &pDisp) ;
CComQIPtr<IHTMLDocument2> pDoc = pDisp ;
pDoc->put_designMode(L"On");
}
}
}
}

325 名前:デフォルトの名無しさん :2005/12/13(火) 12:33:22
ダイアログににActiveXコントロールがはっついてるだけだろ

326 名前:デフォルトの名無しさん :2005/12/13(火) 15:27:43
ツリーコントロールのアイテムをドラッグ出来るようにするにはどうすればいいのでしょう?

ツリーコントロールの『プロパティ』→『拡張スタイル』→『ドラッグドロップを許可』にチェックを付けたのですが、
ドラッグ出来ず、OnBegindragのイベント内にも入ってきてくれません。

環境は
WindowsXP Home
VC++6.0
です。

どうかよろしくおねがいします。

327 名前:デフォルトの名無しさん :2005/12/13(火) 19:12:33
>>326
自分で実装

328 名前:デフォルトの名無しさん :2005/12/13(火) 19:22:18
MFCのサンプルならあるけど
MFCじゃないかもしれないな

気になるけど時間ないからまた来週来ます。

329 名前:321 :2005/12/14(水) 17:29:11
ありがたくも元スレの方にレスがありましたので再び移動します。
すいませんでした。

マネージドやってる人、少ないのか・・・orz

330 名前:デフォルトの名無しさん :2005/12/14(水) 18:02:34
あんな思いフレームワーク使うくらいならまだMFC使った方がマシじゃわ

331 名前:デフォルトの名無しさん :2005/12/14(水) 18:12:28
思い×
重い○

332 名前:デフォルトの名無しさん :2005/12/14(水) 23:30:46
どうせフレームワークを使わざるを得ないならC#でやったほうが楽だしな。

333 名前:デフォルトの名無しさん :2005/12/16(金) 00:36:45
質問です。XP、.NET 2003 です。

HOGE.h / HOGE.cpp で定義されている関数 Hoge() を、
複数のプロジェクトで使いまわすことを考えています。

ヘッダの方は、HOGE.h を適当な場所に置き、
ツール→オプション→Projects→インクルードファイル でそのフォルダを追加すれば、
後はプロジェクトの適当なソースファイルで #include "HOGE.h" とすればOKです。

cpp ファイルはどうすればよいでしょうか?
ツール→オプション→Projects→ソースファイル で、HOGE.cpp をおいたフォルダを指定してみましたが、
プロジェクトをビルドすると、HOGE() の定義が見つからず、リンクエラーが起きてしまいます。
現状では、プロジェクトごとに、ソリューションエクスプローラにて HOGE.cpp を追加しています。
使いまわせているといえば言えるのですが、プロジェクトごとにコンパイルする必要がある上に、
HOGE.cpp のようなファイルが複数ある場合、いちいち全て追加しなければなりません。

#include <stdio.h> とするだけで、printf が定義されている c ファイルを自動的に検索してくれるのを思い、
同じことが実現できるのではないかと思って質問しました。

よろしくお願いします。



334 名前:デフォルトの名無しさん :2005/12/16(金) 00:51:51
HOGE.cpp をプロジェクトに追加する

ソリューションエクスプローラのフォルダを右クリックして「既存項目を追加」なり
ソリューションエクスプローラにエクスプローラから直接D&Dするなり

335 名前:333 :2005/12/16(金) 00:58:41
>>334
ありがとうございます。
>>333 にありますように、現状はその方法で行っていますが、それだといくつか問題が生じています。
他に何か方法はないでしょうか。

336 名前:新人 :2005/12/16(金) 01:42:51
333>
汎用化したいプログラムをDllのプロジェクトにしてワークスペースに追加すればいいんじゃないでしょうか?
Dllを使いたいプロジェクトの実行ファイルの直下に置けばそのDllを参照してくれます。
もちろんインクルードファイルの参照もしといてください。

337 名前:デフォルトの名無しさん :2005/12/16(金) 06:34:30
>#include <stdio.h> とするだけで、printf が定義されている c ファイルを自動的に検索してくれる
これは誤解

338 名前:デフォルトの名無しさん :2005/12/16(金) 11:01:02
>>333
>>336
別にDLLじゃなくてスタティックライブラリで委員で内科医?
デバッグビルド用とリリースビルド用を用意する必要はあるけど。

339 名前:デフォルトの名無しさん :2005/12/16(金) 12:28:32
教えてください。 .Net 2003 WinXP です。
F1キーヘルプでAPIを調べようとすると英語ヘルプが優先されてしまします。
日本語ヘルプをはじめに表示するにはどうしたらいいのでしょう?

340 名前:デフォルトの名無しさん :2005/12/16(金) 15:43:05
>>339
マルチポストはお帰りください

341 名前:デフォルトの名無しさん :2005/12/16(金) 15:44:02
まるぽ

342 名前:デフォルトの名無しさん :2005/12/16(金) 16:52:46
Baseクラスから派生してDerivedクラスを作成したとします。

class Base
{
public:
virtual func(int n){処理}
virtual func(int* p){ func(*p);} //オーバーロード
};

class Derived : public Base
{
public:
virtual func(int n){処理}  //オーバーライド
};

以上のように、派生クラスのオーバーロード元のメンバ関数をオーバーライドしたとき
基本クラスでオーバーロードした関数は派生クラスで呼び出せないのでしょうか?

int* p;
〜処理〜
Derived* derived = new Derived;
derived->func(p);

↑これでコンパイルエラーが出ます。
やっぱり基底クラスでオーバーロードした関数もオーバライドしなければいけないのでしょうか?

343 名前:デフォルトの名無しさん :2005/12/16(金) 17:24:10
>>342
そんなオーバーロードなんてやるほうがおかしいからやめろ。

一応解決策を書くけどさ。
たとえばこうすればいい。
class Base
{
protected:
    func_(int n) {処理}
public:
    func(int n) {return func_(n);}
    func(int* p) {return func_(*p);}
};

class Derived : public Base
{
protected:
virtual func_(int n) {処理}  //オーバーライド
};
ほかにDerivedのpublicなところでusing Base::func;を書く方法でも
一応コンパイルは通るが、これは一時しのぎのつもりで使え。

344 名前:デフォルトの名無しさん :2005/12/16(金) 17:24:47
すまん。Base::func_ももちろんvirtualだ。

345 名前:333 :2005/12/16(金) 20:11:03
>>336-338
ライブラリというのを全く思いつきませんでした。ありがとうございます。

346 名前:デフォルトの名無しさん :2005/12/17(土) 08:04:05
グラはファミコン以下ですが、
個人的には結構面白いサッカーゲームです。
一人用ですが。

某雑誌に掲載されてた記事
「一試合3分から楽しめる本格派サッカーゲーム。
グラフィックは簡素だが、やり込み派にはオススメしたい一本。
 
こだわりのカスタマイズが面白い。
簡素なグラフィックとは逆に、戦術面は細部まで作りこまれている。
システムやプレスのON/OFFから、なんと選手一人一人のポジショニングまで設定可能だ。
こだわりのチーム作りが楽しめる。」

フリーゲームなんですが、管理人がいないらしいので、
サッカー好きでプログラムのできる方居たら助けてやってください。
このゲームで対戦できたら面白いと思うので

RolePlaying Eleven
http://ime.st/www.geocities.co.jp/Bookend-Kenji/2279/

最近立った2chスレ
http://game10.2ch.net/test/read.cgi/netgame/1134392861/

347 名前:342 :2005/12/17(土) 08:46:58
>>343
なるほど。
ありがとうございました。


348 名前:デフォルトの名無しさん :2005/12/21(水) 04:17:58
えーどもども。Visual Studio .NET 2003で、

[Nullpo.h]
---------------------------
#ifndef ___Nullpo_h
#define ___Nullpo_h

namespace Nullpo {
  // 宣言
  void Ga();
}

#endif ___Nullpo_h


[Nullpo.cpp]
---------------------------
namespace Nullpo {
  // 定義
  void Ga() {
    ...
  }
}

で、クラスビューにGa(void)が二重に表示されるんですが、なんででしょう。

349 名前:デフォルトの名無しさん :2005/12/21(水) 21:16:58
Windowsプログラミングを始めたところなんですが、アホみたいなところで躓いています…
ダイアログバーを使いたいのですが、Createの
virtual BOOL Create(
CWnd* pParentWnd,
UINT nIDTemplate,
UINT nStyle,
UINT nID
);

nIDTemplateとnIDがわかりません
IDというと、リソースエディタでつけたIDD_DialogBarしかわからないのですが、
どちらがこれに当たり、もう一つには何を与えればよいのでしょうか。

350 名前:デフォルトの名無しさん :2005/12/21(水) 22:30:49
VisualStudio.NETを使っています
リソースビュー→Dialog→リソースの追加→Dialogを選択。
OKとキャンセルボタンがついたダイアログが出来ますが、
これをプログラム中から呼び出すと、ダイアログエディタで表示されていたOK,キャンセルボタンとは別に
OK、キャンセルボタンがもう一組表示されています。
これはなんでしょうか。また、消し方についてもお願いします。

351 名前:デフォルトの名無しさん :2005/12/21(水) 22:41:10
>>349
どっちも同じIDD_DialogBarでいいんぢゃねーか?

CDialogBar m_wndDBar;

m_wndDBar.Create( this, IDD_DialogBar, CBRS_xxx , IDD_DialogBar );

みたいな感じ

352 名前:349 :2005/12/21(水) 22:59:00
>>351
ありがとうございます。とりあえず表示できました。
でも、よく意味がわからないのですが、追々勉強します…

353 名前:デフォルトの名無しさん :2005/12/22(木) 12:07:03
>>350
自前でボタンを生成しているとか、ダイアログIDが混乱しているとか、そういう落ちじゃないよな。

354 名前:デフォルトの名無しさん :2005/12/22(木) 19:17:05
VC++6.0で、リストコントロールで表示スタイルを「レポート」にした場合、
行をドラッグするような事はできるのでしょうか?

それとも、「アイコン」スタイルでないとできないのでしょうか?

355 名前:デフォルトの名無しさん :2005/12/22(木) 19:44:08
行をドラッグしても選択範囲が変わるのが関の山。

356 名前:デフォルトの名無しさん :2005/12/23(金) 20:21:04
ボタンを押すと、あるエディットボックスにあるCStringのデータを
Ctrl+Cしたいと考えているのですが、可能なのでしょうか?

ご教授宜しくお願い致します。
UpdateData(TRUE);
CString copydata;
copydata = m_text1;

このcopydataを自動でCtrl+Cしたいと考えております。

357 名前:デフォルトの名無しさん :2005/12/23(金) 21:25:06
エスパー、仕事!仕事!

358 名前:デフォルトの名無しさん :2005/12/23(金) 21:38:04
>>356
Ctrl+C という「アクセラレータ・キー」に機能を割り振るのは、プログラマの仕事だ。
というわけで、したい事をお好きなように……








クリップボードにテキストをコピーしたいのなら、
 1) OpenClipboard(), SetClipboardData() などの標準クリップボードAPI
 2) MFC の COleDataSource クラス
 3) CLI では System::Windows::Forms::Clipboard クラス
のどれかを使え。

359 名前:デフォルトの名無しさん :2005/12/23(金) 22:06:59
ありがとうございます。
解決しました

360 名前:デフォルトの名無しさん :2005/12/23(金) 23:15:05
スゲエ本物のエスパーを見たお

361 名前:デフォルトの名無しさん :2005/12/24(土) 17:46:23
質問です。XP、.NET です。

ダイアログにリストビューを配置しようとしたのですが、
ツールボックスからリストビューを見つけられません。

似たようなものとして List Box、List Control があったのですが、どうも違うようです。
LVM_INSERTCOLUMN を用いてコラムを追加したり、
LVS_EX_GRIDLINES を用いてグリッドを引いてみたりしようとしてみましたが、どちらも無理でした。
Visual Studio 6.0 を使っていたころはあったのですが・・・。
.NET ではインターフェイスが違いすぎて困っています。

よろしくお願いします。



362 名前:361 :2005/12/24(土) 17:49:39
ビューをレポートにしたらいけた・・・
自己解決です。お騒がせしました。

363 名前:デフォルトの名無しさん :2005/12/26(月) 20:08:52
Viewクラスで、GetDocumentを実行すると、
Debug Asseriton Failed
Program: ***********
File: objcore.cpp
Line: 39
とエラーが出て止まってしまいます。
OnDraw関数内にはじめからある CDocumentClass* pDoc = GetDocument(); ではエラーは出ないのですが、
その他の関数中で同様に書くと、上記のエラーが出て実行できません(ビルドは通ります)。
GetDocumentは、OnDrawの中でしか使えないわけではないですよね?

よろしくお願いします。

364 名前:デフォルトの名無しさん :2005/12/26(月) 22:00:37
>>363
objcore.cppの39行目を見る気は無いわけだな

365 名前:363 :2005/12/26(月) 22:34:09
39:ASSERT(this != NULL);
40:// it better be in valid memory, at least for CObject size
41:ASSERT(AfxIsValidAddress(this, sizeof(CObject)));

すいません、見ても意味がわかりませんです…

366 名前:デフォルトの名無しさん :2005/12/26(月) 22:36:39
ASSERTがどういう役割をするか調べる気は無いわけだな

367 名前:363 :2005/12/26(月) 22:57:30
それ検索してわかったなら書き込まないよ…
足りない知識で考えると、this==NULLとは、GetDocumentでドキュメントクラスのポインタが取得できなかったと言うことですか?
あってます?
だとしたら、それが何でかわからないのでお聞きしたかったのですが。
ビューとドキュメントの関連づけは問題ないと思います(OnDraw関数内では使えてる)。

368 名前:デフォルトの名無しさん :2005/12/26(月) 23:00:02
思考停止乙

369 名前:デフォルトの名無しさん :2005/12/26(月) 23:00:38
ぶっちゃけMFCのソース貼り付けは無断転載でライセンス違反だと思うんだが。

370 名前:デフォルトの名無しさん :2005/12/26(月) 23:07:02
>>367
ドキュメントクラスのオブジェクトが作成される前に、GetDocumentしてるのでは?
OnDrawでうまくいくのはOnDrawの段階ではドキュメントクラスのオブジェクトが存
在するからではないの?

371 名前:デフォルトの名無しさん :2005/12/26(月) 23:09:37
追加で、
ドキュメントクラスのコンストラクタ抜ける直前と、問題のGetDocumentに
ブレーク張って前後関係確かめたら?

372 名前:363 :2005/12/26(月) 23:26:28
>>370,371
ビューのコンストラクタから呼んでいたので怪しいかと思い、
ご指摘のブレークポイントを設定してみました。
しかし、ドキュメントクラスのコンストラクタのほうが先に呼ばれているようです。

>>369
以後気をつけます…

373 名前:デフォルトの名無しさん :2005/12/26(月) 23:34:09
CView::OnInitialUpdate
virtual void OnInitialUpdate( );

解説

ビューが初期表示される前で、ドキュメントが最初にビューに関連付けられた後にフレームワークが呼び出します。


374 名前:デフォルトの名無しさん :2005/12/26(月) 23:36:27
>>372
じゃビュークラスのコンストラクタからGetDocumentしてるとか。
この場合のthisがどのオブジェクトのポインタなのか良く知らないで
書いてるもんで・・・
詳しい人のレスを待ったほうがいいかな。

375 名前:デフォルトの名無しさん :2005/12/26(月) 23:41:07
>>372
オブジェクトが完成するのはコンストラクタ抜けた直後だよ。

376 名前:130 :2005/12/26(月) 23:45:36
がっ、
>ビューのコンストラクタから呼んでいたので怪しいかと思い
って思い切り書いてあった。

377 名前:363 :2005/12/26(月) 23:53:28
>>373
つまり、ビューのコンストラクタの段階では関連づけされてなくて、
コンストラクタを抜けて関連づけられた後に
OnInitialUpdateが呼ばれるということですか。
OnInitialUpdateから問題の関数を呼んだらうまくいったようです。ありがとうございます。

レスをくださった皆様ありがとうございました。

378 名前:デフォルトの名無しさん :2005/12/27(火) 06:58:44
>>377
違う。

379 名前:デフォルトの名無しさん :2005/12/28(水) 10:26:17
質問です。

VC6.0で動的に配列を作ると
時たま破棄するときにエラーになります。
例えば関数内で以下のようなものを書くと
Debug Assertion Failed!
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
などと出てエラーとなってしまいます。
delete[] array;
を削除すると一応は通ります。
このようなエラーが頻発するのですが、
どのようにすれば解決するのでしょうか?
詳しい方宜しくお願いします…



int *array;
array = new int[100];

処理

delete[] array;


380 名前:デフォルトの名無しさん :2005/12/28(水) 10:41:51
>>379
恐らく、その「処理」の間にメモリ管理領域をぶち壊している。
delete[]しないと通るのは、その(ぶち壊していると言う)事実に直面しないで済んでいるだけ。

381 名前:デフォルトの名無しさん :2005/12/28(水) 10:43:33
>>380
ヒント有難う御座います。
これから調べてみます…

382 名前:デフォルトの名無しさん :2005/12/28(水) 18:58:55
リストコントロールから項目をドラッグして、
他のコントロール(リストボックス)上でドロップする処理をつくっているのですが、
ドロップされた場所がリストボックスのどのインデックスか取得する方法が分かりません。

ドロップした瞬間は↓のイベントでわかるのですが、
 void CDlg055::OnLButtonUp(UINT nFlags, CPoint point)
引数のpointからリストボックスのどのインデックスか取得はできるのでしょうか?

環境はVC++6.0 WinXP Homeです。

383 名前:デフォルトの名無しさん :2005/12/28(水) 19:46:54
マウスの位置はわかるな

384 名前:デフォルトの名無しさん :2005/12/28(水) 22:46:20
CListBox::ItemFromPoint

385 名前:382 :2005/12/29(木) 17:55:57
>>384
そんな関数があったんですね。
ありがとうございます。

386 名前:デフォルトの名無しさん :2005/12/29(木) 22:09:37
double型の精度は何桁ですか?

387 名前:デフォルトの名無しさん :2005/12/29(木) 22:12:21
↑あ、VC++7.0の話です。


388 名前:デフォルトの名無しさん :2005/12/30(金) 00:47:39
>>386
52ビットだから約16桁だね。

389 名前:デフォルトの名無しさん :2005/12/30(金) 01:30:02
<float.h>
#define DBL_EPSILON 2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */

かな?

390 名前:デフォルトの名無しさん :2006/01/04(水) 16:45:47
2003で/GLオプションつけてビルドしたライブラリを使って、
2003で自作アプリを/GLオプション付でコンパイルするとどう見ても
ソースが要求する動きをしないコードが出来上がるんだがどういうこっちゃ。

391 名前:デフォルトの名無しさん :2006/01/04(水) 17:52:14
>>390
ライブラリにするからじゃん

392 名前:デフォルトの名無しさん :2006/01/04(水) 18:31:44
>>390
ライブラリには/GLを使うなと言うようなことが書かれている。
http://msdn.microsoft.com/library/ja/vccore/html/vcgrfglwholeprogramoptimization.asp

393 名前:デフォルトの名無しさん :2006/01/04(水) 22:50:57
>>392
使うなじゃなくてバージョン合わせろって事だろ。
同じ環境でコンパイルしてるんだからそれは問題ないはずじゃないの?

394 名前:デフォルトの名無しさん :2006/01/04(水) 23:27:21
ランチャを作ろうかと思っています。

他のアプリからリソースを取り出す方法まではわかりました。
そこで、アイコン確認するためダイアログの背景に取得したアイコンを表示してみようと思ったのですが、
その方法がわかりません。

わかる方、御教授お願いします。

395 名前:デフォルトの名無しさん :2006/01/04(水) 23:45:21
>>393
/GLオプションの意味わかってんのか?

396 名前:デフォルトの名無しさん :2006/01/04(水) 23:45:58
>>393
バージョンじゃなくて同一PCでやれって書いてないか?

397 名前:デフォルトの名無しさん :2006/01/04(水) 23:53:21
>>395
わかってるつもりだけど、俺のレスのどこら辺からわかってないと思ったのか教えて欲しい。
何でもいいから問題解決の糸口がほしいんだ。

>>396
プリコンパイル済みヘッダー使った場合だろ?
そもそも使ってないし、同一PCでやってる。

398 名前:394 :2006/01/05(木) 10:53:31
CDCクラスのDrawIcon使って自己解決。

399 名前:デフォルトの名無しさん :2006/01/05(木) 13:14:47
MFCerは帰れ

400 名前:デフォルトの名無しさん :2006/01/05(木) 14:21:49
>>399
MFCでもええやん。

401 名前:デフォルトの名無しさん :2006/01/05(木) 14:27:50
ここはMFCプログラムを教えるスレではありません故
つーかプログラムを教えるスレでもねぇがな

402 名前:デフォルトの名無しさん :2006/01/05(木) 15:30:31
>>399
MFCスレが他にあるけどapiスレもあるし、
それをやるなと言ったらここで何をやれと?

403 名前:デフォルトの名無しさん :2006/01/05(木) 15:33:53
プログラムに関することだけがVC++のことではないと思うがな

404 名前:デフォルトの名無しさん :2006/01/05(木) 15:35:05
上の/GLなんかMFCでもAPIでもないけどVC++のことですが?

405 名前:デフォルトの名無しさん :2006/01/05(木) 17:12:03
ならこのスレは祖父板に立てるべきだな。

406 名前:デフォルトの名無しさん :2006/01/05(木) 18:59:20
「初心者にVisual C++を教えるスレ」だから、
MFC、API、コンパイラ等、幅広く教えるんじゃないのか?

407 名前:デフォルトの名無しさん :2006/01/05(木) 19:18:55
だがMFCの質問はMFCスレへ行けと言ってるこの現状

408 名前:デフォルトの名無しさん :2006/01/05(木) 19:23:40
初心者にコンパイラスイッチまで教える必要ない。
やりたきゃ自分でやれ

409 名前:デフォルトの名無しさん :2006/01/05(木) 19:29:00
何言ってんのコイツ?

410 名前:デフォルトの名無しさん :2006/01/05(木) 21:30:46
>>409
たまにだけど自分の守備範囲外だってだけで拒否反応する香具師いるんだよ
MFCが使えない399とかコンパイラスイッチが苦手なやつとかさ

411 名前:デフォルトの名無しさん :2006/01/05(木) 21:46:40
インラインアセンブラとかやられたら迷惑

412 名前:デフォルトの名無しさん :2006/01/06(金) 00:14:30
結論:
(話に加われないから)俺にわからない話はするな

ってことだな。

413 名前:デフォルトの名無しさん :2006/01/06(金) 08:29:24
初心者スレだってこと忘れてないか?

414 名前:デフォルトの名無しさん :2006/01/06(金) 08:55:17
コンパイラスイッチはここで良いんじゃ?
VC++のスレって事は、環境やコンパイラとか固有の物についてのスレでそ?

MFCやAPIは専用スレがあるんだから、そっちでやるのがいいんじゃね?

415 名前:デフォルトの名無しさん :2006/01/06(金) 09:03:50
>>414
とりあえず過去ログぐらい読もう
そんなこと言ってるのお前だけだ

416 名前:デフォルトの名無しさん :2006/01/06(金) 13:44:21
>>414
MFCもVC++固有だけど・・・・・・

417 名前:デフォルトの名無しさん :2006/01/06(金) 15:15:58
>>416
で?

418 名前:デフォルトの名無しさん :2006/01/06(金) 16:33:35
>>415
過去がそうだったからといって今後も続けなきゃいけないとは限らない。

419 名前:デフォルトの名無しさん :2006/01/06(金) 16:36:58
へんなやつがわいてきたな

420 名前:デフォルトの名無しさん :2006/01/06(金) 19:40:28
へーんとへーんを集めてー

421 名前:デフォルトの名無しさん :2006/01/06(金) 20:01:04
もっとへんにするのか?

422 名前:デフォルトの名無しさん :2006/01/07(土) 22:15:34
なんでソフトやる奴はこんなのが多いのだらうか。

423 名前:デフォルトの名無しさん :2006/01/08(日) 01:19:23
2chのカキコで判断されてもなぁ

424 名前:デフォルトの名無しさん :2006/01/09(月) 03:35:17
すみません。vc++で警告が出てしまい日本語文字が化けてしまいます。すいませんが助けてください。
2005でコンパイルすると上手くいかないのです。

34 wc.lpszClassName = (LPCSTR)szClassName;

警告warning C4133: '=' : 'LPCSTR' と 'LPCWSTR' の間で型に互換性がありません。 34

425 名前:デフォルトの名無しさん :2006/01/09(月) 03:38:35
WNDCLASSEX構造体wcのメンバの型と
グローバル変数char szClassName[] = "template";の型に互換性がなくなってるらしいのですが、、

426 名前:デフォルトの名無しさん :2006/01/09(月) 03:39:58
まとまりのない文章ですみません。

427 名前:デフォルトの名無しさん :2006/01/09(月) 03:41:08
互換性がなくなってるんじゃなくて、もともと無いの。

428 名前:デフォルトの名無しさん :2006/01/09(月) 03:49:50
>>427
有難うございます
明日また、考えたいと思います。今日はもうメモリリークしそうなので寝ます


429 名前:デフォルトの名無しさん :2006/01/09(月) 04:23:44
ヒント:雲丹コード

430 名前:デフォルトの名無しさん :2006/01/09(月) 06:28:36
答え:undef _UNICODE; undef UNICODE

431 名前:デフォルトの名無しさん :2006/01/09(月) 08:30:15
>>425
TCHAR szClassName[] = TEXT("template");

432 名前:デフォルトの名無しさん :2006/01/09(月) 12:32:01
リソースってvisual c++上でテキストファイルみたいに編集できないのでしょうか?
もし、手書きで編集するにはvisual c++を終了してメモ帳などで別に開くしかないのですかね?

433 名前:デフォルトの名無しさん :2006/01/09(月) 12:39:37
>>432
ソリューションエクスプローラ
右クリック

434 名前:デフォルトの名無しさん :2006/01/09(月) 12:42:07
>>433
できました!ありがとうございました。

435 名前:デフォルトの名無しさん :2006/01/09(月) 18:01:44
CreateWindowEx()を使って、ボタンコントロールを作ったはいいものの、
複数配置した場合、メッセージを拾うとき、
BN_CLICKED指定だけではどのボタンか特定できませんよね?
そこでIDC_xxxxとかそのあたりのIDを使っているのだと思いますが…

コントロールのIDってどこで追加するのですか?

VC++6.0使用です。ものすごい初歩的な質問で恐縮です。
ダイアログベースならどこかで追加できた気がしますが、
そうでない場合の追加の仕方がわからなくて…。

436 名前:435 :2006/01/09(月) 18:30:56
あ…あぁ…もうちょっとで自己解決しそう…。

437 名前:435 :2006/01/09(月) 18:39:10
あぁッ…ぁふん…自己解決しちゃったかも。

.rcファイルを開いて手動で追加すればいいのですか?

あぁでも書式がわからん…。

438 名前:デフォルトの名無しさん :2006/01/09(月) 18:49:04
リソース使わないならrc関係ないよ

439 名前:435 :2006/01/09(月) 19:04:19
あれ?これもしかしてソース内で適当に#defineしちゃっていいものなのですか?

#define IDC_BUTTON1   1
#define IDC_BUTTON2   2

のような感じで。
さらにenumなんか使っちゃてもOKですか?

440 名前:デフォルトの名無しさん :2006/01/09(月) 19:31:13
全然だめ

441 名前:デフォルトの名無しさん :2006/01/09(月) 19:37:01
IDで識別しか頭に無いのか

442 名前:デフォルトの名無しさん :2006/01/09(月) 19:45:50
別に特殊なことでも何でもないし
サンプル探せば簡単にみつかる

443 名前:デフォルトの名無しさん :2006/01/09(月) 20:31:46
>>435
CreateWindowExの引数でIDを指定できる。
そのIDは439のように#defineやconstやenumを使って名前をつけて良い。

444 名前:デフォルトの名無しさん :2006/01/09(月) 20:35:46
CreateWindowExじゃなくてCreateWindowを調べてみれ

445 名前:デフォルトの名無しさん :2006/01/09(月) 21:01:15
>>443,444
ありがとうございます。
どうも自分で指定してよかったみたいですね。

予めどこかで、一定の手順に従って定義されているIDを渡すものだとばかり思っていたので、
(でないと重複などが問題になると思ったから)
こんがらがっていたようです。
webで調べてもダイアログベースでプロパティから弄る場合や、
自動的についてる場合などしか見当たらなくて。

失礼しました〜。

446 名前:428 :2006/01/09(月) 23:18:26
>>427-431
CreateWindow関数とMesageBox関数の2番目の引数が文字化けします。


447 名前:428 :2006/01/09(月) 23:19:55
2003だったら何の問題も無いんですけど。
これは漏れに2005を使うなという意味ですか?

448 名前:デフォルトの名無しさん :2006/01/09(月) 23:26:29
自分で何も調べない奴は、何も使うな

449 名前:デフォルトの名無しさん :2006/01/10(火) 00:12:38
直りました。俺だけ文字化けしてるのかと思った

450 名前:デフォルトの名無しさん :2006/01/10(火) 02:24:16
いままで使っていたソースとリソースを使って新しく同じようなプロジェクトを作ったのですが
'IDC_COMBO' : 定義されていない識別子です。
というエラーが出て困ってます。
'IDC_COMBO'はコンボボックスのIDでIDはきちんとIDC_COMBOになっているし
ソースファイルにも
#define IDC_COMBO 101
というように定義してあります。
いろいろ調べたのですが、わからなかったのでお願いします。


451 名前:デフォルトの名無しさん :2006/01/10(火) 02:45:40
プロパティウィンドウの簡略ヘルプが出なくなったのですが、
どうやったら元に戻せるのですか?説明にはチェックがついてます

452 名前:451 :2006/01/10(火) 02:47:26
すいません、戻りました

453 名前:デフォルトの名無しさん :2006/01/10(火) 03:21:28
Visual Basic なんだけど、
Sub ex2()
Dim x As Integer, s As Integer
s = 0
For x = 1 To 100
s = s + x
Next x
If x Mod 2 Then

End If
MsgBox "合計=" & s
End Sub

ってのに奇数だけの和を求められるようにするにはどう変形すればよいですか?




454 名前:デフォルトの名無しさん :2006/01/10(火) 03:52:01
>>453
スレ違い


455 名前:デフォルトの名無しさん :2006/01/10(火) 05:10:06
>>453
禿げ上がるほどスレチガイだが教えてやる。
算数をもう一度勉強しなおせ。以上

456 名前:デフォルトの名無しさん :2006/01/10(火) 06:53:04
キショ

457 名前:デフォルトの名無しさん :2006/01/10(火) 10:56:19
PostMessageで独自のメッセージUM_UNKOを飛ばし、処理させたく存じます。
PreTranslateMessage関数では、ちゃんとメッセージが飛んできて、処理可能ですが、
メッセージマップで追加設定した関数OnUnko()には、処理が飛んで来ません・・・
なにがいけないのでしょうか??
ちなみに、メッセージはPostMessage(UM_UNKO)で飛ばしております
(SendMessageでは、PreTranslateMessageに飛んでこない・・・)


BEGIN_MESSAGE_MAP(Cxxx, CDialog)
ON_MESSAGE(UM_UNKO, OnUnko)
END_MESSAGE_MAP()

BOOL Cxxx::PreTranslateMessage(MSG* pMsg)
{
switch (pMsg->message){
case UM_UNKO:
・・・ // 飛んでくる
break;
}

LRESULT Cxxx::OnBnSetfocusPictEditor(WPARAM wParam, LPARAM lParam)
{
・・・ // 飛んでこない
return 0;
}


458 名前:457 :2006/01/10(火) 10:57:29
関数名訂正

LRESULT Cxxx:OnUnko(WPARAM wParam, LPARAM lParam)
{
・・・ // 飛んでこない
return 0;
}


459 名前:デフォルトの名無しさん :2006/01/10(火) 10:57:46
デバッガで追えばぁ〜

460 名前:デフォルトの名無しさん :2006/01/10(火) 11:05:35
>>457
MFCスレ行った方がいいんじゃね?


461 名前:457 :2006/01/10(火) 11:27:09
MFCスレ行ってきますm(_ _)m

462 名前:チラシの裏 :2006/01/10(火) 12:03:40
ON_MESSAGE
ユーザー定義メッセージは、通常、WM_USER から 0x7FFF の範囲で定義します。

463 名前:デフォルトの名無しさん :2006/01/10(火) 18:06:20
現在はユーザー定義メッセージはWM_APPから。

464 名前:1/2 :2006/01/11(水) 00:49:59
・環境
XP SP2
Visual Studio 6.0(VC++6.0)

・現象
ExcelVBAから呼び出す収束計算用のWin32DLLを作成しています。
問題の箇所は

y = (x - a) / b;

変数はすべてdouble型です。
VBAでマクロを繰り返し実行する際、1回目で当該箇所を実行すると
右辺と左辺は等しくなるのですが、2回目以降では左辺の値が異なっていることがあります。
有効桁数が16桁とごくわずかな誤差ですが、最終的に大きくなってしまうので無視できません。
対処方法(できれば原因も)をご教授ください。

465 名前:2/2 :2006/01/11(水) 00:50:34

a = 4.047;
b = 1.8413;
x = 0.052;
// 中略
y = (x - a) / b;

ウォッチウィンドウにて、以下の値となりました。
【1回目】
a 4.0469999999999997
b 1.8412999999999999
x 0.051999999999999998
(x - a) / b -2.1696627382827347  …右辺
y -2.1696627382827347  …左辺
【2回目以降】
a, b, x 同上
(x - a) / b -2.1696627382827347  …右辺
y -2.1696627382827351  …左辺

※1
y = (0.052 - 4.047) / 1.8413;
を実行した場合は、2回目以降も現象は再現しません。
ただし、y = (x - 4.047) / 1.8413; のように右辺の項のどれか1つでも変数の場合は再現します。
※2
上の例で x = 0.056; のときは(a、bはそのまま)、再現しません。

466 名前:デフォルトの名無しさん :2006/01/11(水) 01:10:27
>>465
念のため、全部明示的にdoubleにキャストして試してみては?

467 名前:デフォルトの名無しさん :2006/01/11(水) 01:34:38
原因:恐らく変換誤差。
対処法:
・doubleの精度ギリギリまで使おうとせずに丸める
・long doubleを使う。

まぁ、ソース晒して味噌。

468 名前:デフォルトの名無しさん :2006/01/11(水) 02:12:46
やっぱり問題の箇所のソース出した方がいいかもね。
その部分だけconsoleで試してみたけど、再現しなかったよ。

#include <stdio.h>

int main(int argc, char *argv[])
{
double a=4.047;
double b=1.8413;
double x=0.052;
double y=0.;
int i;

for(i=0;i<=1;i++){

y=(x-a)/b;

printf("y =%.16lf\n",y);
printf("raw =%.16lf\n",(x-a)/b );
}
getchar();

return 0;
}

469 名前:デフォルトの名無しさん :2006/01/11(水) 05:56:40
やっぱ精度の問題じゃね?
gccの場合そのままだと再現しなかったけどlong doubleにキャストしたら再現したから。
16桁の精度が必要なら、long doubleを使うしかないと思うよ。

(long double) y =-2.1696627382827351
(x - a) / (long double) b =-2.1696627382827349

470 名前:デフォルトの名無しさん :2006/01/11(水) 07:59:03
__int64使え

471 名前:デフォルトの名無しさん :2006/01/11(水) 08:24:53
プログラミング以前の問題では?

http://www.geocities.co.jp/SiliconValley/5634/t82DC_0005.html
> まるめごさ
> 丸め誤差
> 【現象】
> ・2進数では小数以下が正しく表現できない事がある為に発生する問題。
> ・誤差の一つ一つは小さいけれど、「チリも積もれば山となる」で
> 当然の如くさまざまな問題を引き起こす。
> ・2進数も分からずに、「C言語できます」「VBできます」
> てな人が何も考えずに作ったプログラムでは良くある事です。
> ・あ〜恐ろしい。

472 名前:デフォルトの名無しさん :2006/01/11(水) 08:29:16
下2つは個人的な感情でどうでもいいな

473 名前:デフォルトの名無しさん :2006/01/11(水) 08:52:11
> まるめごさ 
> 丸め誤差 
> 【現象】 
> ・あ〜恐ろしい。 


474 名前:デフォルトの名無しさん :2006/01/11(水) 12:33:46
>>471
折角の用語辞典も下2つを入れてるだけで台無しだよな

475 名前:デフォルトの名無しさん :2006/01/11(水) 13:19:27
別に2進数に限らずとも正しく表現できないと思うのだが。

476 名前:デフォルトの名無しさん :2006/01/11(水) 14:12:51
http://www.fuka.info.waseda.ac.jp/~kozo/suuchi/value/value_2.html
10進数から2進数への変換誤差
整数値の場合、全ての10進数は2進数に変換できますが、
小数の場合、10進数を2進数に変換できないことがあります。
例えば、2進数では10進数の0.1を表現できません。

丸めの指定
2進数では表現できない小数を扱うとき、通常、コンピュータは適当な2進数に変換します。
このように近似値に変換することを丸めといいます。丸めの方法には幾つか種類がありますが、
Visual C++では丸めの種類を明示的に指定することが可能です。

477 名前:デフォルトの名無しさん :2006/01/11(水) 14:29:16
ttp://www.fuka.info.waseda.ac.jp/~kozo/suuchi/value/value_1.html
>32bit計算機ではintには-2^-16 < int < 2^16-1の範囲の数値しか入りません。
#「^」は補った。

すげぇ、-2^-16が整数だって。

478 名前:デフォルトの名無しさん :2006/01/11(水) 14:30:41
>>477
いや、等号で結ばれていないから 0 < int < 65535 と解釈するべきだろ。
#どっちにしても蛸だが。

479 名前:デフォルトの名無しさん :2006/01/11(水) 14:51:35
>>477
細かいこと言うと、これはC99の場合だが負数の表現は
・符号と絶対値
・2の補数
・1の補数
の3つの内、どれかである事は規定されてるがどれを使うかは処理系定義な上
例えば2の補数において符号ビットが1、他は0の物をどう扱うかも処理系定義

だから32bit計算機=-2^16<int<2^16-1だとは言い切れないわけだが

480 名前:478 :2006/01/11(水) 15:15:13
>>479
いや、>477は-16乗を指摘したいのだろうよ。恐らくは31乗なのだろうから。

481 名前:デフォルトの名無しさん :2006/01/11(水) 15:25:44
>>480
いやそれは分かってる

482 名前:477 :2006/01/11(水) 15:34:31
>>478
あーそうか、確かにw

>>481
判ってたら何で>>479みたいなこと書くかなぁ。
2の-16乗って0.00000152587890625でしょうが。
それに、仮に2の16乗だとしても65536だよ。
32ビット計算機でそんなint幅(高々17ビット分)を仮定するようなコンパイラがあったら逆に凄いと思うぞ。

483 名前:デフォルトの名無しさん :2006/01/11(水) 16:18:34
>>482
面倒だったのでその辺は無視した
6行目までからで分かると思うが、下限が2^○とは限らないぞってことが言いたかっただけ

484 名前:464 :2006/01/11(水) 19:06:08
会社で聞いてみたところ、「最初にVBAから呼び出したときに、CPUの2次キャッシュにゴミが残ってしまい
2回目以降の呼び出しのときに代入された値が変わってくるのでは」と言われました。
VC++側のコーディングでは回避不可能かも、とのことです…

ちなみにP4 2.4Gです。

485 名前:デフォルトの名無しさん :2006/01/11(水) 19:09:16
>>484
いいか、そいつが同僚か上司かは知らんが












そいつを窓から投げ捨てろ

486 名前:デフォルトの名無しさん :2006/01/11(水) 19:33:44
投げ捨てろー!

487 名前:デフォルトの名無しさん :2006/01/11(水) 20:00:33
>>484
>>469

488 名前:464 :2006/01/11(水) 21:22:01
>>487
long double型へのキャストは試しましたが解決しませんでした。

サンプル作ったので帰ったらうpします。

489 名前:464 :2006/01/11(水) 23:11:43
サンプルです。
・Win32DLLを新規作成して以下の関数をエクスポートします。
extern "C" __declspec(dllexport) int __cdecl Gosa()
{
double a = 4.047;
double b = 1.8413;
double x = 0.052;
double y = 0;

y = (x - a) / b;

return 0;
}
(続く)

490 名前:464 :2006/01/11(水) 23:23:07
>>489補足 return 0; にブレークポイント設定します。

・関数を呼び出すExcelマクロを作成します。
Excelファイルはdebugフォルダに置きます。
Option Explicit

Public Declare Function Gosa Lib "GosaTest.dll" () As Integer

Sub main()
ChDir ThisWorkbook.Path
Gosa
End Sub
・VC++のデバッグオプションで実行ファイル:Excel.exe、コマンド引数:上記Excelファイルのパス、として
デバッグ実行します。
・Excelファイルが開いたら上記マクロを実行します。

で、結果は>>465の通りです。

491 名前:デフォルトの名無しさん :2006/01/11(水) 23:49:18
>>489-490
Debugモードだと確かに再現するね。
Releaseモードだと再現しない(2回目以降も同じ値が出てくる)。

最初>>464-465を見たときは最適化オプションの中の/Opの問題かなと思ったけど、
どうやら違うようだ。
なんでだろうね?


492 名前:デフォルトの名無しさん :2006/01/12(木) 00:39:47
EXCELがFPUを拡張精度にしてしまうからだと思う。
何で2回目からかはわからないが。(ウチの環境では1回目から拡張精度で計算の数値)
ウォッチの (x - a) / bはVC++側で計算してるので倍精度で計算の結果になっていると思われ。
_controlfp等でで制御してやればいいと思ふ。精度戻すの忘れずに。

493 名前:デフォルトの名無しさん :2006/01/12(木) 02:27:24
そういえばVCの浮動小数点数の連続した演算をFPUレジスタ内で済まして拡張精度になる最適化がある。
/Opでそれを無効にできる。
http://msdn.microsoft.com/library/ja/vccore/html/_core_.2f.Op.asp

494 名前:464 :2006/01/12(木) 11:34:22
>>492
それが原因だったようです。
http://support.microsoft.com/default.aspx?scid=kb;ja;883881
_controlfp(_PC_53, _MCW_PC); で解決しました。ありがとうございました。

495 名前:デフォルトの名無しさん :2006/01/12(木) 21:30:54
マルチスレッド初挑戦でいきなりはまってしまいました。
_beginthreadで起動した2つのスレッドに対し、
WaitForMultipleObjectsで終了待機させているのですが
スレッドの実行が一瞬で終わってしまうケースで
WaitForMultipleObjects呼出時点でスレッドが既に
終了していると、戻り値がWAIT_FAILEDになってしまいます。
このような状況に、どのように対処したらよいのでしょうか。

Visual C++ 6.0です。よろしくお願いします。

496 名前:デフォルトの名無しさん :2006/01/12(木) 22:07:13
>>495
_beginthreadexでCREATE_SUSPEND

497 名前:デフォルトの名無しさん :2006/01/12(木) 22:38:42
>>496
CREATE_SUSPENDにしなくても、_beginthreadexならスレッドが終了しても
CloseHandleするまでハンドルが生きてるから大丈夫。

498 名前:デフォルトの名無しさん :2006/01/12(木) 22:50:25
CREATE_SUSPENDじゃなくてCREATE_SUSPENDEDなんだな。
MSDNが間違ってる。

ちなみにCloseHandleするなって書いてあるけど
ホントにしなくていいんだよな。

499 名前:デフォルトの名無しさん :2006/01/12(木) 22:51:35
というか、_beginthreadはインターフェースが脳死なので使うな、
ってどっかに書いてあったような。

500 名前:デフォルトの名無しさん :2006/01/12(木) 22:52:54
>>498
begintheadなら本当に要らない。exなら要る。


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.