5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

VisualC++相談室 4

1 :いさましいチビの女:01/10/04 12:17
VisualC++関連の話題を扱うスレッドです。

旧スレッド
http://piza2.2ch.net/test/read.cgi/tech/993186053/l50

2 :デフォルトの名無しさん:01/10/04 14:09
削除依頼出しときました。

3 :デフォルトの名無しさん:01/10/04 18:24
きれいに減色するやり方教えてください。
自分で作ってみたんですが色の分布が広い画像ではイマイチです。
フルカラー画像から256色選択する部分と選択した色に残りの色を割り当てる
綺麗なアルゴリズム教えてください。
どこかに解説やソースが公開されていたりしませんか?
お願いします。

4 :200!:01/10/04 18:25
>>3 誤差分散法

5 :デフォルトの名無しさん:01/10/04 18:35
解像度を100倍くらいにして、ディザ

6 :デフォルトの名無しさん:01/10/04 19:26
>>3
全っ然VC++の話じゃねーな・・

7 :チビ女:01/10/04 19:50
>>2
なぜー?(>A<)

8 :デフォルトの名無しさん:01/10/04 22:02
>>3
色空間はRGBよりXYZ(やLa*b*)でやったほうが素直に仕上がるようだ。

9 :デフォルトの名無しさん:01/10/04 23:35
起動時のタイトルバーの文字ってどこで変更するの?

10 :デフォルトの名無しさん:01/10/04 23:36
SetWindowTextでお願いします。>>9

11 :デフォルトの名無しさん:01/10/04 23:44
>>10
MFCが勝手に書き換えてるタイトルのこといってるんじゃないかな。

どっかオーバーライドすりゃいいんだけど、忘れた。
MFCのソースを読め

12 : :01/10/04 23:48
>>9
CreateWindow()

13 :デフォルトの名無しさん:01/10/05 01:26
ねぇねぇ、c++(mfcも可)で、正規表現って、扱えるン?

14 :デフォルトの名無しさん:01/10/05 02:47
正規表現って何?

15 :デフォルトの名無しさん:01/10/05 02:48
まんこ

16 :デフォルトの名無しさん:01/10/05 03:07
/ちんこ/

17 :デフォルトの名無しさん:01/10/05 03:26
ちんこにぱーる。

$st="でんぐりがえし";
$st =~ s/で/ま/;

18 :デフォルトの名無しさん:01/10/05 06:04
自分で作れば、ってことになると思うが

19 :デフォルトの名無しさん:01/10/05 13:54
ある領域から、ある領域へメモリのコピーを行いたいのですが、
どのような方法が一番効率的でしょうか?

20 :デフォルトの名無しさん:01/10/05 14:00
>>19 何も考えずに memmove を使うと良い。

21 ::01/10/05 14:12
256色選択する部分を改良したら格段に綺麗になりました。
次は誤差拡散ってのに挑戦してみます。

22 :デフォルトの名無しさん:01/10/05 14:18
>>19
memmove

でも自分で書いたほうがちょっと速いかも・・・

23 :19:01/10/05 14:29
>>20
>>22
ありがとうございます。

memmoveのソースを読んでみたいのですが、
どうすればよいでしょうか?
マシン語のコードを出力してみたのですが、
memmoveについては出てこない・・・。

24 :デフォルトの名無しさん:01/10/05 14:35
LDIR(ふるっ

25 :デフォルトの名無しさん:01/10/05 14:48
>>19

速くなるのは、コピー元とコピー先の領域が重複する場合を
前提としないとき。標準の memmove は、そのままで速く動く
ように十分調節されているはず。

>>23
>マシン語のコードを出力してみたのですが、

外部関数は吐かない。

>memmoveのソースを読んでみたいのですが、

コンパイラのライブラリのソースを探すのは時間がかかる。
十分に経験があれば、君の考える方法で間違いないと思う。
変数の数を減らして、なるべくポインタを使って、
registerキーワードも付けておく。

26 :デフォルトの名無しさん:01/10/05 16:18
> ある領域から、ある領域へメモリのコピーを行いたいのですが、
^^^^^^^

...なぜmemmove? memcpyだと思うのだが。

27 :デフォルトの名無しさん:01/10/05 16:57
>>26
場合によりけり
領域が重なってる可能性がある場合はmemmove

28 :デフォルトの名無しさん:01/10/05 18:22
VCにSTLPortをインストールしたんですが、
CRT.NCBの情報を更新する方法がわからないので、
IntelliSenseが正常に働きません。

どうにか更新する方法ないでしょうか?

29 :デフォルトの名無しさん:01/10/05 19:50
age

30 :デフォルトの名無しさん:01/10/06 03:09
素直にmemcpy使え
リリースビルドだと最適化でrep movsd+αに変換されちゃうから>memcpy
2次キャッシュor実メモリにあることが前提でない限りどんな手動最適化したって無駄だ
(1次キャッシュにある限りどのCPUでも最速なので>rep movsd)
1次キャッシュにないことが前提ならFPU,MMX,SSE等を使った高速化手法が存在する

31 :デフォルトの名無しさん:01/10/06 06:41
DirectX sdkを使用してC++6.0でブロック崩しのプログラムを書いてみたんですが、コンパイルは特に問題ないのですが、リンクするときに
DXBlock.obj : error LNK2001: unresolved external symbol _DDLoadBitmap
等と9つ位出てしまいます。
これはsdkをちゃんと読み込んでないってことなんでしょうか?

32 : デフォルトの名無しさん :01/10/06 09:22
Visual C++ 6.0でコンパイルしたとtxtに書いてある
ソースコ−ドにdswやmdpがないのでお手上げです。
どなたかコンパイルの仕方教えてください。

33 :うんこ:01/10/06 09:38
あるディレクトリ下のファイルをすべてバッファに
取り込みたい場合に使うコマンドって何でしょう?
DQSは自覚しております。

34 :デフォルトの名無しさん:01/10/06 09:39
>>32
ソースコード一式を出せるなら、それを出したほうが早いと思うが。

一般的には Makefile があるなら nmake を使う。無い場合には cl 使って
コンパイル。

35 :デフォルトの名無しさん:01/10/06 10:02
>>33
意味がわからん。
1.ディレクトリ以下のファイル情報(ファイル名、サイズ、属性、etc...)を全てチェックしたい
2.ディレクトリ以下のファイルデータ(バイナリ)を全てメモリ上にロードしたい

まあ、どちらにしろ、FindFirstFile() FindNextFile()をMSDNで引きなさい。

36 :デフォルトの名無しさん:01/10/06 11:26
>>33
DQS=ドキュソ

37 :デフォルトの名無しさん:01/10/06 13:09
>>32
「Visual C++ でコンパイルする」というのと、
「*.dsw(ワークスペース) や *.dsp(プロジェクト) のファイルがある」というのは、
全く別のことです。(話の次元が違います)

ワークスペースやプロジェクトといったファイルが使われるのは、
Visual C++ に付属の「(いわゆる)統合開発環境」でビルドするときに限った話です。

38 :28:01/10/06 14:27
俺の質問に答えろよ!!!!!

39 :28:01/10/06 14:50
さーて荒らすか

40 :デフォルトの名無しさん:01/10/06 16:58
>>28
かっちょ悪いよ。

41 :デフォルトの名無しさん :01/10/06 17:33
>>32
コンパイル?
君のやりたいことはビルドじゃないのか?
どっちにしてもVCのメニューからビルドを選べ。

あと、ソースコードにdswだのmdpだの書き込まれてるわけじゃないぞ。
それらはビルドするときに勝手に作られる。

42 :28:01/10/06 17:54
>>40
かっこ悪くても言いから教えろよ

43 :デフォルトの名無しさん:01/10/06 18:12
2chに来て吼えてる暇があったら自分で調べたらどうか。
ここでマジレスに見せかけたネタ回答をつかまされたらどうやって真贋を
確かめるつもりだ?

44 :28:01/10/06 18:54
>>43
そんなの、実際にやって反映されてるか見れば経たかどうかは一目瞭然だろ。
御託はいいから、早く教えろよ。

45 :28:01/10/06 18:55
経た > ネタ

46 :デフォルトの名無しさん :01/10/06 19:01
>>28
>VCにSTLPortをインストールしたんですが、

この時点で意味不明。VCってVisualC++のことじゃねーの?
開発環境に対してインストールしたってどういう意味だよ?

47 :28:01/10/06 19:47
>>46
どういう意味だかわかってるだろ?
VCで使うためにインストールした。
揚足とってる暇があるなら、教えろよ。

48 :デフォルトの名無しさん:01/10/06 20:04
この板で「教えろ」と吼えてマジレスをもらった事例はない。
ネタにされる前に頭を下げたらどうだ?(w

49 :デフォルトの名無しさん :01/10/06 20:15
>>47
だから、揚足取られるような奴質問ってのは意味がわからんっていってんだよ。

>>28だけ読んだら
CRT.NCBを更新したい?ハァ?何それ?
手動で更新すればぁ? で終わり。

もっと君の遭遇している問題を明確にしなさいって事。

50 :デフォルトの名無しさん :01/10/06 20:16
>>49
奴質問ってのは奴の質問ね。

51 :デフォルトの名無しさん:01/10/06 20:28
今度仕事でVC++6.0(MFC)を使わなきゃならないんですが、
お勧めの入門書ってあります?
今まではVBとMS−Cの仕事ばかりだったんで難易度が高く理解できません。
俺も厨房PGだったのか・・・

52 :28:01/10/06 20:29
>>48
いまさら頭下げてもかわんねーだろ

>>49 手動で更新すればぁ? で終わり。

だから、そのやり方を聞いてるんだよ。
お前、CRT.NCBが何かわかってねーだろ?

53 :デフォルトの名無しさん:01/10/06 20:43
>>51
MSDNに付いてるScribleチュートリアル。

54 :49:01/10/06 20:57
>>52
知るわけねーだろ、お前ヴァカ?
俺が煽りかどーかもわかんねぇの?

55 :デフォルトの名無しさん:01/10/06 21:01
2chで質問するやつってまともな回答来るとマジで信じてるんだろか?
玉石混淆の中から苦労して玉だけ探し当てるよりは確実に玉だけ教えてくれるとこ
行ったほうがいいとおもわれ。

56 :28:01/10/06 21:25
>>54
煽りだろうが、なんだろうが関係ねーんだよ。
俺はCRT.NCBの更新の仕方が分かればいいだけ。
あんたが知ってるかもしれないから反応したんだよ。

57 :デフォルトの名無しさん:01/10/06 21:35
> コンパイラの警告 (レベル 1) C4786
> 'identifier' : デバッグ情報で識別子が 'number' 文字に切り捨てられました。
> 識別子の文字列の長さが制限値を超えたので、切り捨てられました。

長い識別子など、どこにも使ってないのに、こんな警告がぞろぞろ出てしまいます。
我ながらしょうもない質問だと思いますが、万が一ヘルプに載っていること
以外でなにか原因をご存知の方、いらっしゃいましたら助言下さいませ。

58 :デフォルトの名無しさん:01/10/06 21:44
>>57
STLのmapとか使ってない?

#pragma warning(disable,4786)

を適当なところに書くと、警告でなくなるよ。

59 :49:01/10/06 21:52
>>56
だから、ハァ、何それ?って最初にいってるじゃんよ。
洞察力が足りないよ、チミィ。
そんなんじゃこの先何回でも壁にぶち当たるよ?
そのたびにココにきて荒れるのかい? ┐('〜`;)┌

60 :57:01/10/06 22:07
>>58
ありがとうございます、まさにその通りでした。
そして自分の情けなさに赤面です…。

61 :デフォルトの名無しさん:01/10/06 22:08
>56

一度ncbファイルを消すと自動的に再生成サレルヨ

イヤホント、マジデマジデ

62 :28:01/10/06 22:10
>>62
それはプロジェクトのncbだけ。
とうぜんCRT.NCBとか別ディレクトリに移動したけど、
反映されなかったしね。

つーことで、引き続き募集中

63 :28:01/10/06 22:50
俺の質問に答えろ

64 :49:01/10/06 22:58
>>63
だからぁ、IntelliSenseってあれだろ。
クラスオブジェクト名の後に「.」をつけるとメンバがポップアップで出る機能だろ?
STLPortって用はライブラリだろ?ttp://www.stlport.org/にあるやつだよな?

自前のライブラリでもヘッダをincludeすればIntelliSenseは機能するのに
なんでCRT.NCBを更新する必要がある?いちいちincludeするのが面倒なら
手動でwindows.hでにでもincludeしておけばぁ?

65 :49:01/10/06 22:59
用は要な。変換ミスは多めに見ろよ。

66 :デフォルトの名無しさん:01/10/06 23:05
つーか、IntelliSenseでincludeもしてねぇ識別子まで補完するのは
邪魔以外の何者でもないと思うんだが。意味ねぇし。

67 :49:01/10/06 23:12
>>66
禿げ同。
28が何を考えてるのかサパーリわからん。

68 :デフォルトの名無しさん:01/10/06 23:42
MFC。
CListBoxにAddString()で項目を追加するとき、文字色を設定するには?
listboxからCDCをgetしてSetTextColorしてみたものの変わらず。
簡単な方法があったらおせ〜て!!

69 :デフォルトの名無しさん:01/10/06 23:46
>>68
自分で作れば?

70 :デフォルトの名無しさん:01/10/06 23:46
 

71 :デフォルトの名無しさん:01/10/06 23:48
できるだけ自分で作りたくないからMFCを使うんだろ〜が。

72 :28:01/10/06 23:52
>>64 >>66
分かってないね。
#includeしようがしまいが、crt.ncbがある限りVC標準のSTLの候補が表示されて、
STLPortのが表示されるわけじゃない。crt.ncbを消してもSTLPortの候補は表示されない。
プロジェクトの外部依存以外の部分以外に追加すれば表示されるけど、
STLのヘッダなんていちいち追加したくない。

だから、crt.ncbを更新するのが一番いい判断だと思うんだが。

73 :28:01/10/06 23:53
>>66>>67

74 :49:01/10/07 00:01
>>72
ああやっと君の言いたい事がわかったような気がするよ・・・
名前空間ぐらい知ってるよな? それでもだめなら
Program Files\Microsoft Visual Studio\VC98\CRT\SRC
の中身を置き換えちまえ。VC標準のSTLはいらないんだろ?
どっちにしろIntelliSenseに頼るようなやつがSTLPort? (プ だけどな

75 :49:01/10/07 00:07
>>72
>プロジェクトの外部依存以外の部分以外に追加すれば表示されるけど、
>STLのヘッダなんていちいち追加したくない。

だからwindows.hにでもincludeしとけっていってるだろ、ヴァカ。
お前レベル低すぎるわ。ネタとしても。

76 :28:01/10/07 00:07
>>74
あんた、多分分かってない。
VC98/CRT/SRCを置き換えようが解決されない。

>STLPort? (プ だけどな
VCのSTLにバグがあるんだからしょうがないだろ

77 :28:01/10/07 00:09
>>75
だからぁ、windows.hにincludeしても解決しないんだって。
データベース(crt.ncb)に登録されてる候補が最優先で表示されるから。
std::
って入力しても、VC標準のSTLの候補が出てくるわけ。
ちなみに、crt.ncb削除すると、普通のCランタイムの候補が表示されなくなる。

78 : :01/10/07 00:10
>>72
*.ncbを編集するツールは俺の知る限りない。
つーことで、crt.ncbをつくれ。
まず、空のプロジェクトを作ってその中にstl-port、Cヘッダのすぺての
関連するファイルを「プロジェクトに追加」する。できたncbをcrt.ncbと
置き換える。出来るかどうか知らんけど。
ちなみに#includeしただけだと、コード補完は動かんぞ。

79 :デフォルトの名無しさん:01/10/07 00:24
一番恥ずかしいやつ >>49

80 :デフォルトの名無しさん:01/10/07 00:25
VC++ Ver6.0を使ってます。
メールを送信するクラスライブラリ等を探しています。
イメージしているのは下記の雰囲気のものです。

CMail Mail;
Mail.SMTP = "smtp.aaa.co.jp";
Mail.Subject = "○○の件";
Mail.To = "abc@xyz.co.jp";
Mail.From = "xyz@abc.co.jp";
Mail.File = "添付.txt";
Mail.Message = "いつもお世話になります。\nさようなら。";
Mail.Send();

・MFCを使っていてもかまわない。
・出来ればソースがあると有り難い。(今後勉強のため)

上記のようなものがどこかにないでしょうか?
MSDNライブラリ見てもよく分からないので・・

81 :28:01/10/07 00:26
>>78
サンクス。面倒だけど、やってみる。

82 :デフォルトの名無しさん:01/10/07 00:26
一番ウザイやつ >>28

83 :49:01/10/07 00:27
>>76
おまえも多分わかってない。
俺が言いたいのはVCのSTLのヘッダとライブラリを全部STLPortの奴に
入れ替えろって事。それで反映されないわけがないだろ。
お前のVCが存在しないライブラリを参照する特別製ならダメだけどな。

84 :49:01/10/07 00:30
ああ、なんだか客観的にみると 「 28 = 49 = 自演厨房 」
に見えるな・・・

85 :28:01/10/07 00:31
>>83
もしかして、VC使ったこと無い?
*.ncbはプロトタイプの情報全部記録されてるデータベースだから、
実際のヘッダがどうなっているかは関係なく、*.ncbに記録されてる情報しか表示されない。

#余談だけど、クラスウィザードがおかしくなるって言うのはコレが原因。

VCのIDEはヘッダの中身を走査してクラスウィザードやIntelliSenseに反映させるわけじゃないんで、
その方法じゃどうあがいても解決されない

86 :デフォルトの七士さん:01/10/07 00:34
わからないことがあるんですけど、教えていただきたくて書いてます。
CSplitterWnd::DoScroll(CView* pViewFrom, 、)
この第一引数の説明に

pViewFrom スクロール メッセージが発生したビューへのポインタ。

という説明が書いてあるんですけど,
ビュークラスへのポインタ?って事ですか?

誰か教えてください。お願いします。

87 : :01/10/07 00:35
>>83
28もウザイがお前もウザイ。
MSDEVのコード補完はヘッダを見てるわけではない。
自分のプロジェクトに入っているコードを元にIDEが作ったncbと
最初からあるmfcatl.ncb,crt.ncb,win32.ncbをデータベースとして
候補を表示してる。

88 :49:01/10/07 00:36
>>85
だから煽りだっていってるだろ・・・
なんかわかってるっぽい人がレスしてるじゃん。その人に結果報告でもしたら?
いつまでも俺にかまってるとダメ人間になっちゃうよ?

89 :デフォルトの名無しさん:01/10/07 00:44
49は明らかに「構ってクン」なんだから、放置しとけよ。
そのうちに飽きて消える。

90 :49:01/10/07 00:45
>>87
べつに君にウザイって言われてもねぇ・・・
>>78と同一人物でしょ?
自分がやったことの無い方法を提示して
知識をひけらかしてるだけの奴にウザイって言われてもねぇ・・・
煽りと対してかわらんよ? ま、28も最初荒れてた割には
真剣に困ってるわけじゃなさそうだし、俺はもう降りるよ。


□□□□□□□□  大変失礼いたしました □□□□□□□□ 

91 :デフォルトの名無しさん:01/10/07 00:46
86かわいそうにな。
こんなときに質問なんて,,,,,

92 :デフォルトの名無しさん:01/10/07 01:02
>>86
"CView* pViewFrom"ってあるのだが・・・

93 :86:01/10/07 02:13
86です。
BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
// ビューを何個か作る。
........。。;

// スクロールバーつける。
m_wndSplitter2.SetScrollStyle( WS_HSCROLL );
m_wndSplitter2.CreateScrollBarCtrl( WS_HSCROLL,
m_wndSplitter2.IdFromRowCol(0,0) );

で,分割ウィンドウに共有スクロールバーを作ってそのスクロールバーを動かしたい
んですけどMSDN読んでてもあんまりわかんなくて,
m_wndSplitter2.DoScrollBy(*****, 5, TRUE );
を使えば動くのかなって思って,*****になに書けばいいかわかんなくて
質問したんですけど、根本的になんか違うのでしょうか?
おしえてください。

94 :デフォルトの名無しさん:01/10/07 02:49
>>93
共有スクロールやったことないのだが。
DoScrollはスクロールが発生すると呼ばれる関数なので違うと思う。
CWndのスクロール関係の関数やGetScrollBarCtrlでスクロールバー
を取得していろいろやってみるとか。

95 :86:01/10/07 12:23
94さん。ありがとう。
なんとかやってみます。

96 :デフォルトの名無しさん:01/10/07 22:46
sqrtfって何?

97 :デフォルトの名無しさん:01/10/07 23:05
>>96
sqrt() の float 版じゃないの?

98 :93:01/10/08 12:17
分割ウィンドに個別のスクロールバーってつけれるんですか?

99 :49:01/10/08 16:32
>>78
おい、空のプロジェクト作ってSTLPortのヘッダを全部プロジェクトに追加したなら、
それを雛型としてCustomAppWizardで登録すればいいじゃねーかよ!

ちゃんと教えてやれよ、ケチ!

100 :80:01/10/09 21:43
う〜ん、フォローが付きませんね。 ( >80 )
クラスの格好してなくてもいいです。 クラス化ぐらいはやりますので。
80で挙げたプロパティー程度を入れるとメール送信してくれればそれでいいです。
やっぱそんなのないのかな?

101 :デフォルトの名無しさん:01/10/09 21:48
>>100
nMail.dll とかは?
別ファイルになっちゃうけど。

102 :URL忘れ:01/10/09 21:49
http://www.nanshiki.co.jp/lib/nmail.html

103 :デフォルトの名無しさん:01/10/09 21:54
 VC6の自分のプロジェクト内で、他の人の作ったプロジェクトの中の
クラス(一つだけ)を使いたいのですが、プロジェクトの追加やDependancyの設定
をしても、link時にリンク不能のエラーが出てきます。これは、必要な
.objファイルを一つ一つ丹念にリストアップすることしか解決法が
ないということでしょうか。

104 :デフォルトの名無しさん:01/10/09 22:09
>>100
RogueWaveのライブラリに、smtp agent classとかあるんじゃない?
popはあるみたいだけど。

105 :80:01/10/09 22:20
>101-102
ソースがあればもっと嬉しかったですけど、これで目的は達成できそうです。
これだけ太っ腹なメーカーさんがnMail.dllの権利は放棄しないみたいなこと
を書いるので、おそらくそう簡単なものではないのでしょうね。(意味通じるかな?)
俺程度の素人には、このDllみたいなものを自作するのは荷が重いのかもし
れませんが、ぼちぼち勉強していきます。
いずれにしろ当面はこれで十分です。ありがとうございました。

106 :80:01/10/09 22:33
>104
こちらも紹介ありがとうございます。
ただ、こちらのサイトを見るに個人で勉強がてらぱっと作るという用途ではなさそう
ですね。
本格的な製品開発向け、といったところでしょうか。
俺は前者なのでこちらのサイトは少し合いませんでした。
>80 にそのあたりの事情説明が不足していたため、お手数おかけしてしまったよう
です。申し訳ありません。

107 :デフォルトの名無しさん :01/10/09 23:16
>>103
ちょっと意味がわからないんだが。
他人の作ったクラスを使うならヘッダファイルとライブラリファイル(またはソースファイル)を
もらえばいいんじゃないの?

108 :デフォルトの名無しさん:01/10/09 23:26
103です。その使いたいクラスがまた他にいろいろクラスを使っていて、
そのクラスのヘッダだけをもらうだけではlink不能になるんですが、なにか
簡単に全部のヘッダファイルをプロジェクトごとインクルードすることは
できないものでしょうか…

109 :デフォルトの名無しさん:01/10/09 23:38
>>106
勉強がてら、だったら自分で作れよ

110 :デフォルトの名無しさん:01/10/09 23:46
「ドキュメント」から「ビューの状態」を遷移させたいんだけど、
どうやってやってますか?
やっぱりポインタひっぱってくるの?
ちょっとオブジェクト指向的に逝きたいんだけど、
参考になるもんございませんか?

111 :デフォルトの名無しさん :01/10/09 23:46
>>108
念のため確認するけどヘッダだけじゃクラスのメンバの宣言しかないから
定義部分(つまりソースファイル .cpp か ライブラリ .lib)がなきゃ
コンパイルできないよ。ヘッダファイルに定義まで書いてあるなら別だけど。
(それってC++で可だったっけ・・・?)

そんなことは分かってるとしてその状況ならむしろそのプロジェクトに
自分のファイルを追加したほうが早いんじゃない?

112 :sage:01/10/09 23:54
>>110
doc-viewはOOでもなんでもないからなあ。

あきらめてviewを拾ってくるか、
もっとましなフレームワークは選択できない?

113 :デフォルトの名無しさん :01/10/10 00:00
>>110
無理すんな、やめろ。

114 :デフォルトの名無しさん:01/10/10 00:18
>>112
「ましな」ってどういうのあるんですか?

115 :デフォルトの名無しさん:01/10/10 00:34
>>114
wtl

116 :デフォルトの名無しさん:01/10/10 00:41
>>115
こいつは聞きかじりだけで書いてて、wtlがどういうものか詳細は知らない

117 :  :01/10/10 00:52
WTLが出たので聞きたいのだが、WTLの日本語の解説ってないの?

118 :デフォルトの名無しさん:01/10/10 00:53
>>116
ワラタ

119 :デフォルトの名無しさん:01/10/10 00:58
日本語見たことない
べつにあのままでもわかるでしょ

120 :デフォルトの名無しさん:01/10/10 02:06
>>110
CDocument::UpdateAllViews()じゃいかんの?
対応するViewのOnUpdate()が呼び出されるんだけど。

>>112
上記メソッドがObserverパターンに対応すると思うのだけど、どうよ。

121 :デフォルトの名無しさん:01/10/10 02:17

バージョンが6.0からあがらないんですけど大丈夫なんでしょうか?

122 :おいちょかば:01/10/10 05:37
APIでMDIを扱っていたんですけど、DOCウィンドウを最大化した状態で
FRAMEウィンドウをリサイズするとDOCウィンドウのサイズは変わらずに
そのままになってしまう。FRAMEのサイズにあわせてDOCのサイズも
変化するようにしたいんだけどどうしたら良い?

123 :デフォルトの名無しさん:01/10/10 07:47
マップモードをかえて描画したのですが、
 pDC->SetMapMode(MM_ISOTROPIC);
 pDC->SetWindowExt(0x100,0x100);
 pDC->SetViewportExt(0x200,0x200);
LineToなどがうまく描画されません。
端の方が細い線になってしまいます。
何が原因なんでしょうか?
 pen.CreatePen(PS_SOLID, 1, RGB(0,255,0));
 oldPen = pDC->SelectObject(&pen);
 pDC->SetROP2(R2_XORPEN);
ちなみにペンはXORです。

124 :デフォルトの名無しさん:01/10/10 10:00
>>122 WM_SIZE, WM_SIZING

125 :デフォルトの名無しさん:01/10/10 10:16
ソースリスト等は、どういうタイミングでセーブされるんだろう

停電にあったけど、ソースが生きてたので

126 :デフォルトの名無しさん:01/10/10 11:55
>>125
Ctrl+Sを押したとき
F5を押したとき
Ctrl+F5を押したとき
など

127 :デフォルトの名無しさん:01/10/10 12:25
ボタンなどのコントロールを飛び越える線を書きたいんだけど、どうすればいい?

128 :122:01/10/10 13:16
>>124
最大化されてると効かなかった気が…
ちょっと試してみます

129 :デフォルトの名無しさん:01/10/10 15:12
マジメに質問です。
VC++ を使ってコンソールアプリ作ってますが、
プログラムの中から外部の .exe を実行させる方法はあるのでしょうか。
引数の渡し方など、詳しく教えていただければありがたいと思います。

当方、VC++6、WinMe です。
MFC は使っても使わなくてもいいです。
よろしくお願いします。

130 :デフォルトの名無しさん:01/10/10 15:30
>>129 CreateProcess 関数を呼ぶこと。この関数を呼ぶには STARTUPINFOとPROCESS_INFORMATION構造体が必要である。
STARTUPINFOには起動時の状態を指定する。
STARTUPINFOのdwFlagsに渡したい情報のフラグをOR演算子 | でつなげて指定する。
PROCESS_INFORMATION構造体は、プロセスの情報を得るために使う。そのまま渡せば良い。
初めのうちは SECURITY_ATTRIBUTES のアドレスを渡さなくてもOK(代わりにNULLを渡す)。

131 :デフォルトの名無しさん:01/10/10 15:57
PROCESS_INFORMATION pi;
STARTUPINFO si;
si.cb = sizeof(si);
si.lpReserved = NULL;
si.dwFlags = 0
CreateProcess("notepad.exe", NULL, NULL, NULL, TRUE,
HIGH_PRIORITY_CLASS, NULL, NULL, &si, &pi);

132 :デフォルトの名無しさん:01/10/10 16:29
いつ見てもC/C++のソースは汚いなぁ
やっぱりDelphiが1番良いや

133 :デフォルトの名無しさん:01/10/10 16:45
CreateFileでopen(モードはGENERIC_WRITEとOPEN_ALWAYS)したファイル
に、データを追加したいのですが、
WriteFileでデータを書き込むと、追加ではなく、ファイルの最初から書き込みされてしまいます

openした時、ファイルポインタが先頭になってしまっているから?
だと思うのですが、

データを追加したい場合はどうすれば良いのでしょうか?

134 :デフォルトの名無しさん:01/10/10 16:47
>>97
WinExec("notepad.exe", SW_SHOW);
system("notepad.exe");

135 :デフォルトの名無しさん:01/10/10 16:50
>>133
SetFilePointer

136 :デフォルトの名無しさん:01/10/10 17:08
129です。
CreateProcess を使って、所望の動作を実現できました。
お返事を頂いた方、本当にありがとうございました。
#なぜかフルパスじゃないと動かないという問題が残ってますけど。。

137 :デフォルトの名無しさん:01/10/10 17:16
>>136
重要なことだが、返されたプロセスハンドルを WaitForSingleObject で待って、CloseHandle しないといけない。

>#なぜかフルパスじゃないと動かないという問題が残ってますけど。。

CreateProcessの第8引数とか、GetFullPathName, Get{Current,Windows,System}Directory, SearchPath, FindFirstFile[Ex] を調べとけ。

138 :デフォルトの名無しさん:01/10/10 17:22
>>137 待ちたくなければ、さらにCreateThread しなければいけない。

139 :デフォルトの名無しさん:01/10/10 17:23
>137
ありがとうございます。
で、調べたサンプルプログラムに
if (pi.hProcess) {
  DWORD dwExitCode = STILL_ACTIVE;
  while (dwExitCode == STILL_ACTIVE) {
    WaitForSingleObject( pi.hProcess, 1000 );
    GetExitCodeProcess( pi.hProcess, &dwExitCode );
  }
}
とあったんですが、これで問題ないでしょか?

#フルパス問題については調べます。

140 :デフォルトの名無しさん:01/10/10 17:43
サンプルの中には、初心者の無知に付け込んだものが多い。
WaitForSingleObject 関数が終わるまで待つので、STILL_ACTIVE かどうかを調べる必要はない。
while ループは要らない。WaitForSingleObjectを抜けた地点で、プロセスの終了が保証される。

141 :デフォルトの名無しさん:01/10/10 18:14
で?

142 :デフォルトの名無しさん:01/10/10 18:34
>>141 MSDNを見て考えましょう。

DWORD dwResult;
if (pi.hProcess) {
  WaitForSingleObject( pi.hProcess, INFINITE );
  GetExitCodeProcess( pi.hProcess, &dwResult );
}

143 :デフォルトの名無しさん:01/10/10 18:56
dwResult はどうやって取得するの?

144 :デフォルトの名無しさん:01/10/10 19:00
GetExitCodeProcess が格納してくれる。

145 :てんさいぷろぐらむぁ(偽) ◆8Fck5JHo :01/10/10 20:13
>>142

なんでもかんでもINFINITEにしたら不測の事態や特殊な処理に対応できないのでわ?

>>139のサンプルにコメントを入れてみる。
if (pi.hProcess) {
  DWORD dwExitCode = STILL_ACTIVE;
  while (dwExitCode == STILL_ACTIVE) {
    WaitForSingleObject( pi.hProcess, 1000 );
    GetExitCodeProcess( pi.hProcess, &dwExitCode );
    // ここで状況に応じてあんな処理やこんな処理をしてみたりする
  }
}


サンプルはある程度柔軟性を持ったソースである方が正しいような気がする。
まあ何があっても自然な形で終わらせられるのが一番スマートなんだろうけど
他のプロセスをいぢる以上相手が何やってるかわからん場合もあるだろうし。

146 :てんさいぷろぐらむぁ(偽) ◆8Fck5JHo :01/10/10 20:15
if (pi.hProcess) {
  DWORD dwExitCode = STILL_ACTIVE;
  while (dwExitCode == STILL_ACTIVE) {
    WaitForSingleObject( pi.hProcess, 1000 );
    GetExitCodeProcess( pi.hProcess, &dwExitCode );
    // ここで状況に応じてあんな処理やこんな処理をしてみたりする
  }
  // ここで状況に応じてあんな処理やこんな処理をしてみたりする
}

147 :デフォルトの名無しさん:01/10/10 20:18
>>146
STILL_ACTIVEでの判定は正しくないよ。
プロセスが終了コードとしてSTILL_ACTIVEと同値を返した場合は
判定をミスする

148 :デフォルトの名無しさん:01/10/10 20:18
>>145
>なんでもかんでもINFINITEにしたら不測の事態や特殊な処理に対応できないのでわ?

一理有り。しかし、while と STILL_ACTIVE は不要。

149 :sage:01/10/10 20:27
不測の事態用のイベントオブジェクトも作って
WaitForMultipleObjectしとけ。

CloseHandleきちんとやっとけ。

150 :てんさいぷろぐらむぁ(偽) ◆8Fck5JHo :01/10/10 20:37
うーん
ぢつはCreateProcessとか他のプロセスを使うモノは
あんまり書いた事が無いんでなんとも言えないんですが。

先に>>148について
>一理有り。しかし、while と STILL_ACTIVE は不要。

親的には本来終わっているはずの子プロセスが
内部で勝手に無限ループなどをかまして
終了しない場合を考えてみると
INFINITEを指定すると子プロセスに引きずられて親も永遠に終了しなくなってしまう。

WaitForSingleObjectのタイムアウト値とwhileのループで
定期的に状態を調べる事によってそれを防げる。
whileにカウントを付けといて子プロセスが
(本来終了しているはずの状態で)数回ループした場合子プロセスは
不正な状況に陥ったと判断してTerminateProcessで強制的に終了する。
TerminateProcessもかなり危険であるが、親も一緒に死亡するよりはまし。

Ctrl+Alt+Delのタスクマネージャを自分でやるかんぢといえば分かりやすいかな?

>>147
>プロセスが終了コードとしてSTILL_ACTIVEと同値を返した場合は
>判定をミスする

それはそのプロセスがあほ過ぎるので仕方が無いかと(^^;
まあサンプルだしその辺はてきとーに対処してくださいソースなんだろうと。

151 :デフォルトの名無しさん:01/10/10 20:41
> それはそのプロセスがあほ過ぎるので仕方が無いかと(^^;

あほすぎるって、終了コードに対するガイドラインってあったっけ?

152 :てんさいぷろぐらむぁ(偽) ◆8Fck5JHo :01/10/10 21:05
とりあえず今MSDNをてきとーに見た感じでは

少なくともGetExitCodeProcessの説明で
「指定したプロセスが終了していないときは、STILL_ACTIVE が格納されます。」
と書いてあるんだから、STILL_ACTIVEを返さないのが普通では?

この値ってSCODEじゃないのかと。

153 :beginer:01/10/10 22:15
for(;;){ここ}
ここで宣言した変数は、forを抜けても生き続けますか?

154 :デフォルトの名無しさん:01/10/10 22:25
no

155 :beginer:01/10/10 22:30
ははぁ!わっかりましたー!

156 :デフォルトの名無しさん:01/10/10 23:31
質問です。
ifstreamを使うだけで、デバッグ終了時に
「メモリリークじゃボケ」って出るんですけどなんででしょうか?

157 :デフォルトの名無しさん:01/10/10 23:33
>>154
嘘言うなよな

>>155
生き続けます

158 :名無しさん:01/10/10 23:33
どう使ってるのか書けやゴルァ

159 :デフォルトの名無しさん:01/10/11 00:28
BoundsCheckerで
「リソースリークされた場所、GlobalAddAtomA(wincore.cpp)」
とかって出るんですけど、これってどういうことでリークしてるの?

160 :デフォルトの名無しさん:01/10/11 00:37
GlobalAddAtom

161 :sage:01/10/11 00:38
>>159
たぶんこれ
ttp://www.geocrawler.com/archives/3/487/1999/11/0/2927948/

162 :デフォルトの名無しさん:01/10/11 00:46
>>161
よ、読めん。なんて書いてあるの?

163 :sage:01/10/11 00:56
嘘訳。

いわなかったっけ?リークじゃないけど、(ツールは)リークだって報告するね。
アイコンみたいに、プログラムが死ぬまで持たなきゃいかんリソースを確保してるんだ。
同じように、いろんなメモリやファイルのマッピングも、プログラムが死ぬまで
確保しておくんだよ。

だれか修正して。

164 :名無し蟻:01/10/11 02:56
>>157

そーゆー嘘を言っちゃいかんよ

165 :デフォルトの名無しさん :01/10/11 03:49
>>164 に一票。
スコープ外で生きてたらたまらんわ。

166 :デフォルトの名無しさん:01/10/11 10:04
>>165
俺も一票。不在者投票。

167 :166:01/10/11 10:06
ただ、>>157の人は、スコープはなくなってもメモリは解放されないと
言ってるような気はする。普通、それを生き続けるとは表現しないと
思うけどね。

168 :デフォルトの名無しさん:01/10/11 10:11
すみませんが質問です
VC++6.0 Win32SDKでプログラムの勉強しています

マウスポインタがウィンドウ上部のツールボタンなどに
触れたと同時の下のステータスウィンドウに説明文を
表示させたいのですがうまくいきません
WM_SETCURSORを使ったのですが、ツールバーにいくと
メッセージを捕まえてくれるのですが、個々のボタンでは
うまくいかないのです。
解決方法ご存知の方がいましたら、教えてください
お願いします

169 :デフォルトの名無しさん:01/10/11 10:25
がいしゅつならスマソ。
VC++で、UNIXのregexpに相当する関数ってあります?

170 :デフォルトの名無しさん:01/10/11 10:41
>>168
WM_MOUSEMOVE で捕らえて WM_NCHITTEST の返り値を調べてみましょう。
ツールバーのボタンはツールバーの子どもです。

171 :168:01/10/11 10:43
>>170
レスありがとうございます!
さっそく調べてみたいと思います
助かります

172 :デフォルトの名無しさん:01/10/11 10:53
>>127
>ボタンなどのコントロールを飛び越える線を書きたいんだけど、どうすればいい?

推奨しないけど、GetDesktopWindow() で得たウィンドウは、スクリーン全体を描画できます。
やり方としては、GetDesktopWindow, GetWindowDC の後、InvalidateRectで領域を設定してから
BeginPaint して、終わったら EndPaint を使う。MapWindowPoints とか <windowsx.h> の MapWindowRect は座標変換に役立つ。

173 :デフォルトの名無しさん:01/10/11 10:57
>>172
WM_PAINT 以外では BeginPaint を呼ぶな。

174 :デフォルトの名無しさん:01/10/11 11:21
>>172
非矩形ウィンドウを作って最前面に持ってくる。

175 :デフォルトの名無しさん:01/10/11 11:20
Microsoft Win32 APIの関数と概要:
http://www.topposystem.co.jp/DL/Win32API/

176 :デフォルトの名無しさん:01/10/11 11:46
IPアドレスを示すテキストデータ (例: '192.168.1.1' )
が正しいものかどうか
(変な英文字が入ってたり、255を超える数字が含まれていたり・・・ 等)
を判断する簡単な方法(API等)はありますか?
それとも、自分で一つ一つ
数字三桁で255以内で、次が'.'で、・・・と確認処理作るしかないのでしょうか

変なデータをsocket関数に渡すと、errorが返るかと思えば、
暴走しちゃうんですよね
それで、チェックが必要になりました

177 :デフォルトの名無しさん:01/10/11 11:59
>>176 簡単かどうかは知らんけど、これでどうだ
unsigned i1,i2,i3,i4; char c;
if (std::sscanf(ip_string, "%3u.%3u.%3u.%3u%c", &i1,&i2,&i3,&i4,&c) == 4
     && i1 < 256 && i2 < 256 && i3 < 256 && i4 < 256) {
    puts("OK");
}
else {
    puts("NG");
}

178 :デフォルトの玉無しさん:01/10/11 18:22

パスの通しかた教えてください。
ビルドの際に標準のパス(VC標準のヘッダやライブラリのパス)以外に
自分のライブラリ用のフォルダも参照されるようにしたいです。
レジストリをいじるんですか?
それとも自作ライブラリを標準パスにコピーするべきですか?

179 :デフォルトの名無しさん:01/10/11 20:18
>>178
set path=

180 :sage:01/10/11 23:18
-I
-L

181 :デフォルトの玉無しさん:01/10/11 23:19
すいません。質問させていただきます。
AbcCreateという関数をエクスポートする必要があります。
VC++のextern "C" __dllexport HRESULT CALLBACK AbcCreate(void* 0); では、
_AbcCreate@4になってしまいます。
VC++で装飾やアンダーライン抜きのDLLを作るにはどうすればよろしいのでしょうか。
BCC32ではうまくいきました。

182 :デフォルトの名無しさん:01/10/11 23:25
>>181
リンカに /export:AbcCreate=AbcCreate を渡すか、定義ファイルを書け。

LIBRARY Hoge
EXPORTS
AbcCreate=AbcCreate

183 :デフォルトの玉無しさん :01/10/11 23:36
速いレスありがとうございます。おかげでうまくいきました。私は6分で解決されることに丸半日を費やして何もできなかった愚かな密度の無い人間です。
自分が如何に無知かがよくわかりました。本当にありがとうございました。

184 :デフォルトの名無しさん:01/10/11 23:39
>>178

cd ~/
vi .bashrc
[i]
PATH=$PATH.:
[ESC]
:wq!

以上だ。

185 :122:01/10/12 00:19
>>124
試してみましたがうまくいきません。

最大化しているDocウィンドウに
SendMessage( hDoc, WM_SIZE, (WPARAM)SIZE_MAXIMIZED, (LPARAM)(x+y<<16) );
とやっても反応しません。
いったんもとのサイズに戻したあと最大化、とかやってみましたが、
ちらちらしてちょっといやな感じでした。

186 :デフォルトの名無しさん:01/10/12 00:44
>>178
メニューのプロジェクト→設定

187 :デフォルトの名無しさん :01/10/12 01:32
あっ、181=183です。182さんありがとうございました。

188 :デフォルトの名無しさん:01/10/12 09:27
>>185
最大化しているものを最大化してどうする?
maximize の逆は restore。メッセージの受け方、知らないの?
ウィンドウのサイズが変わったら WM_SIZING を受ける。
メッセージを受けたら ShowWindow, SetWindowPos で操作する。

189 :157ではないけれど、:01/10/12 13:28
>>153
>>157 の言っている事の方が正しい。
157を嘘と言っている奴は、宣言と定義の区別がついていないと思われ。
文章の感じから、>>153もその一人みたいだが。

190 :166:01/10/12 14:12
>>189
>>166 & >>167 の者だけど、俺はどう?

191 :デフォルトの名無しさん:01/10/12 14:50
>>190
おそらく >>153 自身が宣言と定義を混同していると思うんだが、まずはその点から。
宣言と定義の例をそれぞれ挙げると、前者は extern int i, 後者は int i となる。宣言
では変数の実体は確保されないが、逆にスコープを抜けても変数が保有している
データは開放されない。

--------------------------------------------------------------------
{
  extern int i;
  i = 0;
}

{
  extern int i;
  printf("%d\n", i);  // 0 が出力されるはず。
}
--------------------------------------------------------------------

もちろん、この場合には i に対してどこかで実体を与えないとならない。実体がない
とリンク時に「シンボルが解決できない」という類のエラーになる。


>>153 の「宣言」を「定義」に置き換えた場合。メモリの開放に関しては

- そもそも自動変数がスタック上に取られるとは限らない。現実に、レジスタをうまく使い
 まわすことで、スタックを消費しない場合もありうる。

- 自動変数をスタックに取る処理系でも、スコープを抜けた瞬間にスタックフレームポイン
 タを操作して、スタックを縮める実装があっても構わない。また同一のスタック領域を、別
 の自動変数に割り当てて使うのも OK。

 for (;;) {
   int i;
 }
 for (;;) {
   int j;  // これで &i == &j とか。
 }

ということで、標準Cの範疇では「スコープを外れた自動変数が持っていたデータに関して
は、スコープを外れた瞬間に保証できなくなる(そもそもアクセスする手段を提供してない)」
以上のことは言えない。

192 :名無し蟻:01/10/12 14:52
>189

...もしかして、for ( int i ; ; ){}と間違ってないか?

193 :名無し蟻:01/10/12 14:58
>191

あぁ、そうか宣言か。定義と読み間違えてた。悪い。

確かに宣言だけなら実体はつくられないから、「生きてるかどうか」なんてのを考えるのはナンセンスだな。
この辺りがわからなければCの入門書を読み直せばわかるだろう。

だがforブロック内で変数”宣言”なんてのはスパゲティの素だと思うから止めた方が良いと思うけどね

194 :189:01/10/12 15:19
>>190
同類。変数の宣言とその寿命は別物。
宣言が必ずしも定義とは限らない。

195 :デフォルトの名無しさん :01/10/12 15:31
>>193
熱く語る前にしっかり読め。

196 :154:01/10/12 15:37
オレも読み違えてた。
でも、じゃぁこの質問単なる引っ掛けか?
普通forブロックで宣言なんてしないよな。

197 :デフォルトの名無しさん:01/10/12 15:59
なるほどなー やっぱ2chはタメになるゼ!
かーさん!新しいパソコン買って!!

198 :雑談スレないから、ここに書くよ:01/10/12 16:01
たまに、システムのincludeファイル(windows.hとか)の中身を見たい時があって、
エディタで開いたりするけど、
これらのファイルって、READ ONLYじゃないんだね
で、見てる時にキー操作のミスで知らないうちに
一文字くらい変なところにアルファベットとか打っちゃって、
そのまま間違ってセーブしたりして、
それでエラーでたら、解決に相当悩む気がする

さっき、知らずに変な文字打っちゃってて、
気が付いたから良かったんだけど・・・

199 :デフォルトの名無しさん:01/10/12 16:07
>>198 間違ってたらデバッグしてねって事なんだよ。

200 :デフォルトの名無しさん:01/10/12 17:00
>>193-196
いや、やるだろ。
「変数はそれが使用される場所で宣言されるべきである。」

201 :デフォルトの名無しさん:01/10/12 17:47
>>200
定義じゃなくて宣言なの?

202 :デフォルトの名無しさん:01/10/13 00:15
あくまで趣味プログラミングに括った場合での質問です。
自分は普段MFCを使わずにプログラミングをしているのですが、
MFCでプログラミングしている友人から、
「MFCを使わないのって、どこがいいの?」
という質問が飛んできました。
とりあえず自分は、軽い・実行モジュールサイズが小さい・フレームワークの
段階から自由に設計できる、という利点を挙げたのですが、
どうにも納得がいかないようなのです。
自分も、MFCを使うことの利点はわかっていますが、
彼にもSDKプログラミングの楽しさを知ってもらいたいなーというのもあります。
彼を納得させられるような、両者の違いというのをご教授願いたいです。

203 :デフォルトの名無しさん:01/10/13 01:12
MFCは多機能、フレームワークを作らなくても良いから書き始めるまでが早い、
クラスウィザードの全面的支援が得られる・・・
ごめん、俺やっぱSDKよりMFCの方が好きだわ(w

204 :デフォルトの名無しさん:01/10/13 01:22
>とりあえず自分は、軽い・実行モジュールサイズが小さい・フレームワークの
>段階から自由に設計できる、という利点を挙げたのですが、

ていうか、この程度の瑣末なメリットを捨て去って余りある利点がMFCにはある。

205 :sage:01/10/13 02:44
誰か激しく突っ込んでやれよ >>196

206 :デフォルトの名無しさん :01/10/13 03:43
現在スクロールバーを自作しています。
標準のスクロールバーは16ビットまでしか扱えないため32ビットの範囲を扱えるものを作っています。
通常のスクロールバーと同じ動きにしたいんですがタイミングなどが分からないので教えてください。

1.スクロールバーの矢印のボタンを押すとスクロールしますが
  押しっぱなしにするとすこし間隔があいてから自動で連続スクロールが開始されます。
  この時の間隔の取得方法

2.連続スクロールが始まってからの間隔の取得方法

3.スライド部分をドラッグしてスクロール出来ますが
  ドラッグした状態で20ドットほどスクロールバーから離れると解除されます。
  また近づけるとドラッグが有効になります。
  この境界部分のピクセル数の取得方法


これらはAPIで取得できるのしょうか?
教えてくれた人には「娘。ポッキー?当たるの〜?」です。

207 :122:01/10/13 03:52
>>188
指南ありがとう。希望の動作ができました。
MDIClientのWM_SIZEでDOCウィンドウに対して
SetWindowPosをやって解決…
これで安心して逝けます。再びありがとう

208 :デフォルトの名無しさん:01/10/13 04:35
>標準のスクロールバーは16ビットまでしか扱えないため
NTでもそうなんだっけ?

209 :デフォルトの名無しさん:01/10/13 04:46
>>206
32bitを扱えるぞ。16bitなのはWM_H/VSCROLLのWPARAMだけ。

210 :デフォルトの名無しさん:01/10/13 07:18
>>206
全部APIで取得できるよ。
おれも前に作ったよ(ゲームのセッティング画面用だけれど)

211 :beginer(153):01/10/13 07:59
スンマセン!ジツハ,シツモンジタイ マチガエテマシタ!
int* min = &data[i]; は一回目のループが
終わった時、*minはどうなるんざましょ?ってことだったのです。スンマセン!

#include <iostream>

void sort(int* data, int n)
{
for (int i = 0; i < n - 1; ++i) { /* 走査の回数は n - 1 回 */

int* min = &data[i]; /* 未整列部分の先頭を最小値と仮定 */

for (int j = i + 1; j < n; ++j) { /* 未整列部分を走査 */
if (*min > data[j]) { /* data[j] が *min よりも */
min = &data[j]; /* 小さい場合は、それを新 */
} /* しい最小値と仮定 */
}

int temp = *min; /* 最小値と未整列部分の先頭を入れ替える */
*min = data[i];
data[i] = temp;

}
}

int main()
{
int data[] = {12, 8, 4, 3, 7};
sort(data, 5);

for (int i = 0; i < 5; ++i) std::cout << data[i] << std::endl;

return 0;
}

212 :189:01/10/13 14:01
>>211
minは外側のfor (int i = 0; i < n - 1; ++i)のループの繰り返しのたびに、
新たに作られる。これは外側のforループのブロックの先頭でminを*定義*して
おり、そのブロックの終わりまでがminのスコープとなるため。

# あと、どうでもいいけどbeginnerな。(w

213 :デフォルトの名無しさん:01/10/13 14:06
ワロタ

214 :beginner(153):01/10/13 14:49
>>212
ワッカリマシター!アリガトウゴザイマシター!
宣言ではなくて、定義だからですねん。
ヤヤコシイ(;∀;)

215 :189:01/10/13 16:16
>>214
ちと書き方がまずかった。
誤解を招きそうなんで以下の通り訂正。

minは外側のfor (int i = 0; i < n - 1; ++i)のループの繰り返しのたびに、
新たに作られる。これは外側のforループのブロックの先頭でminを*定義*して
いるため。また、この例では定義=宣言でもあるため、そのブロックの終わり
までがminのスコープとなる。

>>194でも書いたが、定義は宣言でもあるが宣言は必ずしも定義とは限らない。
宣言は、コンパイラに対して他の部分で定義された、あるいは今まさに定義さ
れようとしているシンボルの存在を教えるためのもので、強く型付けされた言
語では、これ無しにシンボルは利用できない。フォワード宣言や他の翻訳ユニッ
トで定義された大域変数のプロトタイプ宣言などは、どれもそのシンボルを現
在のスコープに導入するためのもの。そういう意味で、>>200の言っているこ
とは正しい。ただ、>>201が書いているように、多くの場合、>>200の言う宣言
はその定義も含む変数のこと。

通常、宣言といったら定義と区別してそう呼ぶことが多く、定義を含まないも
のを指すため、>>189のように書いた。

beginner(153)が迷いませんようにとの願いを込めて長レス。sage。

216 :202:01/10/13 16:44
>>203-204
ご意見ありがとうございます。
どちらから入ったかによって、その逆が取っつきにくく感じられることって
ありますよね。自分も友人もそのような傾向にあるようです。
自分がSDKの道に入ったのは、「猫でも〜」のページとの出会いでした。
ていうか、このスレって、SDK派の人は少ないのでしょうか・・・。

217 :beginner(153):01/10/13 18:21
>>215
宣言と定義の違いがいまいちわかりません。
struct A{
int a;
int b;
};
はどっちでしょうか?
int main (){
int a;
return 0;
}
は、どっちですか?
トイウカ、マトハズレナシツモン?(・□・;)

218 :206:01/10/13 19:11
SBM_GETSCROLLINFO で32ビットのトラック位置(?)が取得できました。
WM_HSCROLL では16ビットなので16ビットまでしか扱えないと思ってました。
というわけで自作するのは辞めました。
パイパイキーン!!

219 :デフォルトの名無しさん:01/10/13 23:48
>>217
そろそろ腰を据えてK&Rを読みなさい。
その方が君のためになる。

220 :デフォルトの名無しさん:01/10/13 23:51
>>217
前者が定義、後者の int a; が宣言だと思う。
そもそも「変数の定義」なんて言い方は無いと思ったけど・・・。
変数は宣言するものであって定義するものじゃないんじゃないの?

221 :デフォルトの名無しさん:01/10/14 00:04
>>220
君もそろそろ腰を据えてK&Rを読みなさい。
その方が君のためになる。

222 :beginner(153) :01/10/14 00:07
K&Rですか!!
も、もうちょっと詳説C++プログラミングを
読み進めようと思います。。。
あと、C言語ポインタ完全制覇も。。。

前に、K&Rらしき本をチラリと見たのですが、
サパーリワカラナカッタノデ…。
まだ参照とかポインタとか理解が不十分なモノデ

223 :デフォルトの名無しさん:01/10/14 09:41
>>222
じゃあ、他の本読むの無駄だと思いませんか?
まずはK&Rを完全理解するのを目指すのが一番いいと思います。

224 :デフォルトの名無しさん:01/10/14 11:54
>>223 に激しく一票。

C++ だと、宣言と定義の境界があいまいになってくる部分があるように思う。
だからいきなり C++ じゃなくって、まず K&R が先。

225 :デフォルトの名無しさん :01/10/14 15:30
IMEの有効無効の切り替えはどうやるんですか?
自作のエディタ(たいした機能はなし)を作ってます。
読み取り専用のものと編集可能なものの2種類です。
同じアプリの中で同時にある場合
読み取り専用にフォーカスがある場合IMEを無効にして
編集可能なものの場合有効にしたいです。
(エディットボックスの読み取り専用みたいな感じです。)
何ていうAPIを使ったらいいですか?

226 :デフォルトの名無しさん:01/10/14 15:38
>>225
ImmSetConversionStatus
ていうかMSDN読め。

227 :デフォルトの名無しさん:01/10/14 15:47
新たにクラスを作成するとデフォルトコンストラクタが
自動的に宣言、定義されるのですが、
これって残しておかないとまずいのでしょうか?

228 :デフォルトの名無しさん:01/10/14 15:56
あなが必要でなければいりません。ヘッダとcppの両方のコンを消してください。

229 :227:01/10/14 18:43
>>228
どもです。デストラクタが自動生成されるのはわかるような気がしますが、
なんでデフォルトコンストラクタが作られるんでしょうか?

230 :デフォルトの名無しさん:01/10/14 18:52
コピーコンストラクタを自動生成してもあまり嬉しくないから。

231 :227:01/10/14 19:50
>>230
どちらか(copy or default)生成しなければならない理由でもあるのですか?
両方とも生成されなくても良いと思うのですが。

232 :デフォルトの名無しさん:01/10/14 19:59
デフォルトコンストラクタって、
どうせ書くことのほうが多いんだし、
雛型だけでも自動的に吐いてもらうと楽じゃん。
いらなきゃ10秒で削除できるし。

233 :デフォルトの名無しさん:01/10/14 20:11
あとから派生クラスでオーバー炉ー℃したくなったときにはじめっから書いておけば楽ジャン

234 :デフォルトの名無しさん:01/10/14 20:12
らい℃だったか。

235 :デフォルトの名無しさん:01/10/14 20:12
>>231
生成されると不都合があるのか?

236 :デフォルトの名無しさん:01/10/14 20:18
>>232-235
レスをありがとうございます。
ただ、的が外れてまして、
>>229
> なんでデフォルトコンストラクタが作られるんでしょうか?
>>230
> コピーコンストラクタを自動生成してもあまり嬉しくないから。
>>231
> どちらか(copy or default)生成しなければならない理由でもあるのですか?
に対する回答がほしいのです。

237 :デフォルトの名無しさん:01/10/14 20:21
>>236

結局いつか書くから

だろ。
書かないなら消しなさい。

238 :236:01/10/14 20:25
>>237
それは、
>>229
> なんでデフォルトコンストラクタが作られるんでしょうか?
に対する回答ですよね。
それは、前の方が書いたのでわかります。
そうではなくて
>>230
> コピーコンストラクタを自動生成してもあまり嬉しくないから。
>>231
> どちらか(copy or default)生成しなければならない理由でもあるのですか?
への回答がほしいのです。
あなたはVisual C++を使ったことがありますか?
copy constructorはデフォルトで自動生成されません。

239 :C++初心者:01/10/14 21:31
C++初心者です。質問させてください。

VisualC++(DirectX)でゲームを作ろうと思うのですが参考になる本。
これを読んでおけって言う本無いでしょうか。
こんな事をしておけなども、、

これでも一応職業はプログラマです。
でもC++だけはあまり触ったことがないので、、
過去にCの仕事をやったことがあるのですが一回だけなのでこの際"未経験"って事でお願いします。
出来るのはKylix、Delphi(ObjectPascal)、perl、DBMagic、COBOL、VBです。

こんな私ですがご教授下さい。

240 :デフォルトの名無しさん:01/10/14 21:35
】==2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数:72094人 発行日:2001/09/27

こんにちは、ひろゆきですー。

いやぁ、ついに逮捕者がでましたねー。
これを機に、荒し依頼とか荒らした人とかもバシバシ逮捕されるようになると、
2chの運営も楽になるなぁと溜飲を下げる午後のニュースでありました。

おいらもこれからは荒らしの被害者からの苦情には誠実に対応することにしま
したです、、、
5月には、珍走団からの苦情の電話に「バーカ、バーカ」とイキがってしまい、
その後痛い目にあってしまいましたです。
みんなの前で土下座するのは恥ずかしかったですです。。。
まさか直接乗り込んでくるとは思いもしなかったんです、、、
恐るべし、珍走団。。。(;;)
と、苦い思い出を噛み締める夕暮れでした。。。

んじゃ!

241 :デフォルトの名無しさん:01/10/14 22:11
>>239
参考になる本はいっぱい書いてあるだろ。
過去ログ読んでから書き込め。

っていうか自分で努力しろ。まずはそっから。

242 :デフォルトの名無しさん:01/10/14 22:12
>>238

頭悪いなぁ。どうして

> なんでデフォルトコンストラクタが作られるんでしょうか?
に対する
> コピーコンストラクタを自動生成してもあまり嬉しくないから。
から
> どちらか(copy or default)生成しなければならない理由でもあるのですか?
になるのよ?

>230を逆に言えば、デフォルトコンストラクタを自動生成してくれると大半の人は嬉しいのよ。
いちいち書く手間が省けるからさ。

どうしてそこまで読みとれないのよ?

なんべんも
「どうせ書くなら自動生成してくれる方が楽」
「あんたがいらないなら消せ」
と言われてるでしょ? 頭悪すぎるよ?

さらに
> あなたはVisual C++を使ったことがありますか?
こんなくだらねぇ捨てぜりふ。救えないよ。マジで。

243 :デフォルトの名無しさん:01/10/14 22:34
>>236
的が外れてるのはお前の方。
生成されると不都合があるのか?

以下マジレス。
AppWizard経由でクラスを新規作成し、自分でソースを一切いじらずに
ビルドすることができる。

244 :デフォルトの名無しさん:01/10/14 22:40
>238
気にするなよ。なんでも疑問に思うことはいいことだ。

245 :236:01/10/14 23:32
>>242
>>230を逆に言えば、デフォルトコンストラクタを自動生成してくれると大半の人は嬉しいのよ。
>いちいち書く手間が省けるからさ。
そう言えよ。(藁
>>228でスデに"ストレートに"そういっているし、
遠まわしにいわれてもわからん。

246 :236:01/10/14 23:39
あ、で
>>242
|> なんでデフォルトコンストラクタが作られるんでしょうか?
|に対する
|> コピーコンストラクタを自動生成してもあまり嬉しくないから。
|から
|> どちらか(copy or default)生成しなければならない理由でもあるのですか?
|になるのよ?
デフォルトコンストラクタが作られなければ、
"かわりに"コピーコンストラクタが作られる、と読み取れたのです。

247 :デフォルトの名無しさん:01/10/14 23:48
>>246
>"かわりに"コピーコンストラクタが作られる、と読み取れたのです。
そういう妄想はどっから湧くんだよ(w

248 :236:01/10/15 00:09
「なんで朝食がパンなんですか?」
「米はあまりおいしくないから」
ってきたら、朝食がパンじゃなければご飯になりそうだと思いませんか?

249 :デフォルトの名無しさん:01/10/15 00:12
その発想力はいずれ君がゲームかなにかを企画するときのためにとっときなさい。
ここでは役に立たないから。

250 :デフォルトの名無しさん:01/10/15 00:21
すげーよこいつ。真説夢見館みたいなゲームはこういうやつから生まれてくるんだな。

251 :デフォルトの名無しさん:01/10/15 00:53
> >いちいち書く手間が省けるからさ。
> そう言えよ。(藁

”その程度”読みとれよ(藁

それともぼくちゃんのわかる言葉で、懇切丁寧に教えろと?

教えて君は例え素質があろうと嫌がられるよ?
言葉を曲解せずに素直に取れよ。日本語勉強すれ。

252 :デフォルトの名無しさん:01/10/15 00:53
>>248
それで何を喩えようとしているのかサッパリわからん。

253 :デフォルトの名無しさん:01/10/15 01:01
>>245-252
関係ない話題はどこかでやってください。

254 :236:01/10/15 01:38
>>251
|> なんでデフォルトコンストラクタが作られるんでしょうか?
|> コピーコンストラクタを自動生成してもあまり嬉しくないから。

「なぜ右の道から?」
「左の道だと遠回りだから。」
のようにとらえていました。
だから、「大半の人には右の道行ったほう(=def.con.自動生成)が嬉しい」のですよね?
で、右の道行けなかったら、左の道から行くことになりますよね。
私は後者のように考えていたわけです。

まー、わかってもらえれば嬉しいですけれども、
わかってもらえないならわからないでも良いです。

質問に答えてくださってありがとうございました。

255 :デフォルトの名無しさん:01/10/15 01:44
右と左しかないのか?
人に聞く前にまっすぐ突き進めよ。

256 :草加せんべい:01/10/15 02:12
くさっ!!!

257 :デフォルトの名無しさん:01/10/15 02:25
>>254
そこで右と左しか道がないと思いこむのはお前の思考が不自由なだけ。

258 :デフォルトの名無しさん:01/10/15 03:05
思い込みってのは怖いよ
間違った事を絶対正しいと思い込んでしまうと抜け出すのは難しい。
そういうときはちょっと下がって、上から下から斜めから眺めると
正しい道が見えてくる、とか言ってみる。

259 :デフォルトの名無しさん:01/10/15 07:30
なんか人生相談みたいで(・∀・)カコイイ!!

260 :デフォルトの名無しさん:01/10/16 00:16
>>259
さぁ、悩める子羊たちよ。

261 :void君:01/10/16 01:26
こんばんは、日曜日に基本情報技術者試験を受験します。
C言語の再帰的関数について教えてください。
#include<stdio.h>

long int combi(int n, int r)
{
long int C, C1, C2;
if(r == 0 || r==n) return 1L;
C1 = combi(n-1, r);
C2 = combi(n-1, r-1);
C = C1 + C2;
return C;
}
int main (void)
{
printf("5C3 =%1dです\n", combi(5,3));
}
結果 %1d には10が表示されるのですがcombiの中でどんな流れで値が10になったのか解りません。
C言語が準備不足で・・・これくらいの基本解ってないと合格厳しいでしょうか?
誰か教えてください、お願いします!

262 :デフォルトの名無しさん:01/10/16 01:51
組み合わせ数に関する恒等式 C(n,r)=C(n-1,r)+C(n-1,r-1) があるつーのは前提でいい?
だったらそのまんまだと思うんだけど。

combiを再帰呼び出しするところでは、あえてその先の流れは追わずに
「なんか知らないがとにかく答えが返ってくる」と考えればいい。

263 :void君:01/10/16 02:16
説明ありがとうございます。C(n,r)=C(n-1,r)+C(n-1,r-1) の計算はやってくれていることになるのかな?
再帰的関数の使い方わかってきました、ホント感謝です。

264 :デフォルトの名無しさん:01/10/16 13:42
プログラマーじゃないんですけど、疑問に思ったので質問させてください。
文書作成ソフトなんかでアンチエリアスに対応していると文字が見やすいすよね。
でも、対応しているソフトがそんなにないのは対応するのは難しいってことなんですかね?
それともニーズがあまりないんですか?

265 :デフォルトの名無しさん:01/10/16 14:09
エディットコントロールみたいなのを自作して
ダイアログ上のコントロールとして使用できるようにしています。
基本的に動いているんですがSPY++でメッセージを見ると
WM_KEYDOWN WM_KEYUP の間に毎回 WM_GETDLGCODE が送られてきます。
Windows標準のエディットコントロールでは送られていないメッセージなので
毎回送られる必要はないと思うのですが何処か間違っているのしょうか?
ちなみに WM_GETDLGCODE では DLGC_WANTALLKEYS を返すようにしています。
APIを使うか何かのメッセージに応答すると WM_GETDLGCODE が送られて来ないようになりますか?

266 :デフォルトの名無しさん:01/10/16 14:42
>>264
速い方がいいってこともあるし、最近のWindowsでは
サポートされているという事情も有る。

267 :デフォルトの名無しさん:01/10/16 14:57
ソケット通信を行うサーバーで複数のクライアントと同時に通信する場合
クライアントの数だけスレッド作って通信するもんですか?
CAsyncSocket::ReceiveやCAsyncSocket::Sendって処理が終わるまで返ってこないですよね?
これだと特定のクライアントとの通信が極端に遅い場合に他のクライアントが
待ち状態になってしまって非効率的なので別スレッドで通信した方が良いですよね?
それとも非同期で通信して完了したら何かのイベントが発生するようにできますか?

268 :はち:01/10/16 15:09
VC++で、チェックボックスをオーナー描画したいのですが。。。
関連で何かご存知なこと教えてください。

269 : :01/10/16 15:43
>>267
1)httpサーバー側で勝手にスレッド作って立ち上げますんで
  生成に関しては気にしなくていいです。
2)大抵のブロック関数は待ち中にスレッド切り替えしてます。

270 :デフォルトの名無しさん:01/10/16 17:09
>>268
ご存じなことて言われても。
チェックボックスにBS_OWNERDRAWスタイルを追加して
親ウィンドウのWM_DRAWITEMで描画。

271 :デフォルトの名無しさん:01/10/16 19:03
Accessのデータベースを扱いたいのですが、
Cでは構造体と配列 とポインタが使えるので、
ADOなどでデータベースに接続するより、これらを
使ったほうが簡単にdbができると思うのですが
どうでしょうか?
マジレす希望

272 :デフォルトの名無しさん:01/10/16 20:35
モノにもよると思われ。
もっとも、キミが AVLTree や B+Tree を作れるなら、だけどね。

もしかして、データベース理論、ちゃんと理解して書いてる?

273 :sage:01/10/16 20:42
データ件数が少なかったり固定だったり
複雑に絡み合ってたりしないなら、
XMLやCSV形式で保存して、読み書きするのもよし。
勝手にやれ。

でも、そうでないならISAMを使うことを検討してみては?
構造体とかなんとかいってるレベルだと、
ほとんどの場合、ISAMで十分な要件。
速いし、Accessの癖とバグに悩まされないですむ。

手抜きをしたくてAccessのVBAやフォームを使うんでない限り、
Accessを選択する意味はほとんどない。

RDBが必要だけど、大したデータを扱わないとか、
手抜きをしたくてODBC経由でクラサバやるんだけど、金がないとか
いう内容なら、MSDEで十分。

それ以上なら、それなりのDBを使え。

でもやっぱり、君のレベルならCSVかISAMが手頃だし、お似合いだ。

274 :いさましいチビの女:01/10/16 20:42
>>271
簡単な構造のデータなら、それでもいいかも。
2ちゃんねるのデータもテキストファイルで持ってるそうだし。

275 :デフォルトの名無しさん:01/10/17 09:46
ほんとにくだらないんだけど
VC++6.0でWINAPIのPostThreadMassageって関数を呼び出すときに
どやって定義したら良いの?いや関数I/Fはわかってんだけど、
定義のやり方がわかんない。

276 :デフォルトの名無しさん:01/10/17 10:00
定義と宣言を間違えているような。。。。
------
ヘッダ : winuser.h 内で宣言
インポート ライブラリ : user32.lib を使用
------
って書いてあるから、winuser.h 見れば?

277 :デフォルトの名無しさん:01/10/17 10:13
だめでした。
オプション→ディレクトリでライブラリファイルのパスはとおってる
んだけど。Hインクルードに追加したけど変化なしです。
\SVMain.cpp(629) : error C2660: 'PostThreadMessageA' : 関数が不正な 3 個の実引数をともなって呼び出されました。

278 :デフォルトの名無しさん:01/10/17 10:29
>>277
>不正な 3 個の実引数

引数は4個のはず。どこか間違えている。629行の辺りを書いて。

279 :デフォルトの名無しさん:01/10/17 10:34
たしかに3個で呼んでます。
でもおかしいな?MSDNでみたら引数3個だったんだけど。

//照合完了イベントの通知
bstrWork = SysAllocString(wcCmnNo);
///////////////////////////////////////////TRACE
svt.FreeTraceWrite(3, 100, "0x%08x !照合完了イベント通知処理開始", this);
///////////////////////////////////////////TRACE
//2001.10.16 yonezawa mod start
// FireEvent(CS_BOSV_RSP_ENDVERIFY, bstrWork);
PostThreadMessage(CS_BOSV_RSP_ENDVERIFY, bstrWork, 0);
//2001.10.16 yonezawa mod end
///////////////////////////////////////////TRACE
svt.FreeTraceWrite(3, 100, "0x%08x !照合完了イベント通知処理終了", this);
///////////////////////////////////////////TRACE
SysFreeString(bstrWork);

280 :デフォルトの名無しさん:01/10/17 10:41
型はこういう定義です。
BSTR bstrWork;

CS_BOSV_RSP_ENDVERIFYは定数。

281 :デフォルトの名無しさん:01/10/17 10:44
>>279
MFC と API を間違えているようだ。
MFC の CWinThread::PostThreadMessage を見ていたんだろ?

MFC は Microsoft が用意している C++のライブラリ。

Win32 API は、プラットフォーム SDK に付属している、
Windows を操作する為の関数群。

282 :デフォルトの名無しさん:01/10/17 10:50
>でもおかしいな?MSDNでみたら引数3個だったんだけど。

MSDN の左上の [アクティブ サブセット] を [(すべてのトピック)] に変えてみな。

283 :デフォルトの名無しさん:01/10/17 10:54
そうだ。。。ほんとだ。
じゃ4つにすればよいんだね。
さんくす

284 :デフォルトの名無しさん:01/10/17 16:17
ちっこい exe ってどうやって作ってますか
UPX は知っています
基本は API だけでガリガリ書くのだと思いますが、
pragma を利用すればそれをせずに済みますか?(リンカオプション設定)
/NODEFAULTLIB 使ってますけど、/INCLUDE って使えるのですか?
どうやって使うんでしょうか。リンク時の参照エラーメッセージを見て
マニュアルコピペで /INCLUDE するんですか?
_atexit などを LoadLibrary & GetProcAddress で呼んでるのですが・・

C ランタイムスタートアップ関数をオーバーライドすると
非ローカル変数が初期化されないらしいってヘルプで読みましたけど、
こういう場合は自分で適切な初期化関数を書くだけでいいのでしょうか
0 に初期化されるのは保証されるみたいですけど、それ以外のことをしたい場合
コンストラクタの実装を別にして、自分で呼んでやれば問題ないでしょうか?

285 :デフォルトの名無しさん:01/10/17 16:52
>>284
・スタートアップルーチンのオーバーライド
・Cランタイム使用不可
・RTTI使用不可
・例外使用不可
・リンク時にAlignmentを小さくする

この程度かな

286 :284:01/10/17 17:37
ありがとうです>285
Enable exception handling をオフにすると
C ランタイムを使っている場合、とてもサイズが減りました! 感謝です
RTTI使用はデフォルトでオフになっていますが、
オンにしてもサイズは変わりませんでした
上記の2つを両方ともオンにしても、API のみでガリガリ書いているやつは
サイズは変わりませんでした
> ・リンク時にAlignmentを小さくする
とはどういうことを指すのでしょうか

C ランタイムを exe に取りこまずになおかつ利用する方法は
ありますでしょうか(^^;

287 :デフォルトの名無しさん:01/10/17 17:45
>>285
> ・リンク時にAlignmentを小さくする
これは効果大だが Win9x/ME でロードできなくなるよ。

288 :デフォルトの名無しさん:01/10/17 17:55
>>オンにしてもサイズは変わりませんでした
ソース内で、dynamic_castなどを使用するなってこと。

>C ランタイムを exe に取りこまずになおかつ利用する方法はありますでしょうか
自作するか、代替のAPI(sprintf > wsprintf等)を使う。
CRTDLL/MSVCRTはスタートアップルーチン削っても使用できたか不明。


289 :デフォルトの名無しさん:01/10/17 19:22
Visual C++初心者です。
ある市販のプログラムの特定のボタンが押された際に発行される、
メッセージというのはVC++を使って捕らえることができるのでしょうか?

やりたいことは、市販のソフト(VCまたはVBで作ってEXE で、ソースなし)
の特定のボタンを押した際のメッセージハンドらをつくりたいのです。

290 :デフォルトの名無しさん:01/10/17 19:28
> できるのでしょうか?
よほど特殊なものでない限り、出来ます。

291 :デフォルトの名無しさん:01/10/17 22:01
>>287
/opt:nowin98 なら問題ない。

後はコードセクションやデータセクションなどを結合させてしまうとか。
Hello, World なら 1,024bytes で可能だな。

292 :デフォルトの名無しさん :01/10/17 23:18
>>289
spyのソース見れ。いや、まずspy使え。

293 :286:01/10/18 03:16
>288
今のところ自作してます
CRTDLL/MSVCRT がスタートアップルーチンなしで動くかどうかは
試してみます。しかし公式なドキュメントが見つかりませんね
関数を呼んでもエラーにはならないようですが

>287
1024byte はすごいですね
/opt:nowin98 も入れて、Susie Plug-in の DLL の作成 Tips で読んだ
/merge:.data=.text /merge:.rdata=.text /section:.text,erw
のようにやっておりましたが、2.5KB がせいぜいでした・・
具体的にどのようにやるのでしょうか

聞くところによると、500byte くらいも可能とのことでしたが・・

294 :293:01/10/18 03:18
↑>291

295 :デフォルトの名無しさん:01/10/18 15:40
>>293
ほかには、、、姑息な手段として、
__declspec(naked)とか。

296 :デフォルトの名無しさん :01/10/18 16:33
VCで3Dを作成してるもののソースどっかにないですか?

297 :デフォルトの名無しさん:01/10/18 17:18
>>296
そんなこと、できるわけ無いじゃん

298 :デフォルトの名無しさん:01/10/18 17:40
>>296
いや、Open-GL用いて3D簡易エディタ作ってるんだけど
マウスから線を引いたりするあたりがよくわからない
で、参考となるソース探してるんです

299 :デフォルトの名無しさん:01/10/18 17:42
>>293
1024バイト。
#include <windows.h>

#pragma comment(linker, "/entry:main")
#pragma comment(linker, "/opt:ref /opt:nowin98 /merge:.data=.text /merge:.rdata=.text")

main() {
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), (void*)"Hello, World!\n", 14, 0, 0);
}

300 :293:01/10/18 18:31
>299
す、すごいです
1024バイト感動しました

>295
__declspec(naked) で検索してみたら面白いサイトが
タクサンでてきました。アセンブリの世界が少し
垣間見られました

あ、実行してみたら落ちた。。。
main() {
DWORD dwWork;
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), (void*)"Hello, World!\n", 14, &dwWork, 0);
}
これで良いでしょうか

301 :デフォルトの名無しさん:01/10/18 19:00
>SPY

Windows2000上にBecky Ver2が立ち上がっている。
この際、受信ボタンを押したイベントハンドラを見ることは
SPYを使ってできるの?
できれば、詳細にやり方教えて下さい

302 :デフォルトの名無しさん:01/10/18 19:03
>>300
えーっと、win2k?
2kでしか試してないんだけど。

303 :291:01/10/18 22:38
>>299
/section:.text,erw がないと NT4 では動かないみたい。
9x,2k だとデフォルトの /section:.text,er でも動くようだが。

>>300
動いているなら良いのでは?
9x だと出力したサイズがいらない場合でも NULL にはできなかったはず。

undll.exe というソフトのソースを見たら、ExitProcess で終了してた。
実際に使うようなソフトを作るなら、ExitProcess で終了するようにした方が安全かもな。
Susie Plug-in や DLL なら必要ないのだろうが。

304 :デフォルトの名無しさん:01/10/19 14:11
>>301
SPYのファインダーツール(メニュー・スパイ・ウィンドウ検索)を使って Becky のメインウィンドウのメッセージを監視する。
Becky で「送信」を選択すると WM_COMMAND が送られるはず。
SPYのメッセージウィンドウ?に WM_COMMAND の WPARAM の内容が表示されるので
そこから「送信」に割り当てられているIDを取得する。
自分でメッセージフック(SetWindowsHookEx)を行うプログラム(他のウィンドウのメッセージフックなのでDLLが必要)を作る。
メッセージを監視してWM_COMMAND で「送信」のIDがきたらGetModuleFileNameで送信元のプログラムのファイル名を調べ
Becky のものと同じなら(Beckyのプログラム名はレジストリのインストール情報から取得)自分のプログラムに通知して処理を行う。
「送信」のIDもメニュー・ツールバー・ポップアップメニューで異なる可能性もあるので注意。
(自分はBecky持ってないので未確認)
拙者が云えるのはこれくらいでござる。

305 :デフォルトの名無しさん:01/10/19 16:56
VC++初心者です、よろしくお願いします。
m(__)m ペコリ

VCからBATやEXEなどの実行プログラムを起動し、
実行したプログラムが終了するまで、
プログラムを先に進めない(非道期実行)を行いたいのですが、
どのようにすれば良いのでしょうか?

ご存じの方がいらっしゃれば、宜しくお願い致します。

306 :デフォルトの名無しさん:01/10/19 17:11
>>305
同期じゃん

307 :デフォルトの名無しさん:01/10/19 17:17
>>305
http://members.tripod.co.jp/hori54/fastcmd.html

308 :デフォルトの名無しさん:01/10/19 17:41
>>305

CreateProcess した後、WaitForSingleObject する。

309 :305:01/10/19 18:21
>>306
すいません、同期って書いたつもりが、間違ってました。

>>307>>308
ありがとうございます。
月曜日にでも試してみます。

310 :草加せんべい:01/10/19 18:39
いや、今やれよ

311 :デフォルトの名無しさん:01/10/19 22:40
質問させていただきます。

ダイアログに貼り付けるリストボックスにおいて、
横スクロールバーを設定してもDisableになったまま機能しないのですが、
これはVCまたはWindowsのバグなのでしょうか?

プログラムで強制的にEnableにしてもダメでしたが、良い方法が
ありましたら、簡単に教えていただけると助かります。
リストボックス内に文字列が表示しきれないときに不便でしょうがないです。

312 :デフォルトの名無しさん :01/10/19 23:08
>>311
Windowsの仕様です。
横スクロールするリストボックスなんて見たことあるの?

313 :デフォルトの名無しさん:01/10/19 23:09
>>311
LBS_MULTICOLUMNスタイルじゃないと
リストボックスの横スクロールバーは出なかったような?

それだと全然違うスタイルで解決になってないのでsage

314 :311:01/10/19 23:26
レスありがとうございます。
>>312
例えばエクスプローラーの詳細表示時などは横スクロールしますよね。
あれは独自にやってるのかな…そんな感じもしますね。

>>313
ありがとうございます。
月曜日にでも試してみます。

315 :デフォルトの名無しさん:01/10/19 23:36
それはリストビューだ

316 :311:01/10/19 23:39
>>315
ということはMFC…
MFCいや〜ん

317 :草加せんべい:01/10/19 23:45
オリジナルテキストエディタを作りたいのですが、
テッキストボックスコントロールを1から自分で作るとなると、
ウインドウのクライアント領域に直で書かないとだめなんですか?

318 :デフォルトの名無しさん:01/10/19 23:59
>>317
そうだよ。面倒だけど、やってみると、とってもおもしょいよ。

319 :デフォルトの名無しさん:01/10/20 00:03
>>316
SDKでもリストビュー作れるやん。おれはやらないけど。

320 :デフォルトの名無しさん:01/10/20 01:10
FileViewのところでクラスのcppとhを1セットにして
フォルダを作りまくったのですが、
フォルダを並べ替えられないことに気づきました。
直接dspファイルを書き換えればいけそうだけど
シンプルに並べ替える方法ありませんか?

321 :デフォルトの名無しさん:01/10/20 01:57
>>320
適当なフォルダに全部つっこんで1個ずつ出したら順番変わったぞ。
いま手元にあるのがVC5で、VC6では試してないが。

322 :320:01/10/20 14:19
おお、なるほど、VC6でもうまくいきました。感謝感激

323 :デフォルトの名無しさん:01/10/20 14:38
VC英語版ってどうなん?日本語版よりだいぶ安いけど
説明書が英語なだけ?それとも日本語関連のライブラリが無い?

324 :デフォルトの名無しさん:01/10/20 14:40
説明書が英語なだけ。

325 :デフォルトの名無しさん:01/10/21 01:49
サンキュウそいつはありがてえ

326 :デフォルトの名無しさん:01/10/21 23:25
VBの配列をDLL関数で受け取る方法

以下のようにしてVBの配列をDLL関数に渡すと、
pCount は正常に受け取っているのですが、
p() の内容がでたらめな数値を受け取ってしまいます。
どのようにすれば p() を受け取れるようになるのでしょうか?
VC初心者なので、うまく質問もすることができませんが、
よい知恵をご伝授お願いいたします m(_ _)m
--VB---------------------------------------------
Public Declare Function TASIZAN Lib "test.dll" ( _
ByRef p() As Long, _
ByVal pCount As Long) As Long

Dim p(2) As Long
p(0) = 10: p(1) = 20: p(2) = 30
MsgBox TASIZAN(p(), 3) '<-- 正常な値が表示されない


Win32 Dynamic-Link Libraryで作成
--VC---------------------------------------------
extern "C" __declspec(dllexport) int __stdcall TASIZAN( int p[], int pCount )
{
int i, kei = 0;
for( i = 0; i < pCount; i++ ) { //<-- pCount は正常
kei += p[i]; //<-- p[i] の内容がでたらめになる
}
return kei;
}

327 :デフォルトの名無しさん:01/10/22 00:25
VC++で__imp__EnumDisplayDevicesA@16がUser32.libに無くて
ビルドできません。
Platform SDKが要るという噂なんですがどこで手に入るでしょうか?
ダイレクトぱすを持てる人(日本語)教えてアル。m(_ _)m

328 :デフォルトの名無しさん:01/10/22 00:34
>>327
google で検索すれば、すぐに見つかると思うんだが。

ftp://ftp.microsoft.com/developr/platformsdk/

329 :デフォルトの名無しさん:01/10/22 00:36
>>327
M$

330 :デフォルトの名無しさん:01/10/22 00:41
>>328ftpupありがとアルm(_ _)m

331 :デフォルトの名無しさん:01/10/22 02:58
自作のエディタを作っているんですが特殊キーの実装のマニュアルみたいなのってあるんですか?
Ctrlを押しながらCを押すとコピーするってのは標準だと思いますが
Ctrlを押しながらDELでキャレット以降の文字を削除みたいな特殊なものって標準化されているんですか?
ほとんどのエディタで使われているので標準化されているような気もしますが・・・
どっかに資料があるなら教えて。
ないなら最低でもこれは実装しておけってキーと機能教えて。

332 :デフォルトの名無しさん:01/10/22 04:02
>>326
ByValでポインタ渡したらダメなん?
p自体は結局ポインタだと思うんだけど・・・

333 :デフォルトの名無しさん:01/10/22 04:07
>>331
MSDNの中にショートカットキーとかUIに関するガイドラインみたいの
があるから、”ユーザー インターフェース ガイドライン”あたりで
検索すれ。

334 :デフォルトの名無しさん:01/10/22 04:27
>>326
もしくはp(0)をByRefで渡すか。
どっちが通るかは忘れた。
もしくはどっちも通るかもしれない・・・

335 :MFCなら:01/10/22 14:41
CListBox::SetHorizontalExtent

336 :MFCなら:01/10/22 14:42
ゴメン。送信ミス。
>>311
CListBox::SetHorizontalExtent

337 :313:01/10/22 14:51
>>336
311じゃないけど、こんなものがあったのか。
マニュアルはちゃんと読めということですな>含む俺

338 :デフォルトの名無しさん:01/10/23 08:30
>332、334様
ありがとうございました。無事解決しました。

339 :デフォルトの名無しさん:01/10/23 11:50
>>305

過去ログ見た?
>>129 あたりから同様の質問が出てるから見てみれば。

340 ::01/10/23 13:40
携帯のかたちのウィンドウをつくりたいのですが、どこかに
ウィンドウの形をすきにできるやりかたの載っているサイトはありませんか?

341 :デフォルトの名無しさん:01/10/23 13:44
>>340
やっぱMSDNでしょう。
http://www.microsoft.com/japan/developer/library/default.asp
キーワードはSetWindowRgnか?はずれたらごめん。

342 ::01/10/23 14:26
ども

343 :659:01/10/23 14:34
ビルドとコンパイルの違い教えて下さい

344 :デフォルトの名無しさん:01/10/23 14:36
>>343
コンパイルはファイルを一つだけコンパイルして obj を作る、ビルドはプロジェクトの
ファイルを全てコンパイルしてビルドターゲット (exe, dll, lib など) を作る。

345 :デフォルトの名無しさん:01/10/23 15:51
int と long ってどう違うんでしょうか

346 :デフォルトの名無しさん:01/10/23 17:12
>>345
Win32環境なら同じ。

347 :デフォルトの名無しさん:01/10/23 17:25
構造体の代入について教えてください。

OPENFILENAME of1 , of2;

@ of1 = of2;
A CopyMemory(&of1 , &of2 , sizeof(OPENFILENAME));


@とAって同じですか?
スピード的に違ったりしますか?

348 :デフォルトの名無しさん:01/10/23 17:30
>>347
アセンブラ出力させて眺めましょう。

349 :デフォルトの名無しさん:01/10/23 17:54
>>347
構造体のコピーに(2)を使うと危ないでしょ。
(OPENFILENAMEは平気だけど)

350 :デフォルトの名無しさん:01/10/23 18:58
>344
thanx

351 :デフォルトの名無しさん:01/10/23 21:49
MFCでDirectDraw使うときに、
DirectDrawCreateはどこで呼ぶのが適切ですか?

352 :345:01/10/23 23:32
>346
ありがとうございました。わざわざ書き分ける必要なんてないんですね(^^;

353 :デフォルトの名無しさん:01/10/24 08:52
MFCのMDIアプリでMainFrameに画像を貼るってできるの?

354 :デフォルトの名無しさん:01/10/24 09:18
>>349
(2)が危険な理由がわからないので、教えてもらえませんか?

355 :デフォルトの名無しさん:01/10/24 09:21
>>354
コンパイルの仕方で構造体データが不連続になるらしい。

356 :デフォルトの名無しさん:01/10/24 09:40
>355それはどこで仕入れた知識だ?

357 :353:01/10/24 09:43
できた。

358 :デフォルトの名無しさん:01/10/24 09:45
>>354
C++だと、
代入演算子が再定義されてたりするかもしれないし、
メンバ変数に、クラスがあるかもしれないし。

バイナリイメージのコピーはバグを生む可能性が高い。

(WinAPIで使う構造体は、Cを前提に書かれているんで
大丈夫だとは思うけど)

359 :デフォルトの名無しさん:01/10/24 09:50
>>354
その構造体がなんらかのポインタを保持しており、
それが動的に確保されたものの場合、
単純なメモリコピーではそのメモリまでコピーできない。

だから、もしそれが C++ で書かれていて、
かつその構造体に代入演算子が定義されていたら、
それを使うべし。

360 :デフォルトの名無しさん:01/10/24 09:50
>>356

構造体のメンバのアライメント(配置)、パック。
#pragma pack
詳しいことは知らないが。

361 :デフォルトの名無しさん:01/10/24 10:00
32ビットPCは1アドレス4バイト。
静的な場合は、各メンバは4バイト境界に置かれる。
動的に確保された場合、メンバが詰められて配置される。

362 :デフォルトの名無しさん:01/10/24 10:07
>>360
それは別に、CopyMemory()を使っちゃいけない理由には
ならないと思う。

363 :354:01/10/24 11:21
>>358
了解。
それでOPENFILENAMEは平気だけどと注釈が入っていたのですね。

364 :DQS:01/10/24 16:17
concole applicationでコンソールを表示させないようにするには
どうしたらよいですか?ドキュソですいません。

365 :デフォルトの名無しさん :01/10/24 17:48
>>364
ディスプレイに出力しないアプリならWin32アプリから呼び出せば非表示じゃないの?
違ったっけ?

366 :aaa:01/10/24 17:53
aaaa

367 :お胸おっぱい:01/10/24 18:02
>>364
以下のどれでも。

1. ウィンドウのない Win32 アプリにする。
  ・プリプロセッサの定義の _CONSOLE を _WINDOWS にする。
  ・リンクの“一般”のプロジェクトオプションの /subsystem:console を
    /subsystem:windows にする。
  ・main を WinMain にする。
  VC++ 4.2 ではこれで出来たけど、今はどうかな…

2. 起動用のショートカットを作って、プロパティの“実行時の大きさ”を“最小化”にする。
  実行するときはショートカットから。

3. 頭で FreeConsole() を呼ぶ。一瞬表示されるのは我慢。

368 :デフォルトの名無しさん:01/10/24 18:05
>>364
コンソールアプリじゃなくて、
普通のWin32 applicationじゃいかんの?
mainをWinMainにするだけじゃん。

369 :DQN生:01/10/24 19:21
longより大きい桁数を表示できる変数教えてください。

370 :デフォルトの名無しさん:01/10/24 19:25
__int64

371 :デフォルトの名無しさん:01/10/24 19:25
>>369
表示じゃなくて表現、ね。

372 :デフォルトの名無しさん:01/10/24 19:41
__int64ってなに?

373 :デフォルトの名無しさん:01/10/24 20:19
>>372
Microsoft C/C++ がサポートする 64-bit 整数型。

374 :デフォルトの名無しさん:01/10/24 20:31
VCスレだから、__int64で正解でいいだろ

375 :草加せんべい:01/10/24 21:05
windowsXPでは、C++を前提にAPIが書かれるといううわさは本当ですか?

376 :デフォルトの名無しさん:01/10/24 23:18
CreateProcessにDOS窓表示させないフラグあるわよ

377 :大三元:01/10/25 00:01
初心者質問でごめんちゃい。

@”ブレークポイントが設定出来ない〜〜”と怒られる。
A「'C:\WINDOWS\SYSTEM\KERNEL32.DLL' をロードしました、
合致するシンボル情報は見つかりませんでした。」と出る。

Helpの”ブレークポイントが機能しない原因について”を読んで、

B[プロジェクト設定] ダイアログ ボックスの [デバッグ] タブの [追加する DLL]
をいじり、再試行すると、

C「'C:\WINDOWS\SYSTEM\kernel32.dll' のシンボルを読み込みました」と出、次に、
A「'C:\WINDOWS\SYSTEM\KERNEL32.DLL' をロードしました、
合致するシンボル情報は見つかりませんでした。」と出る。

Bの効果がないように思われるのだが。・・・それとも見当違いなのか?

何だか、これで半日が潰れてしまった。助けてくれまし。

P.S.
・同名ファイルに関するチェックもしたが。
・verは5。

378 :デフォルトの名無しさん:01/10/25 00:09
「合致するシンボル情報は見つかりませんでした。」
はデバッグモードで出てくるメッセージですね。
俺はそういうのは無視してますが何か?

ブレークポイントが設定出来ないのはコードのない領域に
セットしようとしてないですか? 場所を変えても駄目?

379 :デフォルトの名無しさん:01/10/25 00:19
>>377
C:\Windows って書いてるところを見ると NT/2000 ではなく 9x/ME 系の OS を
使ってる? 9x/ME は OS が copy on write の機能を持っていない都合上、シ
ステム DLL が提供する関数にはブレークポイントを設定できないよ。

380 :デフォルトの名無しさん:01/10/25 00:21
>377
それってWinNTとかWin2000のOSのデバッグシンボルをインストール
していないからじゃないかと・・・。

違っていたらスマソ。

381 :大三元:01/10/25 01:21
レスThanksです。

>378
ある単一の行に対して設定出来ないというのではなくて、
ソース(もしくはその一部?)に設定出来ません。
>379
95です(イマドキナガラ(笑))。
自分作成のソースに設定したいです。
>380
実は、雑誌付録のプログラムをビルド・デバックしてるんですけど、
(雑誌の筆者のOSが)Win2000だった場合には、”Win2000のOSのデバッグシンボル”
をインストールする必要があるってことでしょうか?
”××のOSのデバッグシンボル”とは?







382 : :01/10/25 01:27
デフォルトでF9を押したラインにブレークポイントが設定される
(左側に茶色の丸ができる)
もしデバッグ実行時にその警告メッセージが出るなら単純に
そのラインがブレークポイントにできない。(下にずれたりするはず)
例えばしたのバツの部分は設定できなかったりする。

× if(0){
●   i = 0;
●  }

383 :デフォルトの名無しさん:01/10/25 02:32
OSのデバッグシンボルはそのまんま、WindowsNTとかのシステムDLLの
デバッグ情報の*.dbgファイルのこと。
シンボルファイルは、デバッグ中でシステムコード上のスタックをトレースする時に
必要です。また、OLE RPCのデバッグにも必要です。
だそうな。(システムシンボルセットアップの説明より)

たぶん、デバイスドライバを作ったりする以外では必要になることは殆どないと思いますが
NT系のOSで「デバッグ情報は見つかりませんでした」と出てくるのが気になってしょうがない
人は入れとけばいいんじゃないかと。
(かなり大きい&SPのバージョンにあわせてMSからとってこないといけないので)
95系列の人は素直に黙殺しましょう。

今回は自作のソースのデバッグなのでシステムDLLのデバッグ情報は無くても
大丈夫です。

ブレークポイントが置けるところは382さんの説明を読んでチェックしましょう。

あと、
・アクティブな構成がwin32 debugになっているか
・リンクのオプションでデバッグ情報を生成するにチェックが入っているか
も一応確認してみてね。

384 :デフォルトの名無しさん:01/10/25 07:33
だれかvisualC++のヘルプファイルください!おねがいします!

385 :デフォルトの名無しさん:01/10/25 07:52
>>384
犯罪を教唆したかどで (以下略)

386 :デフォルトの名無しさん:01/10/25 08:45
>>384
http://www.microsoft.com/japan/developer/library/default.asp
ほい。

387 :名無しさん:01/10/25 13:34
VCでソースウィンドウをフルスクリーンでいくつか開いてる時に
次々ソースを切り替えるショートカットを教えてください。
説明が下手でスマソ。

388 :デフォルトの名無しさん:01/10/25 13:43
>>387
なぜヘルプを読みませんか?
面倒なので教えてやるが正解はCTRL+F6。
つーか、MDIの基本ショートカット。

389 :387:01/10/25 14:15
>>388
ヘルプのどこを読んだらいいかわからなくて。
ありがとですm(__)m

390 : :01/10/25 20:41
マウスでドラッグしながら範囲指定した複数行の先頭に
"//"というコメントアウトを挿入してくれるアドインはありますか?

391 : :01/10/25 20:46
/**/
で囲むマクロならサンプルに入ってるけど…。
//じゃなきゃイヤなの?

392 :デフォルトの名無しさん:01/10/25 20:50
>>387
CTRL+TAB。
普通のウインドウズでALT+xでできることは、
MDIでも大体CTRL+xで行えるようになってる。

393 :デフォルトの名無しさん :01/10/25 20:51
>>391
俺390じゃないけどマクロを使えばいいんだね、Thx!
VCプログラミングでマクロを使うって発想が無かったよ

394 :384:01/10/26 00:17
どうも。>>386
Virtual-Key Codesの表を参照したいのですが、無かった。
だれか書いてください・・お願いします。

395 :デフォルトの名無しさん:01/10/26 00:45
>>394
WINUSER.Hではどうか。

396 :デフォルトの名無しさん:01/10/26 00:53
>>394
MSDNに載ってるはず。オンラインの方はどうだか知らんが。
オフラインのを持ってないとは言わせない。

397 :デフォルトの名無しさん:01/10/26 01:02
選択範囲で置換したいのですが、
「選択範囲」チェックボックスが無効になっていて
「ファイル全体」しか選択できません。
いちおう、選択してから、Alt+Shift+7を選択しているのですが・・・。

vc++6 sp5

398 :競れ損 ◆hPlq..gg :01/10/26 01:08
>>397
置換はCtrl+Hですよ。
Alt+Shift+7って私の環境だとなんも起こらないのですが何なんでしょう。

399 :デフォルトの名無しさん:01/10/26 01:48
Ctrl+HがBSではないエディタは嫌いだ。
Ctrl+MがEnterではないエディタも嫌いだ。

400 :ドキュソグラマ:01/10/26 03:05
VC++7のコンパイルしたあとのコードなんかおかしい。
レイトレースの簡単なやつでBC5.0とVC++5.0では結果が同じだが
VC++7は浮動小数演算のどこかがおかしい。

401 :384:01/10/26 03:25
申し訳ないですがVC++本体持ってません。
フリーソフトの設定ファイルに
Virtual-Key Codesを参照してください。とあったのですが
それでとても困ってます。だれかください・・・

402 :デフォルトの名無しさん:01/10/26 04:00
このメッセージはどうしたら解読できるのでしょうか。

*** のページ違反です。
モジュール : ***.***、アドレス : 015f:004011b1
Registers:
EAX=00000020 CS=015f EIP=004011b1 EFLGS=00010202
〜(略)〜
Bytes at CS:EIP:
f3 a5 8b c8 〜(略)〜
Stack dump:
00000da0 00666644 〜(略)〜

アドレスはエラーの起きたアドレス、Registers は直前にレジスタに
入っていた値というのはわかるのですが、Bytes at **:** や、
Stack dump: が何を示しているのかわかりません

403 :デフォルトの名無しさん :01/10/26 04:36
>>401
VK_UP VK_DOWN VK_SHIFT・・・こんな感じ。
0〜9とA〜Zはアスキーコードのまま。
たしかJAVAのリファレンスにも書いてあるぞ。

404 :384:01/10/26 05:02
>>403
わかりました。ありがとうございました。

405 :デフォルトの名無しさん:01/10/26 06:07
>402
Bytes at CS:EIP:
は実際に例外を起こした命令部分のダンプ(CS:EIPは実行アドレスを保持してる)
f3 a5は「rep movsd」で
8b c8はえ〜と…「mov ecx,eax」だな
あとはプログラムのソースと照らし合わせて例外を起こした該当箇所を断定してやればいい
この場合rep movsdでエラーだから
恐らくmemcpy辺りで転送長をバッファの容量よりも多く取りすぎたとか
ポインターを初期化し忘れたとかがエラー原因
典型的なmemcpyのインライン展開コードだしね
略った所は83 e1 03 f3 a4辺りか?(and ecx,3;rep movsb)
まぁ判る人ならココまで状況を詳しく判らせてくれる便利な情報だ

ちなみにプロジェクトの設定でC/C++タブのカテゴリ>ファイルリスティングにある
リスティングファイルタイプを「マシン語コードとソースを含む」に設定しておけば
ある程度は自力でバイナリからニモニックを読まなくてすむぞ
objのあるフォルダにcodってファイルができるからそれから箇所を断定してけ

Stack dump:は例外発生時のスタック(SS:ESP)の内容
押し込んである内容から更に絞り込んで例外発生時の状況や
関数の位置を断定できたりできなくはないが
CS:EPIよりもさらに上級者向けの情報なので402君は無視してイイぞ

406 :デフォルトの名無しさん:01/10/26 06:48
VC++というよりC/C++言語の問題ですが
予約語をカラー表示するエディタを作ってるんですが
C/C++の予約語って何がありますか?
MSDNで予約語を調べたところ載ってませんでした。
Javaやリンカの予約語は載ってたんですが。
(ちなみにJavaの予約語のカラー表示は完成済みです。)
C/C++の予約語一覧ってどこかで調べられませんか?
できれば意味付きで調べたいです。
(カラーの割り振りに影響するため)
知っている人教えてください。
「本を買え」ってのは無しでお願いします。

それと前から気になっていたんですがダイアログリソースでボタンを「標準のボタン」にした場合Enterキーを押すとそのボタンが押されたようになるんですよね?
OKボタンが標準の時は問題無いんですがOKボタンを削除して自分で追加したボタンを「標準のボタン」にするとうまくいかない場合があります。
見た目では強調枠で表示されて同じなんですが肝心のメッセージが送られてきません。
リソースで設定する以外にも何かやらなければいけない事ってあるんですか?

407 :デフォルトの名無しさん:01/10/26 07:30
貴様のダイアログには標準ボタンがいったいいくつあるんだ、ん?

408 :デフォルトの名無しさん:01/10/26 10:21
>>405
先生!
上級者になるためには何読んだらいいんですか?

409 :402:01/10/26 10:44
>405
確かに略した所は正にあなたのおっしゃる通りでした。ドンピシャです。
すごすぎーです・・。
http://www.intel.co.jp/jp/developer/design/pentiumiii/manuals/
アセンブリのことはよく知らないのですが、ここでも参考にして
ぼちぼちかじって行きたいです。
ネットに講座が点在してるらしい MASM も DL してます。

>リスティングファイルタイプを「マシン語コードとソースを含む」に設定しておけば

こんな便利な機能があったんですね。
今までわざわざ XDAWIN で、できたバイナリを逆アセンブルしたり、
VC++ のデバグモードでニーモニックを追ったりしてました(^^;
貴重な事を教えていただき、どうもありがとうございました。

410 :デフォルトの名無しさん :01/10/26 11:53
>>406
標準のボタンというのはラジオボタンに対して普通のボタンという意味。
Enterでメッセ−ジを受け取るのはフォーカスを持っているボタン。
TABキーを押していくとボタンに点線で出来た枠が表示されるだろ?
そのときにEnter(またはスペース)を押せばそのボタンにメッセージが送られるよん。

ってこんなのVC++じゃなくてWindowsの使い方じゃん(w

C/C++の予約語一覧はそれで検索して。

411 :410:01/10/26 12:24
追加。
「EnterキーでOKボタンが押されてダイアログが閉じる」ようにしたいなら
自分で追加したボタンのメッセージハンドラに OnOK(); を書くべし。

412 :405:01/10/26 13:40
>408
さぁ?なに読んだかなぁ……もう覚えてないや
とにかく本屋に売ってる本、片っ端から全部読めば?多少はマシになると思うよ
出力されたcodを読むのもVCの癖をつかむのにイイかな
少なくとも俺はWinプログラム始める前にx86asmは普通に読み書きできたしねぇ…

413 :A:01/10/26 13:47
Visual C++ Professional で
コンパイルしたあとのアゼンブラの
コードを見る方法教えてください

414 :デフォルトの名無しさん:01/10/26 13:58
>>413
ん?つい最近見たよね?と思ったら>>405に書いてあるじゃん!

415 :A:01/10/26 14:29
リスティングファイルタイプって?

416 :デフォルトの名無しさん:01/10/26 14:32
>>413
対応する C のコードがわかってるなら、そこにブレークポイントを設定してデバッガで実行 (F5)、
ブレークポイントでとまったらデバッグ用のツールバーから [混合モード] を選択、というのもアリ。

417 :デフォルトの名無しさん:01/10/26 16:49
 VC++6.0で、SDKでアプリケーションを作っています。
 ソースファイルが増えてきたので、フォルダ分けしてすっきりさせたのですが、
Debugビルドで以下のようなエラーメッセージが出るようになってしまいました。

e:\test\debug\AAA\vc60.pdb は、このプリコンパイル済みヘッダーが作成されたときに
使用された pdb ファイルではありません。プリコンパイル済みヘッダーを再作成してください。

 ソースファイルの配置はこんな感じです。

e:\test\stdafx.h
e:\test\stdafx.cpp ->e:\test\debugに中間ファイルを出力
e:\test\AAA\src.cpp ->e:\test\debug\AAAに中間ファイルを出力
e:\test\BBB\src.cpp ->e:\test\debug\BBBに中間ファイルを出力
(もちろんほかにもソースはありますが、関係ありそうなファイルの
位置関係だけを示しています)

 どうもvc60.pdbを各フォルダに作ってしまうからおきてしまうエラーのようです。
Releaseビルドではvc60.pdbを生成しないから問題なくビルドできました。

1.ソースファイル名が一致するから、中間ファイルを出力するフォルダを別にしたい
2.プリコンパイルを有効にしたい
3.Debugビルドをエラーを出さずに行いたい

 以上の三つの条件を同時に満たすには、どうしたらいいのでしょう?
いまのところ、どれかひとつを犠牲にしないとビルドできないみたいなので、
困っています。

418 :デフォルトの名無しさん:01/10/26 17:04
>>417
プロジェクト→設定→出力ディレクトリ

好きなとこに変えれ。(「../Debug」とか)

419 :椎名:01/10/26 17:17
>>418
 いや、ですから出力ディレクトリを変えたら、

e:\test\debug\AAA\vc60.pdb は、このプリコンパイル済みヘッダーが作成されたときに
使用された pdb ファイルではありません。プリコンパイル済みヘッダーを再作成してください。

って出てきて困ってるんです。

420 :お胸おっぱい:01/10/26 17:43
プロジェクト→設定→リンク→カテゴリ:カスタマイズ→プログラム データベース名
で変えてもダメ?

421 :お胸おっぱい:01/10/26 17:44
リビルドしないとダメかも…

422 :406:01/10/26 17:54
「標準のボタン」を押したときにメッセージが送られてこないのは IsDialogMessage を呼んでないだけでした。
モードレスダイアログの基礎が分かっていないだけでした。
追加質問ですがモードレスダイアログが表示された状態でモーダルダイアログが表示された場合モードレスダイアログを無効に
モーダルダイアログが閉じたら有効にしたいんですがどうやるんですか?
現在は親ウィンドウの WM_ENABLE を使用して行っていますがこれでいいんですか?
違うやり方なら教えてください。

113 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)