1 :
いさましいチビの女 :
01/10/04 12:17
削除依頼出しときました。
3 :
デフォルトの名無しさん :01/10/04 18:24
きれいに減色するやり方教えてください。 自分で作ってみたんですが色の分布が広い画像ではイマイチです。 フルカラー画像から256色選択する部分と選択した色に残りの色を割り当てる 綺麗なアルゴリズム教えてください。 どこかに解説やソースが公開されていたりしませんか? お願いします。
解像度を100倍くらいにして、ディザ
>>3 色空間はRGBよりXYZ(やLa*b*)でやったほうが素直に仕上がるようだ。
起動時のタイトルバーの文字ってどこで変更するの?
10 :
デフォルトの名無しさん :01/10/04 23:36
SetWindowTextでお願いします。>>9
>>10 MFCが勝手に書き換えてるタイトルのこといってるんじゃないかな。
どっかオーバーライドすりゃいいんだけど、忘れた。
MFCのソースを読め
13 :
デフォルトの名無しさん :01/10/05 01:26
ねぇねぇ、c++(mfcも可)で、正規表現って、扱えるン?
14 :
デフォルトの名無しさん :01/10/05 02:47
正規表現って何?
まんこ
/ちんこ/
17 :
デフォルトの名無しさん :01/10/05 03:26
ちんこにぱーる。 $st="でんぐりがえし"; $st =~ s/で/ま/;
自分で作れば、ってことになると思うが
19 :
デフォルトの名無しさん :01/10/05 13:54
ある領域から、ある領域へメモリのコピーを行いたいのですが、 どのような方法が一番効率的でしょうか?
20 :
デフォルトの名無しさん :01/10/05 14:00
>>19 何も考えずに memmove を使うと良い。
256色選択する部分を改良したら格段に綺麗になりました。 次は誤差拡散ってのに挑戦してみます。
>>19 memmove
でも自分で書いたほうがちょっと速いかも・・・
>>20 >>22 ありがとうございます。
memmoveのソースを読んでみたいのですが、
どうすればよいでしょうか?
マシン語のコードを出力してみたのですが、
memmoveについては出てこない・・・。
LDIR(ふるっ
25 :
デフォルトの名無しさん :01/10/05 14:48
>>19 速くなるのは、コピー元とコピー先の領域が重複する場合を
前提としないとき。標準の memmove は、そのままで速く動く
ように十分調節されているはず。
>>23 >マシン語のコードを出力してみたのですが、
外部関数は吐かない。
>memmoveのソースを読んでみたいのですが、
コンパイラのライブラリのソースを探すのは時間がかかる。
十分に経験があれば、君の考える方法で間違いないと思う。
変数の数を減らして、なるべくポインタを使って、
registerキーワードも付けておく。
> ある領域から、ある領域へメモリのコピーを行いたいのですが、 ^^^^^^^ ...なぜmemmove? memcpyだと思うのだが。
27 :
デフォルトの名無しさん :01/10/05 16:57
>>26 場合によりけり
領域が重なってる可能性がある場合はmemmove
VCにSTLPortをインストールしたんですが、 CRT.NCBの情報を更新する方法がわからないので、 IntelliSenseが正常に働きません。 どうにか更新する方法ないでしょうか?
29 :
デフォルトの名無しさん :01/10/05 19:50
age
素直に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がないのでお手上げです。 どなたかコンパイルの仕方教えてください。
あるディレクトリ下のファイルをすべてバッファに 取り込みたい場合に使うコマンドって何でしょう? DQSは自覚しております。
>>32 ソースコード一式を出せるなら、それを出したほうが早いと思うが。
一般的には Makefile があるなら nmake を使う。無い場合には cl 使って
コンパイル。
>>33 意味がわからん。
1.ディレクトリ以下のファイル情報(ファイル名、サイズ、属性、etc...)を全てチェックしたい
2.ディレクトリ以下のファイルデータ(バイナリ)を全てメモリ上にロードしたい
まあ、どちらにしろ、FindFirstFile() FindNextFile()をMSDNで引きなさい。
>>32 「Visual C++ でコンパイルする」というのと、
「*.dsw(ワークスペース) や *.dsp(プロジェクト) のファイルがある」というのは、
全く別のことです。(話の次元が違います)
ワークスペースやプロジェクトといったファイルが使われるのは、
Visual C++ に付属の「(いわゆる)統合開発環境」でビルドするときに限った話です。
俺の質問に答えろよ!!!!!
さーて荒らすか
40 :
デフォルトの名無しさん :01/10/06 16:58
>>32 コンパイル?
君のやりたいことはビルドじゃないのか?
どっちにしてもVCのメニューからビルドを選べ。
あと、ソースコードにdswだのmdpだの書き込まれてるわけじゃないぞ。
それらはビルドするときに勝手に作られる。
2chに来て吼えてる暇があったら自分で調べたらどうか。 ここでマジレスに見せかけたネタ回答をつかまされたらどうやって真贋を 確かめるつもりだ?
>>43 そんなの、実際にやって反映されてるか見れば経たかどうかは一目瞭然だろ。
御託はいいから、早く教えろよ。
経た > ネタ
>>28 >VCにSTLPortをインストールしたんですが、
↑
この時点で意味不明。VCってVisualC++のことじゃねーの?
開発環境に対してインストールしたってどういう意味だよ?
>>46 どういう意味だかわかってるだろ?
VCで使うためにインストールした。
揚足とってる暇があるなら、教えろよ。
この板で「教えろ」と吼えてマジレスをもらった事例はない。 ネタにされる前に頭を下げたらどうだ?(w
>>47 だから、揚足取られるような奴質問ってのは意味がわからんっていってんだよ。
>>28 だけ読んだら
CRT.NCBを更新したい?ハァ?何それ?
手動で更新すればぁ? で終わり。
もっと君の遭遇している問題を明確にしなさいって事。
51 :
デフォルトの名無しさん :01/10/06 20:28
今度仕事でVC++6.0(MFC)を使わなきゃならないんですが、 お勧めの入門書ってあります? 今まではVBとMS−Cの仕事ばかりだったんで難易度が高く理解できません。 俺も厨房PGだったのか・・・
>>48 いまさら頭下げてもかわんねーだろ
>>49 手動で更新すればぁ? で終わり。
だから、そのやり方を聞いてるんだよ。
お前、CRT.NCBが何かわかってねーだろ?
>>51 MSDNに付いてるScribleチュートリアル。
>>52 知るわけねーだろ、お前ヴァカ?
俺が煽りかどーかもわかんねぇの?
2chで質問するやつってまともな回答来るとマジで信じてるんだろか? 玉石混淆の中から苦労して玉だけ探し当てるよりは確実に玉だけ教えてくれるとこ 行ったほうがいいとおもわれ。
>>54 煽りだろうが、なんだろうが関係ねーんだよ。
俺はCRT.NCBの更新の仕方が分かればいいだけ。
あんたが知ってるかもしれないから反応したんだよ。
57 :
デフォルトの名無しさん :01/10/06 21:35
> コンパイラの警告 (レベル 1) C4786 > 'identifier' : デバッグ情報で識別子が 'number' 文字に切り捨てられました。 > 識別子の文字列の長さが制限値を超えたので、切り捨てられました。 長い識別子など、どこにも使ってないのに、こんな警告がぞろぞろ出てしまいます。 我ながらしょうもない質問だと思いますが、万が一ヘルプに載っていること 以外でなにか原因をご存知の方、いらっしゃいましたら助言下さいませ。
>>57 STLのmapとか使ってない?
#pragma warning(disable,4786)
を適当なところに書くと、警告でなくなるよ。
>>56 だから、ハァ、何それ?って最初にいってるじゃんよ。
洞察力が足りないよ、チミィ。
そんなんじゃこの先何回でも壁にぶち当たるよ?
そのたびにココにきて荒れるのかい? ┐('〜`;)┌
>>58 ありがとうございます、まさにその通りでした。
そして自分の情けなさに赤面です…。
>56 一度ncbファイルを消すと自動的に再生成サレルヨ イヤホント、マジデマジデ
>>62 それはプロジェクトのncbだけ。
とうぜんCRT.NCBとか別ディレクトリに移動したけど、
反映されなかったしね。
つーことで、引き続き募集中
俺の質問に答えろ
>>63 だからぁ、IntelliSenseってあれだろ。
クラスオブジェクト名の後に「.」をつけるとメンバがポップアップで出る機能だろ?
STLPortって用はライブラリだろ?
ttp://www.stlport.org/にあるやつだよな ?
自前のライブラリでもヘッダをincludeすればIntelliSenseは機能するのに
なんでCRT.NCBを更新する必要がある?いちいちincludeするのが面倒なら
手動でwindows.hでにでもincludeしておけばぁ?
用は要な。変換ミスは多めに見ろよ。
つーか、IntelliSenseでincludeもしてねぇ識別子まで補完するのは 邪魔以外の何者でもないと思うんだが。意味ねぇし。
>>66 禿げ同。
28が何を考えてるのかサパーリわからん。
68 :
デフォルトの名無しさん :01/10/06 23:42
MFC。 CListBoxにAddString()で項目を追加するとき、文字色を設定するには? listboxからCDCをgetしてSetTextColorしてみたものの変わらず。 簡単な方法があったらおせ〜て!!
69 :
デフォルトの名無しさん :01/10/06 23:46
71 :
デフォルトの名無しさん :01/10/06 23:48
できるだけ自分で作りたくないからMFCを使うんだろ〜が。
>>64 >>66 分かってないね。
#includeしようがしまいが、crt.ncbがある限りVC標準のSTLの候補が表示されて、
STLPortのが表示されるわけじゃない。crt.ncbを消してもSTLPortの候補は表示されない。
プロジェクトの外部依存以外の部分以外に追加すれば表示されるけど、
STLのヘッダなんていちいち追加したくない。
だから、crt.ncbを更新するのが一番いい判断だと思うんだが。
>>72 ああやっと君の言いたい事がわかったような気がするよ・・・
名前空間ぐらい知ってるよな? それでもだめなら
Program Files\Microsoft Visual Studio\VC98\CRT\SRC
の中身を置き換えちまえ。VC標準のSTLはいらないんだろ?
どっちにしろIntelliSenseに頼るようなやつがSTLPort? (プ だけどな
>>72 >プロジェクトの外部依存以外の部分以外に追加すれば表示されるけど、
>STLのヘッダなんていちいち追加したくない。
だからwindows.hにでもincludeしとけっていってるだろ、ヴァカ。
お前レベル低すぎるわ。ネタとしても。
>>74 あんた、多分分かってない。
VC98/CRT/SRCを置き換えようが解決されない。
>STLPort? (プ だけどな
VCのSTLにバグがあるんだからしょうがないだろ
>>75 だからぁ、windows.hにincludeしても解決しないんだって。
データベース(crt.ncb)に登録されてる候補が最優先で表示されるから。
std::
って入力しても、VC標準のSTLの候補が出てくるわけ。
ちなみに、crt.ncb削除すると、普通のCランタイムの候補が表示されなくなる。
>>72 *.ncbを編集するツールは俺の知る限りない。
つーことで、crt.ncbをつくれ。
まず、空のプロジェクトを作ってその中にstl-port、Cヘッダのすぺての
関連するファイルを「プロジェクトに追加」する。できたncbをcrt.ncbと
置き換える。出来るかどうか知らんけど。
ちなみに#includeしただけだと、コード補完は動かんぞ。
79 :
デフォルトの名無しさん :01/10/07 00:24
VC++ Ver6.0を使ってます。
メールを送信するクラスライブラリ等を探しています。
イメージしているのは下記の雰囲気のものです。
CMail Mail;
Mail.SMTP = "smtp.aaa.co.jp";
Mail.Subject = "○○の件";
Mail.To = "
[email protected] ";
Mail.From = "
[email protected] ";
Mail.File = "添付.txt";
Mail.Message = "いつもお世話になります。\nさようなら。";
Mail.Send();
・MFCを使っていてもかまわない。
・出来ればソースがあると有り難い。(今後勉強のため)
上記のようなものがどこかにないでしょうか?
MSDNライブラリ見てもよく分からないので・・
>>76 おまえも多分わかってない。
俺が言いたいのはVCのSTLのヘッダとライブラリを全部STLPortの奴に
入れ替えろって事。それで反映されないわけがないだろ。
お前のVCが存在しないライブラリを参照する特別製ならダメだけどな。
ああ、なんだか客観的にみると 「 28 = 49 = 自演厨房 」 に見えるな・・・
>>83 もしかして、VC使ったこと無い?
*.ncbはプロトタイプの情報全部記録されてるデータベースだから、
実際のヘッダがどうなっているかは関係なく、*.ncbに記録されてる情報しか表示されない。
#余談だけど、クラスウィザードがおかしくなるって言うのはコレが原因。
VCのIDEはヘッダの中身を走査してクラスウィザードやIntelliSenseに反映させるわけじゃないんで、
その方法じゃどうあがいても解決されない
86 :
デフォルトの七士さん :01/10/07 00:34
わからないことがあるんですけど、教えていただきたくて書いてます。 CSplitterWnd::DoScroll(CView* pViewFrom, 、) この第一引数の説明に pViewFrom スクロール メッセージが発生したビューへのポインタ。 という説明が書いてあるんですけど, ビュークラスへのポインタ?って事ですか? 誰か教えてください。お願いします。
>>83 28もウザイがお前もウザイ。
MSDEVのコード補完はヘッダを見てるわけではない。
自分のプロジェクトに入っているコードを元にIDEが作ったncbと
最初からあるmfcatl.ncb,crt.ncb,win32.ncbをデータベースとして
候補を表示してる。
>>85 だから煽りだっていってるだろ・・・
なんかわかってるっぽい人がレスしてるじゃん。その人に結果報告でもしたら?
いつまでも俺にかまってるとダメ人間になっちゃうよ?
49は明らかに「構ってクン」なんだから、放置しとけよ。 そのうちに飽きて消える。
>>87 べつに君にウザイって言われてもねぇ・・・
君
>>78 と同一人物でしょ?
自分がやったことの無い方法を提示して
知識をひけらかしてるだけの奴にウザイって言われてもねぇ・・・
煽りと対してかわらんよ? ま、28も最初荒れてた割には
真剣に困ってるわけじゃなさそうだし、俺はもう降りるよ。
□□□□□□□□ 大変失礼いたしました □□□□□□□□
91 :
デフォルトの名無しさん :01/10/07 00:46
86かわいそうにな。 こんなときに質問なんて,,,,,
>>86 "CView* pViewFrom"ってあるのだが・・・
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でスクロールバー
を取得していろいろやってみるとか。
94さん。ありがとう。 なんとかやってみます。
96 :
デフォルトの名無しさん :01/10/07 22:46
sqrtfって何?
>>96 sqrt() の float 版じゃないの?
分割ウィンドに個別のスクロールバーってつけれるんですか?
>>78 おい、空のプロジェクト作ってSTLPortのヘッダを全部プロジェクトに追加したなら、
それを雛型としてCustomAppWizardで登録すればいいじゃねーかよ!
ちゃんと教えてやれよ、ケチ!
う〜ん、フォローが付きませんね。 ( >80 ) クラスの格好してなくてもいいです。 クラス化ぐらいはやりますので。 80で挙げたプロパティー程度を入れるとメール送信してくれればそれでいいです。 やっぱそんなのないのかな?
>>100 nMail.dll とかは?
別ファイルになっちゃうけど。
103 :
デフォルトの名無しさん :01/10/09 21:54
VC6の自分のプロジェクト内で、他の人の作ったプロジェクトの中の クラス(一つだけ)を使いたいのですが、プロジェクトの追加やDependancyの設定 をしても、link時にリンク不能のエラーが出てきます。これは、必要な .objファイルを一つ一つ丹念にリストアップすることしか解決法が ないということでしょうか。
>>100 RogueWaveのライブラリに、smtp agent classとかあるんじゃない?
popはあるみたいだけど。
>101-102 ソースがあればもっと嬉しかったですけど、これで目的は達成できそうです。 これだけ太っ腹なメーカーさんがnMail.dllの権利は放棄しないみたいなこと を書いるので、おそらくそう簡単なものではないのでしょうね。(意味通じるかな?) 俺程度の素人には、このDllみたいなものを自作するのは荷が重いのかもし れませんが、ぼちぼち勉強していきます。 いずれにしろ当面はこれで十分です。ありがとうございました。
>104 こちらも紹介ありがとうございます。 ただ、こちらのサイトを見るに個人で勉強がてらぱっと作るという用途ではなさそう ですね。 本格的な製品開発向け、といったところでしょうか。 俺は前者なのでこちらのサイトは少し合いませんでした。 >80 にそのあたりの事情説明が不足していたため、お手数おかけしてしまったよう です。申し訳ありません。
107 :
デフォルトの名無しさん :01/10/09 23:16
>>103 ちょっと意味がわからないんだが。
他人の作ったクラスを使うならヘッダファイルとライブラリファイル(またはソースファイル)を
もらえばいいんじゃないの?
108 :
デフォルトの名無しさん :01/10/09 23:26
103です。その使いたいクラスがまた他にいろいろクラスを使っていて、 そのクラスのヘッダだけをもらうだけではlink不能になるんですが、なにか 簡単に全部のヘッダファイルをプロジェクトごとインクルードすることは できないものでしょうか…
110 :
デフォルトの名無しさん :01/10/09 23:46
「ドキュメント」から「ビューの状態」を遷移させたいんだけど、 どうやってやってますか? やっぱりポインタひっぱってくるの? ちょっとオブジェクト指向的に逝きたいんだけど、 参考になるもんございませんか?
111 :
デフォルトの名無しさん :01/10/09 23:46
>>108 念のため確認するけどヘッダだけじゃクラスのメンバの宣言しかないから
定義部分(つまりソースファイル .cpp か ライブラリ .lib)がなきゃ
コンパイルできないよ。ヘッダファイルに定義まで書いてあるなら別だけど。
(それってC++で可だったっけ・・・?)
そんなことは分かってるとしてその状況ならむしろそのプロジェクトに
自分のファイルを追加したほうが早いんじゃない?
>>110 doc-viewはOOでもなんでもないからなあ。
あきらめてviewを拾ってくるか、
もっとましなフレームワークは選択できない?
114 :
デフォルトの名無しさん :01/10/10 00:18
>>112 「ましな」ってどういうのあるんですか?
>>115 こいつは聞きかじりだけで書いてて、wtlがどういうものか詳細は知らない
WTLが出たので聞きたいのだが、WTLの日本語の解説ってないの?
日本語見たことない べつにあのままでもわかるでしょ
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
125 :
デフォルトの名無しさん :01/10/10 10:16
ソースリスト等は、どういうタイミングでセーブされるんだろう 停電にあったけど、ソースが生きてたので
>>125 Ctrl+Sを押したとき
F5を押したとき
Ctrl+F5を押したとき
など
127 :
デフォルトの名無しさん :01/10/10 12:25
ボタンなどのコントロールを飛び越える線を書きたいんだけど、どうすればいい?
>>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
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を抜けた地点で、プロセスの終了が保証される。
で?
142 :
デフォルトの名無しさん :01/10/10 18:34
>>141 MSDNを見て考えましょう。
DWORD dwResult;
if (pi.hProcess) {
WaitForSingleObject( pi.hProcess, INFINITE );
GetExitCodeProcess( pi.hProcess, &dwResult );
}
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 );
// ここで状況に応じてあんな処理やこんな処理をしてみたりする
}
}
サンプルはある程度柔軟性を持ったソースである方が正しいような気がする。
まあ何があっても自然な形で終わらせられるのが一番スマートなんだろうけど
他のプロセスをいぢる以上相手が何やってるかわからん場合もあるだろうし。
if (pi.hProcess) { DWORD dwExitCode = STILL_ACTIVE; while (dwExitCode == STILL_ACTIVE) { WaitForSingleObject( pi.hProcess, 1000 ); GetExitCodeProcess( pi.hProcess, &dwExitCode ); // ここで状況に応じてあんな処理やこんな処理をしてみたりする } // ここで状況に応じてあんな処理やこんな処理をしてみたりする }
>>146 STILL_ACTIVEでの判定は正しくないよ。
プロセスが終了コードとしてSTILL_ACTIVEと同値を返した場合は
判定をミスする
148 :
デフォルトの名無しさん :01/10/10 20:18
>>145 >なんでもかんでもINFINITEにしたら不測の事態や特殊な処理に対応できないのでわ?
一理有り。しかし、while と STILL_ACTIVE は不要。
不測の事態用のイベントオブジェクトも作って WaitForMultipleObjectしとけ。 CloseHandleきちんとやっとけ。
うーん
ぢつはCreateProcessとか他のプロセスを使うモノは
あんまり書いた事が無いんでなんとも言えないんですが。
先に
>>148 について
>一理有り。しかし、while と STILL_ACTIVE は不要。
親的には本来終わっているはずの子プロセスが
内部で勝手に無限ループなどをかまして
終了しない場合を考えてみると
INFINITEを指定すると子プロセスに引きずられて親も永遠に終了しなくなってしまう。
WaitForSingleObjectのタイムアウト値とwhileのループで
定期的に状態を調べる事によってそれを防げる。
whileにカウントを付けといて子プロセスが
(本来終了しているはずの状態で)数回ループした場合子プロセスは
不正な状況に陥ったと判断してTerminateProcessで強制的に終了する。
TerminateProcessもかなり危険であるが、親も一緒に死亡するよりはまし。
Ctrl+Alt+Delのタスクマネージャを自分でやるかんぢといえば分かりやすいかな?
>>147 >プロセスが終了コードとしてSTILL_ACTIVEと同値を返した場合は
>判定をミスする
それはそのプロセスがあほ過ぎるので仕方が無いかと(^^;
まあサンプルだしその辺はてきとーに対処してくださいソースなんだろうと。
> それはそのプロセスがあほ過ぎるので仕方が無いかと(^^; あほすぎるって、終了コードに対するガイドラインってあったっけ?
とりあえず今MSDNをてきとーに見た感じでは 少なくともGetExitCodeProcessの説明で 「指定したプロセスが終了していないときは、STILL_ACTIVE が格納されます。」 と書いてあるんだから、STILL_ACTIVEを返さないのが普通では? この値ってSCODEじゃないのかと。
153 :
beginer :01/10/10 22:15
for(;;){ここ} ここで宣言した変数は、forを抜けても生き続けますか?
no
ははぁ!わっかりましたー!
156 :
デフォルトの名無しさん :01/10/10 23:31
質問です。 ifstreamを使うだけで、デバッグ終了時に 「メモリリークじゃボケ」って出るんですけどなんででしょうか?
157 :
デフォルトの名無しさん :01/10/10 23:33
158 :
名無しさん :01/10/10 23:33
どう使ってるのか書けやゴルァ
159 :
デフォルトの名無しさん :01/10/11 00:28
BoundsCheckerで 「リソースリークされた場所、GlobalAddAtomA(wincore.cpp)」 とかって出るんですけど、これってどういうことでリークしてるの?
GlobalAddAtom
162 :
デフォルトの名無しさん :01/10/11 00:46
嘘訳。 いわなかったっけ?リークじゃないけど、(ツールは)リークだって報告するね。 アイコンみたいに、プログラムが死ぬまで持たなきゃいかんリソースを確保してるんだ。 同じように、いろんなメモリやファイルのマッピングも、プログラムが死ぬまで 確保しておくんだよ。 だれか修正して。
>>164 に一票。
スコープ外で生きてたらたまらんわ。
166 :
デフォルトの名無しさん :01/10/11 10:04
ただ、
>>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 の返り値を調べてみましょう。
ツールバーのボタンはツールバーの子どもです。
>>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 を呼ぶな。
>>172 非矩形ウィンドウを作って最前面に持ってくる。
175 :
デフォルトの名無しさん :01/10/11 11:20
176 :
デフォルトの名無しさん :01/10/11 11:46
IPアドレスを示すテキストデータ (例: '192.168.1.1' ) が正しいものかどうか (変な英文字が入ってたり、255を超える数字が含まれていたり・・・ 等) を判断する簡単な方法(API等)はありますか? それとも、自分で一つ一つ 数字三桁で255以内で、次が'.'で、・・・と確認処理作るしかないのでしょうか 変なデータをsocket関数に渡すと、errorが返るかと思えば、 暴走しちゃうんですよね それで、チェックが必要になりました
>>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標準のヘッダやライブラリのパス)以外に 自分のライブラリ用のフォルダも参照されるようにしたいです。 レジストリをいじるんですか? それとも自作ライブラリを標準パスにコピーするべきですか?
-I -L
181 :
デフォルトの玉無しさん :01/10/11 23:19
すいません。質問させていただきます。 AbcCreateという関数をエクスポートする必要があります。 VC++のextern "C" __dllexport HRESULT CALLBACK AbcCreate(void* 0); では、 _AbcCreate@4になってしまいます。 VC++で装飾やアンダーライン抜きのDLLを作るにはどうすればよろしいのでしょうか。 BCC32ではうまくいきました。
>>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!
以上だ。
>>124 試してみましたがうまくいきません。
最大化しているDocウィンドウに
SendMessage( hDoc, WM_SIZE, (WPARAM)SIZE_MAXIMIZED, (LPARAM)(x+y<<16) );
とやっても反応しません。
いったんもとのサイズに戻したあと最大化、とかやってみましたが、
ちらちらしてちょっといやな感じでした。
186 :
デフォルトの名無しさん :01/10/12 00:44
187 :
デフォルトの名無しさん :01/10/12 01:32
あっ、181=183です。182さんありがとうございました。
188 :
デフォルトの名無しさん :01/10/12 09:27
>>185 最大化しているものを最大化してどうする?
maximize の逆は restore。メッセージの受け方、知らないの?
ウィンドウのサイズが変わったら WM_SIZING を受ける。
メッセージを受けたら ShowWindow, SetWindowPos で操作する。
>>153 >>157 の言っている事の方が正しい。
157を嘘と言っている奴は、宣言と定義の区別がついていないと思われ。
文章の感じから、
>>153 もその一人みたいだが。
>>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の範疇では「スコープを外れた自動変数が持っていたデータに関して
は、スコープを外れた瞬間に保証できなくなる(そもそもアクセスする手段を提供してない)」
以上のことは言えない。
>189 ...もしかして、for ( int i ; ; ){}と間違ってないか?
>191 あぁ、そうか宣言か。定義と読み間違えてた。悪い。 確かに宣言だけなら実体はつくられないから、「生きてるかどうか」なんてのを考えるのはナンセンスだな。 この辺りがわからなければCの入門書を読み直せばわかるだろう。 だがforブロック内で変数”宣言”なんてのはスパゲティの素だと思うから止めた方が良いと思うけどね
>>190 同類。変数の宣言とその寿命は別物。
宣言が必ずしも定義とは限らない。
オレも読み違えてた。 でも、じゃぁこの質問単なる引っ掛けか? 普通forブロックで宣言なんてしないよな。
197 :
デフォルトの名無しさん :01/10/12 15:59
なるほどなー やっぱ2chはタメになるゼ! かーさん!新しいパソコン買って!!
たまに、システムのincludeファイル(windows.hとか)の中身を見たい時があって、 エディタで開いたりするけど、 これらのファイルって、READ ONLYじゃないんだね で、見てる時にキー操作のミスで知らないうちに 一文字くらい変なところにアルファベットとか打っちゃって、 そのまま間違ってセーブしたりして、 それでエラーでたら、解決に相当悩む気がする さっき、知らずに変な文字打っちゃってて、 気が付いたから良かったんだけど・・・
>>198 間違ってたらデバッグしてねって事なんだよ。
>>193-196 いや、やるだろ。
「変数はそれが使用される場所で宣言されるべきである。」
201 :
デフォルトの名無しさん :01/10/12 17:47
202 :
デフォルトの名無しさん :01/10/13 00:15
あくまで趣味プログラミングに括った場合での質問です。 自分は普段MFCを使わずにプログラミングをしているのですが、 MFCでプログラミングしている友人から、 「MFCを使わないのって、どこがいいの?」 という質問が飛んできました。 とりあえず自分は、軽い・実行モジュールサイズが小さい・フレームワークの 段階から自由に設計できる、という利点を挙げたのですが、 どうにも納得がいかないようなのです。 自分も、MFCを使うことの利点はわかっていますが、 彼にもSDKプログラミングの楽しさを知ってもらいたいなーというのもあります。 彼を納得させられるような、両者の違いというのをご教授願いたいです。
203 :
デフォルトの名無しさん :01/10/13 01:12
MFCは多機能、フレームワークを作らなくても良いから書き始めるまでが早い、 クラスウィザードの全面的支援が得られる・・・ ごめん、俺やっぱSDKよりMFCの方が好きだわ(w
>とりあえず自分は、軽い・実行モジュールサイズが小さい・フレームワークの >段階から自由に設計できる、という利点を挙げたのですが、 ていうか、この程度の瑣末なメリットを捨て去って余りある利点がMFCにはある。
206 :
デフォルトの名無しさん :01/10/13 03:43
現在スクロールバーを自作しています。 標準のスクロールバーは16ビットまでしか扱えないため32ビットの範囲を扱えるものを作っています。 通常のスクロールバーと同じ動きにしたいんですがタイミングなどが分からないので教えてください。 1.スクロールバーの矢印のボタンを押すとスクロールしますが 押しっぱなしにするとすこし間隔があいてから自動で連続スクロールが開始されます。 この時の間隔の取得方法 2.連続スクロールが始まってからの間隔の取得方法 3.スライド部分をドラッグしてスクロール出来ますが ドラッグした状態で20ドットほどスクロールバーから離れると解除されます。 また近づけるとドラッグが有効になります。 この境界部分のピクセル数の取得方法 これらはAPIで取得できるのしょうか? 教えてくれた人には「娘。ポッキー?当たるの〜?」です。
>>188 指南ありがとう。希望の動作ができました。
MDIClientのWM_SIZEでDOCウィンドウに対して
SetWindowPosをやって解決…
これで安心して逝けます。再びありがとう
>標準のスクロールバーは16ビットまでしか扱えないため NTでもそうなんだっけ?
>>206 32bitを扱えるぞ。16bitなのはWM_H/VSCROLLのWPARAMだけ。
>>206 全部APIで取得できるよ。
おれも前に作ったよ(ゲームのセッティング画面用だけれど)
スンマセン!ジツハ,シツモンジタイ マチガエテマシタ! 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; }
>>211 minは外側のfor (int i = 0; i < n - 1; ++i)のループの繰り返しのたびに、
新たに作られる。これは外側のforループのブロックの先頭でminを*定義*して
おり、そのブロックの終わりまでがminのスコープとなるため。
# あと、どうでもいいけどbeginnerな。(w
ワロタ
>>212 ワッカリマシター!アリガトウゴザイマシター!
宣言ではなくて、定義だからですねん。
ヤヤコシイ(;∀;)
>>214 ちと書き方がまずかった。
誤解を招きそうなんで以下の通り訂正。
minは外側のfor (int i = 0; i < n - 1; ++i)のループの繰り返しのたびに、
新たに作られる。これは外側のforループのブロックの先頭でminを*定義*して
いるため。また、この例では定義=宣言でもあるため、そのブロックの終わり
までがminのスコープとなる。
>>194 でも書いたが、定義は宣言でもあるが宣言は必ずしも定義とは限らない。
宣言は、コンパイラに対して他の部分で定義された、あるいは今まさに定義さ
れようとしているシンボルの存在を教えるためのもので、強く型付けされた言
語では、これ無しにシンボルは利用できない。フォワード宣言や他の翻訳ユニッ
トで定義された大域変数のプロトタイプ宣言などは、どれもそのシンボルを現
在のスコープに導入するためのもの。そういう意味で、
>>200 の言っているこ
とは正しい。ただ、
>>201 が書いているように、多くの場合、
>>200 の言う宣言
はその定義も含む変数のこと。
通常、宣言といったら定義と区別してそう呼ぶことが多く、定義を含まないも
のを指すため、
>>189 のように書いた。
beginner(153)が迷いませんようにとの願いを込めて長レス。sage。
>>203-204 ご意見ありがとうございます。
どちらから入ったかによって、その逆が取っつきにくく感じられることって
ありますよね。自分も友人もそのような傾向にあるようです。
自分がSDKの道に入ったのは、「猫でも〜」のページとの出会いでした。
ていうか、このスレって、SDK派の人は少ないのでしょうか・・・。
>>215 宣言と定義の違いがいまいちわかりません。
struct A{
int a;
int b;
};
はどっちでしょうか?
int main (){
int a;
return 0;
}
は、どっちですか?
トイウカ、マトハズレナシツモン?(・□・;)
SBM_GETSCROLLINFO で32ビットのトラック位置(?)が取得できました。 WM_HSCROLL では16ビットなので16ビットまでしか扱えないと思ってました。 というわけで自作するのは辞めました。 パイパイキーン!!
>>217 そろそろ腰を据えてK&Rを読みなさい。
その方が君のためになる。
>>217 前者が定義、後者の int a; が宣言だと思う。
そもそも「変数の定義」なんて言い方は無いと思ったけど・・・。
変数は宣言するものであって定義するものじゃないんじゃないの?
>>220 君もそろそろ腰を据えてK&Rを読みなさい。
その方が君のためになる。
K&Rですか!! も、もうちょっと詳説C++プログラミングを 読み進めようと思います。。。 あと、C言語ポインタ完全制覇も。。。 前に、K&Rらしき本をチラリと見たのですが、 サパーリワカラナカッタノデ…。 まだ参照とかポインタとか理解が不十分なモノデ
223 :
デフォルトの名無しさん :01/10/14 09:41
>>222 じゃあ、他の本読むの無駄だと思いませんか?
まずはK&Rを完全理解するのを目指すのが一番いいと思います。
>>223 に激しく一票。
C++ だと、宣言と定義の境界があいまいになってくる部分があるように思う。
だからいきなり C++ じゃなくって、まず K&R が先。
225 :
デフォルトの名無しさん :01/10/14 15:30
IMEの有効無効の切り替えはどうやるんですか? 自作のエディタ(たいした機能はなし)を作ってます。 読み取り専用のものと編集可能なものの2種類です。 同じアプリの中で同時にある場合 読み取り専用にフォーカスがある場合IMEを無効にして 編集可能なものの場合有効にしたいです。 (エディットボックスの読み取り専用みたいな感じです。) 何ていうAPIを使ったらいいですか?
>>225 ImmSetConversionStatus
ていうかMSDN読め。
227 :
デフォルトの名無しさん :01/10/14 15:47
新たにクラスを作成するとデフォルトコンストラクタが 自動的に宣言、定義されるのですが、 これって残しておかないとまずいのでしょうか?
228 :
デフォルトの名無しさん :01/10/14 15:56
あなが必要でなければいりません。ヘッダとcppの両方のコンを消してください。
>>228 どもです。デストラクタが自動生成されるのはわかるような気がしますが、
なんでデフォルトコンストラクタが作られるんでしょうか?
コピーコンストラクタを自動生成してもあまり嬉しくないから。
>>230 どちらか(copy or default)生成しなければならない理由でもあるのですか?
両方とも生成されなくても良いと思うのですが。
232 :
デフォルトの名無しさん :01/10/14 19:59
デフォルトコンストラクタって、 どうせ書くことのほうが多いんだし、 雛型だけでも自動的に吐いてもらうと楽じゃん。 いらなきゃ10秒で削除できるし。
233 :
デフォルトの名無しさん :01/10/14 20:11
あとから派生クラスでオーバー炉ー℃したくなったときにはじめっから書いておけば楽ジャン
234 :
デフォルトの名無しさん :01/10/14 20:12
らい℃だったか。
236 :
デフォルトの名無しさん :01/10/14 20:18
>>232-235 レスをありがとうございます。
ただ、的が外れてまして、
>>229 > なんでデフォルトコンストラクタが作られるんでしょうか?
>>230 > コピーコンストラクタを自動生成してもあまり嬉しくないから。
>>231 > どちらか(copy or default)生成しなければならない理由でもあるのですか?
に対する回答がほしいのです。
>>236 結局いつか書くから
だろ。
書かないなら消しなさい。
>>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 参考になる本はいっぱい書いてあるだろ。
過去ログ読んでから書き込め。
っていうか自分で努力しろ。まずはそっから。
>>238 頭悪いなぁ。どうして
> なんでデフォルトコンストラクタが作られるんでしょうか?
に対する
> コピーコンストラクタを自動生成してもあまり嬉しくないから。
から
> どちらか(copy or default)生成しなければならない理由でもあるのですか?
になるのよ?
>230を逆に言えば、デフォルトコンストラクタを自動生成してくれると大半の人は嬉しいのよ。
いちいち書く手間が省けるからさ。
どうしてそこまで読みとれないのよ?
なんべんも
「どうせ書くなら自動生成してくれる方が楽」
「あんたがいらないなら消せ」
と言われてるでしょ? 頭悪すぎるよ?
さらに
> あなたはVisual C++を使ったことがありますか?
こんなくだらねぇ捨てぜりふ。救えないよ。マジで。
>>236 的が外れてるのはお前の方。
生成されると不都合があるのか?
以下マジレス。
AppWizard経由でクラスを新規作成し、自分でソースを一切いじらずに
ビルドすることができる。
>238 気にするなよ。なんでも疑問に思うことはいいことだ。
>>242 >>230 を逆に言えば、デフォルトコンストラクタを自動生成してくれると大半の人は嬉しいのよ。
>いちいち書く手間が省けるからさ。
そう言えよ。(藁
>>228 でスデに"ストレートに"そういっているし、
遠まわしにいわれてもわからん。
あ、で
>>242 |> なんでデフォルトコンストラクタが作られるんでしょうか?
|に対する
|> コピーコンストラクタを自動生成してもあまり嬉しくないから。
|から
|> どちらか(copy or default)生成しなければならない理由でもあるのですか?
|になるのよ?
デフォルトコンストラクタが作られなければ、
"かわりに"コピーコンストラクタが作られる、と読み取れたのです。
>>246 >"かわりに"コピーコンストラクタが作られる、と読み取れたのです。
そういう妄想はどっから湧くんだよ(w
「なんで朝食がパンなんですか?」 「米はあまりおいしくないから」 ってきたら、朝食がパンじゃなければご飯になりそうだと思いませんか?
その発想力はいずれ君がゲームかなにかを企画するときのためにとっときなさい。 ここでは役に立たないから。
すげーよこいつ。真説夢見館みたいなゲームはこういうやつから生まれてくるんだな。
> >いちいち書く手間が省けるからさ。 > そう言えよ。(藁 ”その程度”読みとれよ(藁 それともぼくちゃんのわかる言葉で、懇切丁寧に教えろと? 教えて君は例え素質があろうと嫌がられるよ? 言葉を曲解せずに素直に取れよ。日本語勉強すれ。
>>248 それで何を喩えようとしているのかサッパリわからん。
>>251 |> なんでデフォルトコンストラクタが作られるんでしょうか?
|> コピーコンストラクタを自動生成してもあまり嬉しくないから。
を
「なぜ右の道から?」
「左の道だと遠回りだから。」
のようにとらえていました。
だから、「大半の人には右の道行ったほう(=def.con.自動生成)が嬉しい」のですよね?
で、右の道行けなかったら、左の道から行くことになりますよね。
私は後者のように考えていたわけです。
まー、わかってもらえれば嬉しいですけれども、
わかってもらえないならわからないでも良いです。
質問に答えてくださってありがとうございました。
右と左しかないのか? 人に聞く前にまっすぐ突き進めよ。
くさっ!!!
>>254 そこで右と左しか道がないと思いこむのはお前の思考が不自由なだけ。
思い込みってのは怖いよ 間違った事を絶対正しいと思い込んでしまうと抜け出すのは難しい。 そういうときはちょっと下がって、上から下から斜めから眺めると 正しい道が見えてくる、とか言ってみる。
なんか人生相談みたいで(・∀・)カコイイ!!
260 :
デフォルトの名無しさん :01/10/16 00:16
こんばんは、日曜日に基本情報技術者試験を受験します。 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を再帰呼び出しするところでは、あえてその先の流れは追わずに 「なんか知らないがとにかく答えが返ってくる」と考えればいい。
説明ありがとうございます。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 が送られて来ないようになりますか?
>>264 速い方がいいってこともあるし、最近のWindowsでは
サポートされているという事情も有る。
267 :
デフォルトの名無しさん :01/10/16 14:57
ソケット通信を行うサーバーで複数のクライアントと同時に通信する場合 クライアントの数だけスレッド作って通信するもんですか? CAsyncSocket::ReceiveやCAsyncSocket::Sendって処理が終わるまで返ってこないですよね? これだと特定のクライアントとの通信が極端に遅い場合に他のクライアントが 待ち状態になってしまって非効率的なので別スレッドで通信した方が良いですよね? それとも非同期で通信して完了したら何かのイベントが発生するようにできますか?
VC++で、チェックボックスをオーナー描画したいのですが。。。 関連で何かご存知なこと教えてください。
>>267 1)httpサーバー側で勝手にスレッド作って立ち上げますんで
生成に関しては気にしなくていいです。
2)大抵のブロック関数は待ち中にスレッド切り替えしてます。
>>268 ご存じなことて言われても。
チェックボックスにBS_OWNERDRAWスタイルを追加して
親ウィンドウのWM_DRAWITEMで描画。
271 :
デフォルトの名無しさん :01/10/16 19:03
Accessのデータベースを扱いたいのですが、 Cでは構造体と配列 とポインタが使えるので、 ADOなどでデータベースに接続するより、これらを 使ったほうが簡単にdbができると思うのですが どうでしょうか? マジレす希望
モノにもよると思われ。 もっとも、キミが AVLTree や B+Tree を作れるなら、だけどね。 もしかして、データベース理論、ちゃんと理解して書いてる?
データ件数が少なかったり固定だったり 複雑に絡み合ってたりしないなら、 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はわかってんだけど、 定義のやり方がわかんない。
定義と宣言を間違えているような。。。。 ------ ヘッダ : winuser.h 内で宣言 インポート ライブラリ : user32.lib を使用 ------ って書いてあるから、winuser.h 見れば?
277 :
デフォルトの名無しさん :01/10/17 10:13
だめでした。 オプション→ディレクトリでライブラリファイルのパスはとおってる んだけど。Hインクルードに追加したけど変化なしです。 \SVMain.cpp(629) : error C2660: 'PostThreadMessageA' : 関数が不正な 3 個の実引数をともなって呼び出されました。
>>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は定数。
>>279 MFC と API を間違えているようだ。
MFC の CWinThread::PostThreadMessage を見ていたんだろ?
MFC は Microsoft が用意している C++のライブラリ。
Win32 API は、プラットフォーム SDK に付属している、
Windows を操作する為の関数群。
>でもおかしいな?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 に初期化されるのは保証されるみたいですけど、それ以外のことをしたい場合 コンストラクタの実装を別にして、自分で呼んでやれば問題ないでしょうか?
>>284 ・スタートアップルーチンのオーバーライド
・Cランタイム使用不可
・RTTI使用不可
・例外使用不可
・リンク時にAlignmentを小さくする
この程度かな
ありがとうです>285 Enable exception handling をオフにすると C ランタイムを使っている場合、とてもサイズが減りました! 感謝です RTTI使用はデフォルトでオフになっていますが、 オンにしてもサイズは変わりませんでした 上記の2つを両方ともオンにしても、API のみでガリガリ書いているやつは サイズは変わりませんでした > ・リンク時にAlignmentを小さくする とはどういうことを指すのでしょうか C ランタイムを exe に取りこまずになおかつ利用する方法は ありますでしょうか(^^;
>>285 > ・リンク時にAlignmentを小さくする
これは効果大だが Win9x/ME でロードできなくなるよ。
>>オンにしてもサイズは変わりませんでした ソース内で、dynamic_castなどを使用するなってこと。 >C ランタイムを exe に取りこまずになおかつ利用する方法はありますでしょうか 自作するか、代替のAPI(sprintf > wsprintf等)を使う。 CRTDLL/MSVCRTはスタートアップルーチン削っても使用できたか不明。
289 :
デフォルトの名無しさん :01/10/17 19:22
Visual C++初心者です。 ある市販のプログラムの特定のボタンが押された際に発行される、 メッセージというのはVC++を使って捕らえることができるのでしょうか? やりたいことは、市販のソフト(VCまたはVBで作ってEXE で、ソースなし) の特定のボタンを押した際のメッセージハンドらをつくりたいのです。
> できるのでしょうか? よほど特殊なものでない限り、出来ます。
>>287 /opt:nowin98 なら問題ない。
後はコードセクションやデータセクションなどを結合させてしまうとか。
Hello, World なら 1,024bytes で可能だな。
>>289 spyのソース見れ。いや、まずspy使え。
>288 今のところ自作してます CRTDLL/MSVCRT がスタートアップルーチンなしで動くかどうかは 試してみます。しかし公式なドキュメントが見つかりませんね 関数を呼んでもエラーにはならないようですが >287 1024byte はすごいですね /opt:nowin98 も入れて、Susie Plug-in の DLL の作成 Tips で読んだ /merge:.data=.text /merge:.rdata=.text /section:.text,erw のようにやっておりましたが、2.5KB がせいぜいでした・・ 具体的にどのようにやるのでしょうか 聞くところによると、500byte くらいも可能とのことでしたが・・
↑>291
>>293 ほかには、、、姑息な手段として、
__declspec(naked)とか。
296 :
デフォルトの名無しさん :01/10/18 16:33
VCで3Dを作成してるもののソースどっかにないですか?
298 :
デフォルトの名無しさん :01/10/18 17:40
>>296 いや、Open-GL用いて3D簡易エディタ作ってるんだけど
マウスから線を引いたりするあたりがよくわからない
で、参考となるソース探してるんです
>>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);
}
>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を使ってできるの? できれば、詳細にやり方教えて下さい
>>300 えーっと、win2k?
2kでしか試してないんだけど。
>>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などの実行プログラムを起動し、 実行したプログラムが終了するまで、 プログラムを先に進めない(非道期実行)を行いたいのですが、 どのようにすれば良いのでしょうか? ご存じの方がいらっしゃれば、宜しくお願い致します。
308 :
デフォルトの名無しさん :01/10/19 17:41
>>305 CreateProcess した後、WaitForSingleObject する。
いや、今やれよ
311 :
デフォルトの名無しさん :01/10/19 22:40
質問させていただきます。 ダイアログに貼り付けるリストボックスにおいて、 横スクロールバーを設定してもDisableになったまま機能しないのですが、 これはVCまたはWindowsのバグなのでしょうか? プログラムで強制的にEnableにしてもダメでしたが、良い方法が ありましたら、簡単に教えていただけると助かります。 リストボックス内に文字列が表示しきれないときに不便でしょうがないです。
>>311 Windowsの仕様です。
横スクロールするリストボックスなんて見たことあるの?
>>311 LBS_MULTICOLUMNスタイルじゃないと
リストボックスの横スクロールバーは出なかったような?
それだと全然違うスタイルで解決になってないのでsage
レスありがとうございます。
>>312 例えばエクスプローラーの詳細表示時などは横スクロールしますよね。
あれは独自にやってるのかな…そんな感じもしますね。
>>313 ありがとうございます。
月曜日にでも試してみます。
それはリストビューだ
オリジナルテキストエディタを作りたいのですが、 テッキストボックスコントロールを1から自分で作るとなると、 ウインドウのクライアント領域に直で書かないとだめなんですか?
>>317 そうだよ。面倒だけど、やってみると、とってもおもしょいよ。
>>316 SDKでもリストビュー作れるやん。おれはやらないけど。
320 :
デフォルトの名無しさん :01/10/20 01:10
FileViewのところでクラスのcppとhを1セットにして フォルダを作りまくったのですが、 フォルダを並べ替えられないことに気づきました。 直接dspファイルを書き換えればいけそうだけど シンプルに並べ替える方法ありませんか?
>>320 適当なフォルダに全部つっこんで1個ずつ出したら順番変わったぞ。
いま手元にあるのがVC5で、VC6では試してないが。
おお、なるほど、VC6でもうまくいきました。感謝感激
VC英語版ってどうなん?日本語版よりだいぶ安いけど 説明書が英語なだけ?それとも日本語関連のライブラリが無い?
説明書が英語なだけ。
サンキュウそいつはありがてえ
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
329 :
デフォルトの名無しさん :01/10/22 00:36
330 :
デフォルトの名無しさん :01/10/22 00:41
331 :
デフォルトの名無しさん :01/10/22 02:58
自作のエディタを作っているんですが特殊キーの実装のマニュアルみたいなのってあるんですか? Ctrlを押しながらCを押すとコピーするってのは標準だと思いますが Ctrlを押しながらDELでキャレット以降の文字を削除みたいな特殊なものって標準化されているんですか? ほとんどのエディタで使われているので標準化されているような気もしますが・・・ どっかに資料があるなら教えて。 ないなら最低でもこれは実装しておけってキーと機能教えて。
332 :
デフォルトの名無しさん :01/10/22 04:02
>>326 ByValでポインタ渡したらダメなん?
p自体は結局ポインタだと思うんだけど・・・
>>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
>>336 311じゃないけど、こんなものがあったのか。
マニュアルはちゃんと読めということですな>含む俺
338 :
デフォルトの名無しさん :01/10/23 08:30
>332、334様 ありがとうございました。無事解決しました。
339 :
デフォルトの名無しさん :01/10/23 11:50
携帯のかたちのウィンドウをつくりたいのですが、どこかに ウィンドウの形をすきにできるやりかたの載っているサイトはありませんか?
ども
ビルドとコンパイルの違い教えて下さい
>>343 コンパイルはファイルを一つだけコンパイルして obj を作る、ビルドはプロジェクトの
ファイルを全てコンパイルしてビルドターゲット (exe, dll, lib など) を作る。
int と long ってどう違うんでしょうか
347 :
デフォルトの名無しさん :01/10/23 17:25
構造体の代入について教えてください。 OPENFILENAME of1 , of2; @ of1 = of2; A CopyMemory(&of1 , &of2 , sizeof(OPENFILENAME)); @とAって同じですか? スピード的に違ったりしますか?
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はどこで呼ぶのが適切ですか?
>346 ありがとうございました。わざわざ書き分ける必要なんてないんですね(^^;
353 :
デフォルトの名無しさん :01/10/24 08:52
MFCのMDIアプリでMainFrameに画像を貼るってできるの?
354 :
デフォルトの名無しさん :01/10/24 09:18
>>349 (2)が危険な理由がわからないので、教えてもらえませんか?
>>354 コンパイルの仕方で構造体データが不連続になるらしい。
>355それはどこで仕入れた知識だ?
できた。
>>354 C++だと、
代入演算子が再定義されてたりするかもしれないし、
メンバ変数に、クラスがあるかもしれないし。
バイナリイメージのコピーはバグを生む可能性が高い。
(WinAPIで使う構造体は、Cを前提に書かれているんで
大丈夫だとは思うけど)
>>354 その構造体がなんらかのポインタを保持しており、
それが動的に確保されたものの場合、
単純なメモリコピーではそのメモリまでコピーできない。
だから、もしそれが C++ で書かれていて、
かつその構造体に代入演算子が定義されていたら、
それを使うべし。
>>356 構造体のメンバのアライメント(配置)、パック。
#pragma pack
詳しいことは知らないが。
32ビットPCは1アドレス4バイト。 静的な場合は、各メンバは4バイト境界に置かれる。 動的に確保された場合、メンバが詰められて配置される。
>>360 それは別に、CopyMemory()を使っちゃいけない理由には
ならないと思う。
>>358 了解。
それでOPENFILENAMEは平気だけどと注釈が入っていたのですね。
concole applicationでコンソールを表示させないようにするには どうしたらよいですか?ドキュソですいません。
>>364 ディスプレイに出力しないアプリならWin32アプリから呼び出せば非表示じゃないの?
違ったっけ?
aaaa
>>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にするだけじゃん。
longより大きい桁数を表示できる変数教えてください。
__int64
__int64ってなに?
>>372 Microsoft C/C++ がサポートする 64-bit 整数型。
VCスレだから、__int64で正解でいいだろ
windowsXPでは、C++を前提にAPIが書かれるといううわさは本当ですか?
376 :
デフォルトの名無しさん :01/10/24 23:18
CreateProcessにDOS窓表示させないフラグあるわよ
初心者質問でごめんちゃい。 @”ブレークポイントが設定出来ない〜〜”と怒られる。 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
「合致するシンボル情報は見つかりませんでした。」 はデバッグモードで出てくるメッセージですね。 俺はそういうのは無視してますが何か? ブレークポイントが設定出来ないのはコードのない領域に セットしようとしてないですか? 場所を変えても駄目?
>>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のデバッグシンボルをインストール していないからじゃないかと・・・。 違っていたらスマソ。
レスThanksです。 >378 ある単一の行に対して設定出来ないというのではなくて、 ソース(もしくはその一部?)に設定出来ません。 >379 95です(イマドキナガラ(笑))。 自分作成のソースに設定したいです。 >380 実は、雑誌付録のプログラムをビルド・デバックしてるんですけど、 (雑誌の筆者のOSが)Win2000だった場合には、”Win2000のOSのデバッグシンボル” をインストールする必要があるってことでしょうか? ”××のOSのデバッグシンボル”とは?
デフォルトで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++のヘルプファイルください!おねがいします!
387 :
名無しさん :01/10/25 13:34
VCでソースウィンドウをフルスクリーンでいくつか開いてる時に 次々ソースを切り替えるショートカットを教えてください。 説明が下手でスマソ。
>>387 なぜヘルプを読みませんか?
面倒なので教えてやるが正解はCTRL+F6。
つーか、MDIの基本ショートカット。
>>388 ヘルプのどこを読んだらいいかわからなくて。
ありがとですm(__)m
マウスでドラッグしながら範囲指定した複数行の先頭に "//"というコメントアウトを挿入してくれるアドインはありますか?
/**/ で囲むマクロならサンプルに入ってるけど…。 //じゃなきゃイヤなの?
>>387 CTRL+TAB。
普通のウインドウズでALT+xでできることは、
MDIでも大体CTRL+xで行えるようになってる。
>>391 俺390じゃないけどマクロを使えばいいんだね、Thx!
VCプログラミングでマクロを使うって発想が無かったよ
どうも。
>>386 Virtual-Key Codesの表を参照したいのですが、無かった。
だれか書いてください・・お願いします。
395 :
デフォルトの名無しさん :01/10/26 00:45
>>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って私の環境だとなんも起こらないのですが何なんでしょう。
Ctrl+HがBSではないエディタは嫌いだ。 Ctrl+MがEnterではないエディタも嫌いだ。
VC++7のコンパイルしたあとのコードなんかおかしい。 レイトレースの簡単なやつでBC5.0とVC++5.0では結果が同じだが VC++7は浮動小数演算のどこかがおかしい。
申し訳ないですがVC++本体持ってません。 フリーソフトの設定ファイルに Virtual-Key Codesを参照してください。とあったのですが それでとても困ってます。だれかください・・・
このメッセージはどうしたら解読できるのでしょうか。 *** のページ違反です。 モジュール : ***.***、アドレス : 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のリファレンスにも書いてあるぞ。
>>403 わかりました。ありがとうございました。
>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ボタンを削除して自分で追加したボタンを「標準のボタン」にするとうまくいかない場合があります。 見た目では強調枠で表示されて同じなんですが肝心のメッセージが送られてきません。 リソースで設定する以外にも何かやらなければいけない事ってあるんですか?
貴様のダイアログには標準ボタンがいったいいくつあるんだ、ん?
>>405 先生!
上級者になるためには何読んだらいいんですか?
>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++の予約語一覧はそれで検索して。
追加。 「EnterキーでOKボタンが押されてダイアログが閉じる」ようにしたいなら 自分で追加したボタンのメッセージハンドラに OnOK(); を書くべし。
>408 さぁ?なに読んだかなぁ……もう覚えてないや とにかく本屋に売ってる本、片っ端から全部読めば?多少はマシになると思うよ 出力されたcodを読むのもVCの癖をつかむのにイイかな 少なくとも俺はWinプログラム始める前にx86asmは普通に読み書きできたしねぇ…
Visual C++ Professional で コンパイルしたあとのアゼンブラの コードを見る方法教えてください
リスティングファイルタイプって?
>>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ビルドをエラーを出さずに行いたい 以上の三つの条件を同時に満たすには、どうしたらいいのでしょう? いまのところ、どれかひとつを犠牲にしないとビルドできないみたいなので、 困っています。
>>417 プロジェクト→設定→出力ディレクトリ
好きなとこに変えれ。(「../Debug」とか)
>>418 いや、ですから出力ディレクトリを変えたら、
e:\test\debug\AAA\vc60.pdb は、このプリコンパイル済みヘッダーが作成されたときに
使用された pdb ファイルではありません。プリコンパイル済みヘッダーを再作成してください。
って出てきて困ってるんです。
プロジェクト→設定→リンク→カテゴリ:カスタマイズ→プログラム データベース名 で変えてもダメ?
リビルドしないとダメかも…
「標準のボタン」を押したときにメッセージが送られてこないのは IsDialogMessage を呼んでないだけでした。 モードレスダイアログの基礎が分かっていないだけでした。 追加質問ですがモードレスダイアログが表示された状態でモーダルダイアログが表示された場合モードレスダイアログを無効に モーダルダイアログが閉じたら有効にしたいんですがどうやるんですか? 現在は親ウィンドウの WM_ENABLE を使用して行っていますがこれでいいんですか? 違うやり方なら教えてください。
>>420 えーっと。これをどう変えればいいんですか? ここで変更できるのは
「test.pdb」のフォルダ位置や名前だけで、vc60.pdbはそれに関係なく
各フォルダに出来るみたいですが…。
それに、「プログラムデータベースを使用」のチェックを外しても
test.pdbが作成されなくなるだけで、vc60.pdbはどっちみち作成されてる
ようです。
424 :
デフォルトの名無しさん :01/10/27 00:17
>>422 モードレスダイアログを無効にとはどういうこと?
入力を受け付けないようにしたいの?
その状態でモーダルダイアログが表示されてる?
ハァ?設計がおかしいだろ、明らかに。
モードレス→モードレスかモーダル→モードレスにしろ
モーダル→モーダルならなお良いが。
>>419 試してないけど cl.exe の /Fd オプションを手で設定するのは?
>>425 いや、どう設定すればいいのか分からないんですが…。
というか、ちょっと質問を変えます。みなさん、ソースファイルが
増えてきたら、どうやって対処されてるんですか? フォルダわけを
するしかないですよね? それで、フォルダわけしたら、それぞれの
フォルダではファイル名の一致を気にせずにネーミングしますよね?
どうやってビルドされてるんですか? 根本的に全く違う解決方法が
あるんでしたら、教えてください。m(__)m
>>426 プロジェクトの設定を開いて [C/C++] タブを選択。ダイアログ下部に表示される [プロジェクトオプション]
欄に手で入力。
私はファイルが増えたらプロジェクトを分割して、DLL やスタティックリンクライブラリを作るようにします
が。
428 :
デフォルトの名無しさん :01/10/27 06:20
>>426 >フォルダ分けをしたらファイル名の一致を気にせず
これがわからん。同一プロジェクトで同じ名前のファイルがあったらあかんだろ。
普通はプロジェクトごとにフォルダ分けするだろ。
使いまわしするにしても同名のファイルが(フォルダが違っても)複数あるのはマズイだろ。
>>391 そうです。
視覚的にわかりやすくする必要があるのです。
>>398 どもです。
> Alt+Shift+7って私の環境だとなんも起こらないのですが何なんでしょう。
エディタEpsilonエミューレーションにしているので
その関係かもしれませぬ。
私の場合Ctrl+Hはカーソル前文字位置文字削除なんで
Alt+Shift+7が置換ダイアログを出すのです。
やっぱり、選択してAlt+Shift+7を押しても「ファイル全体」
しか指定できないのですが・・・。
うう、Epsilonがまずいみたいです。 Developer Studioにしたら選択範囲置換できました・・・。
432 :
デフォルトの名無しさん :01/10/27 16:55
VC++6.0を使って,InternetExplorerが現在表示しているページのタイトルと, そのURLを取得するアプリケーションを作っています. 情報の取得にはDDEを使っているのですが,途中でエラーがでて上手くいきません. 手順としては DdeInitialize()で初期化 サービス名"iexplore",トピック名"WWW_GetWindowInfo"でDdeConnect() アイテム名"WWW_GetWindowInfo"でStringHandleを得て, DdeClientTransaction() <-ここでエラーが出ます. エラー値はDMLERR_NOTPROCESSEDで,説明を見ると A transaction has failed.だそうです. 解決策をご存じの方いましたら教えてください,よろしくお願いします.
なんとかEpsilonで選択範囲置換できないでしょうか?
自己レスですが,解決しました.失礼しました
>>433 Epsionの作者にクレームつければ?
>>428 >これがわからん。同一プロジェクトで同じ名前のファイルがあったらあかんだろ。
いえ、「そういう場合はプロジェクトを分ける」ということを知らなかったものでして。
ですから、同一ファイル名のときはどうしたらいいものかと、悩んでたわけです。
>>427 >プロジェクトを分割して、DLL やスタティックリンクライブラリを作る
ありがとうございます。今までプロジェクトの分割なんてやったことなかったんですが、
こういうときのためにあったんですね。なんとかビルドできるようになりました。
ところで、スタティックリンクライブラリをリンクするために、
#ifdef _DEBUG
#pragma comment(lib,"BGM/Debug/BGM.lib")
#else
#pragma comment(lib,"BGM/Release/BGM.lib")
#endif
こういう記述が要りますよね。これ、ひとつのワークスペースの中のプロジェクト
なんだから、いちいちこういう記述をせずとも自動的にリンクしてくれないのかな〜とか
思ったんですが、さすがにそれは無理でしょうか?
>プロジェクトの設定 >依存関係 ああ、「依存関係」って、このためにあったんですね。今まで全く使わなかったから、 脳内「透明あぼ〜ん」してました。どうもありがとうございました。
439 :
デフォルトの名無しさん :01/10/29 12:03
EUCのソースをSJISに変換して編集、保存時にEUCに戻して保存するというアドインを作りたいのですが、 アドインのサンプルとか解説してるサイトかありますか? 可能な限り日本語きぼん。
VBAについて調べておけ
441 :
デフォルトの名無しさん :01/10/29 20:57
どこに書いていいかわかんなかったのでここで質問させてもらいます。
RS-232Cでデータ送受信するプログラムを作ろうとしているのですが
(Visual C++ 6.0、OSはWin98SE)
どのようにしていいかわかりません。
一般的なTIPSみたいなのがあるのかなぁ?と思いまして。
ネットで検索したら
ttp://www-kobayashi.ctrl.titech.ac.jp/~mtanaka/vc/ とかがあったんですが、これってMicrosoftCommControl
を使ってるんですよね。これってVBのコンポーネントですよね?
それ以外の方法ってありますか?
>>441 別にVB専用ってわけじゃねえ。ActiveXコントロールなんだからVCからだって使える。
自分でやりたいならCreateFileとかDeviceIoControlとか。
>>435 あ、epsilonではなくてvisual studioのepsilonエミュレーション
をつかっているのデス。
同じく
>>433 で困っている人いませんか・・・?
>>443 使ってないので俺は困ってないけど、確かにepsilon互換にすると
選択範囲置換出来ないね。コマンド実行と同時に選択範囲が解除されてる感じ…。
>>442 うん、もちろんActiveXコントロールでVCから使えるのは
わかります。でも、できるだけそゆコントロールを使いたく
なかったので。
ぼくもあの書き込みの後しらべてCreateFileを使う方向で
いこうと思っています。
>>444 レス、どもです。
epsilon互換にするやつはVC++IDEを使うな、ッてことですかね・・・。
自分でキー割り当てなおせばいいんかなー。
447 :
:デフォルトの名無しさん :01/10/30 00:11
CWndで簡単なエディタみたいの作ってみたいのですが、IMEの入力ウィンドウみたいのを カレットの位置にあわせるにはどうすればいいのでしょうか? 位置を動かす関数はあるみたいなのですが、どこから呼び出せばいいのでしょうか? ユーザーがIMEをONにしたときにを知らせるメッセージとかあるのですか? それとも前もってカレットの位置にあわすように登録する関数でもあるのですか? どうしたらいいのでしょうか?
>>447 ImmSetCandidateWindow
ImmSetCompositionWindow
ImmSetConversionStatus
ImmNotifyIME
WM_IME_STARTCOMPOSITION
などをMSDNで調べるがよい。
>>448 どうもありがとうございます。助かりました。
質問の後、寝ちゃったけど回答の早さには助かります。
Unicodeを少し勉強してみようと思ったのですが、他のホームページで VC++でUnicode対応プロジェクトにするには 「プロジェクト」→「設定」→「C/C++」→「プリプロセッサの定義」から _MBCSの定義を削除し、代わりに、_UNICODEを定義する。 「プロジェクト」→「設定」→「リンク」→「アウトプット」の 「エントリポイントシンボル」にwWinMainCRTStartupと書き込む。 (これをやらないと_WinMain@16は未解決ですとコンパイルエラーになります) とあり、このとおりにやったのですが msvcrtd.lib(wcrtexew.obj) : error LNK2001: 外部シンボル "_wWinMain@16" は未解決です Debug/UnicodeTest1.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー とやっぱりエラーが出てしまいます。 環境はWindows2000でVisualC++6.0 Standard Editionです。 どこがいけないのでしょうか?
WinMain からじゃなくて、 wWinMain からはじめれば?
452 :
デフォルトの名無しさん :01/10/30 11:47
どなたかー 現在のIEバージョンを取得する方法をご存知の方いませんか? おしえてください〜・・・ わかりそうでわからないんです。。。
453 :
Name_Not_Found :01/10/30 12:06
雑誌の付録CD-ROMとかで、オートランでブラウザみたいなのが立ち上がるのって VCでやってるんでしょうか? どなたか申し訳ありませんが、教えていただけないでしょうか?
start E:\hogehoge.htm じゃないの?
455 :
デフォルトの名無しさん :01/10/30 13:01
456 :
デフォルトの名無しさん :01/10/30 13:07
BMPのみのウィンドウにボタンを絵からせんたくしてつくりたいのですが そういうこと書いたサイトありませんか?
457 :
デフォルトの名無しさん :01/10/30 13:32
今更VC++の勉強を初めても無意味ですか? VC#の方が良いの?
458 :
デフォルトの名無しさん :01/10/30 15:10
>>457 現在と状況が違うかもしれないけど、
俺の場合、10年くらい前にCとBASICとCOBOLを
ほぼ同時期に覚えた。
気になるんなら、C++とC#の両方やればいい。
>>451 MFCでプログラミングしてるからWinMainやwWinMainは直接書かないんですけど。
460 :
デフォルトの名無しさん :01/10/31 01:03
Unicode版のMFCライブラリをインストールしてないだろ 全部入れろ。全部。
461 :
デフォルトの名無しさん :01/10/31 22:12
膨大な量のソースだと・・・ 知ったかぶるな○○!! VCはスケルトン作った時点でかなりの量のソースコードが出来てんだよ!!
>>460 サービスパックの新しいのが手元にないので、いったん削除してからの再インストールは
やりたくなく、削除しないまま再インストールをしようとしたらカスタムインストールとかの
選択ができずにいきなりコピー(インストール)が始まってしまいました。
だからUNICODE関連のライブラリがインストールできたのか疑問で、エラーが出たプロジェクトを
再コンパイルしてみてもやはりエラーが出ました。
しかし新しいプロジェクトを作ってUNICODE対応プロジェクトにしてみたらエラーは出ませんでした。
ライブラリが足りなかったのか、エラーが出たプロジェクトにおかしいとこらがあるのか分かりませんが
とにかくUNICODE対応プロジェクトができるようになりました。
どうもありがとうございました。
>463 ライセンスちゃんと持ってるなら、マイクロソフトに「くれ!」って言ったら (FAXでね)ServicePackタダでくれるよ。
465 :
デフォルトの名無しさん :01/11/02 14:25
テキストエディタで「URL文字列をクリックするとブラウザが起動」 「メールアドレスをクリックするとメーラーが起動」ってありますよね? あれってShellExecuteを使えばいいんですか? セキュリティ的に問題があったりしませんか? 特殊な文字列をShellExecuteで実行するととんでもないことが起こったり?
467 :
デフォルトの名無しさん :01/11/02 16:40
自作エディタを作っているんですが画面の更新が遅すぎて困っています。 差分更新の部分は問題ないのですが全画面更新の部分が遅すぎます。 他のエディタと比べてスクロール時の更新速度が半分程度しか出ません。 システムモニタでプロセッサ使用率をみると他のエディタは50%程度ですが 自分のは100%の状態なのでそれを計算にいれると実質1/4程度のスピードしか出ません。 現在は描画用にコンパチブルビットマップを作ってそこに描画してから画面に表示しています。 コンパチブルビットマップへの描画は最適化しているので問題ないのですがコンパチブルビットマップから画面への転送が遅いようです。 スクロールの場合全画面更新する必要があるのでGetDCでウィンドウのDCを取得してウィンドウサイズ分転送しています。 この部分はどう考えても高速化できそうもないのですが実際この部分だけで処理時間の80%ぐらい要しています。 コンパチブルビットマップから画面への転送を高速化する裏技でもあるんですか? 現在はCreateCompatibleBitmap CreateCompatibleDC で作ったバッファから BitBlt で転送しています。
ShellExecute(NULL, NULL, "c:\\con\\con", NULL, NULL, SW_SHOW);
>>467 実画面の方はScrollWindow()でスクロール。
足りない部分をバックバッファからのBitBlt()。
バックバッファからのBitBlt()よりは実画面同士のBitBlt()の方が、大抵速い。
お試しあれ。
ShellExecute(NULL, NULL, "echo \t\t\t\b\b\b\b\b\b\b", NULL, NULL, SW_SHOW);
471 :
デフォルトの名無しさん :01/11/02 21:04
>>469 サンキューです。
ScrollWindowを使ったら格段に速くなりました。
便利なAPIがあるもんですね。
初めて知りました。
472 :
デフォルトの名無しさん :01/11/04 21:07
WINAMP みたいな見た目のかっこいいアプリはいったいどうやっているのか と思って spy++ でウィンドウをさがしてもいちばん親のウィンドウしか見えない。 これはボタンやスライダーがウィンドウじゃなくてただそういうふうに描画 してあって、クリックされたかどうかはマウスの座標から全部自分で判定して いるということなんでしょうか? MFCつかわないプログラムではあたりまえなのかな?
MFCを使わない云々よりも、Winampには、Skinがあるからじゃないか? コントロールをWinのボタンとかにすると、Skinでビットマップを貼り付ける のが結構面倒だし。
474 :
デフォルトの名無しさん :01/11/06 10:54
なるほど特殊なケースなんだね。
475 :
デフォルトの名無しさん :01/11/06 14:23
VC++5.0のWin32 Console ApplicationでEXEを作成しています。 クライアントでデバグしている限り問題はないのですが、 EXEをサーバに乗せて呼び出すと、処理は終わっているのにプロセスが残ってしまいます。 プロセスが残るのは業務的異常処理時のみです。正常時は問題なしです。 どんな原因が考えられるでしょうか。
476 :
デフォルトの名無しさん :01/11/06 20:06
かなり困っています. どなたかお詳しい方はご教示をお願いします. MessageBox関数がらみなのですが, 次のようなプログラムを組んでいます. 動作は条件1に合致すると窓1が出て,条件2に合致すると窓2が出ます. (正確には同じ窓が連続してでないよう細工はしていますが,ここでは省略。) void xxx::OnTimer(UINT nIDEvent){ int itmp1 = 0, itmp2 = 0; if(条件1){ itmp1 = MessageBox(.....);//窓1 } else if(条件2){ itmp2 = MessageBox(.....);//窓2 } } 条件1,2共に合致している場合, タイマーイベントが起こると,最初に窓1が出ます. 次のタイマーイベントでは(細工のために)窓2が出ます. (この窓が2つ出ている状態を状態Aとします) ここで,窓2のほうでOKボタン等を押すとitmp2に値が返ってきますが、 状態Aで窓1の方のOKボタンを押すと窓は消えますが,itmp1に値が返ってきません. 窓2の方のボタンを押してやると,itmp1の方も突然値が返ってきます。 これは何か使い方がおかしいのでしょうか? URL等でも構いませんのでどなたかご教示を….
段組が消えてしまいました… 見えにくくてすみません。
>>476 OnTimerの中でモーダルな処理をしない。
479 :
デフォルトの名無しさん :01/11/06 22:27
VC++と一緒に使うと便利なツールってありますか? フリー,シェア問わず教えてください javaはフリーでいろいろそろってますが・・・
480 :
デフォルトの名無しさん :01/11/06 22:46
>>476 たぶんこんな感じだと思われ。Windowsのメッセージ処理を勉強しましょう。
OnTimerが呼ばれて窓1が出る
→MessageBox関数の中でWindowsが自動的にメッセージ処理
→またOnTimerが呼ばれて次は窓2が出る。
→またMessageBox中でWindowsが自動的にメッセージ処理
→窓1のOKを押すと窓1にメッセージが送られ窓1が閉じる。
→窓2のOKを押すと窓2が閉じる。
→2回目のMessageBoxから復帰。itmp2に値が入る。
→2回目のOnTimerから復帰
→1回目のMessageBoxから復帰。itmp1に値が入る。
→1回目のOnTimerから復帰。
>>479 いろいろあるけど、範囲を絞らないと的外れな回答しか得られないと思われ。
- ViVi, VIOP
- CVS, igloo, CVSWeb
- BoundsChecker
- STLport
- MagicDraw
私の VC++ での開発のお供は、こんな感じだけど。
482 :
デフォルトの名無しさん :01/11/06 23:23
JUNITみたいなのあります? javadocみたいなのも欲しいです。 というか,何でもいいんです(笑) VC++の情報があまりなくて、 もっと活用するにはどうすれば良いか,意見を聞きたかったのです MagicDrawいいですねー ちょっと使ってみようと思います
IIOSSがjavaべったりなんで、やはりMagicDrawがよいかなと思い始めたこのごろ
>>478 ありがとうございました。
モーダル処理しないように(ダイアログを別途作成)して
回避しました。
>>480 試行錯誤しながらやっています・・・。
いい機会なので勉強します。
Win32 サービス関連APIをうまくラップしたclassのソーすクレ
ただのラップじゃ無意味。>485 Win/X[/Mac]と互換のあるやつでもないと。
もう寝ろ>487
489 :
デフォルトの名無しさん :01/11/07 03:17
490 :
デフォルトの名無しさん :01/11/07 06:01
HTMLについての質問ですが煽らずマジレスお願いします。 <IMG src="1.jpg" width=400 height=300 alt="写真"> って感じのタグの alt の部分で 二重引用符(")を表示したい場合 <IMG src="1.jpg" width=400 height=300 alt="写真"アイ〜ン""> って書きますよね? C言語みたいに alt="写真\"アイ〜ン\"" って具合に何らかの文字を前につけることで 二重引用符(") を直接書くことってできますか? ついでにURL・メールアドレスに使用可能な文字も教えてくれると嬉しいです。 日本語ドメインなどは考えずに元々の英語のアドレスで使用可能な文字限定で教えてください。
493 :
教えて下さい :01/11/07 16:07
VC++6.0使用してますが、「モグラ叩き」をプログラムして、ビルドしたらエラーはなくなりました。その為、「プログラムの実行」に踏み切ったのですが、 nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部****"__endthreadex" は未解決です nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部****"__beginthreadex" は未解決です ebug/モグラ叩きForWin.exe : fatal error LNK1120: 外部参照 3 が未解決です。 link.exe の実行*** の4つのエラーが消えません。どこを修正したらよろしいのでしょうか?
>>493 プロジェクトの設定を確認。
MFCを使わない設定になってるのに使ってるとか。
<IMG src="1.jpg" width=400 height=300 alt="写真&quot;アイ〜ン&quot;">
の間違いです。
&quot;の部分を半角文字で書き込んだらブラウザに二重引用符に変換されてしまいました。
実体参照ってのはXMLの話ですか?
MSDNで調べたらJavaのXMLの部分にしか載ってませんでした。
http://pc.2ch.net/hp/ は偏差値低そうなので逝くのイヤです。
URL・メールアドレスはエディタの「クリッカブルURL」で使いたいんですけどなんか情報ないですか?
>>495 板違い&スレ違いウザイ。
ここのスレタイトルを100回復唱して首吊れ。
497 :
教えてください :01/11/07 17:20
493の者ですけど。アドバイスを頂いて修正しましたが、 libcmtd.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/モグラ叩きForWin.exe : fatal error LNK1120: 外部参照 1 が未解決です。 この2つが消えません。 1.エラーの内容 2.エラーの対処法 この2つを教えてください。
-subsystem:consoleを-subsystem:windowsに変更
>>497 コンソールプロジェクトなのにmainを書いてない。に1票。
500 :
デフォルトの名無しさん :01/11/07 18:33
CEditのキャレットを見えないようにするにはどうしたらいいのでしょう。 素直にHideCaretしても、どうしてもきえてくれません。 よろしくおねがいします。
>>500 サブクラス化してWM_SETFOCUSをひっかけてHideCaret。
つーかカレットの出ないEditコントロールなんてDQNなUIのアプリなんか
使いたかねーけどな。
exeファイルしかないのですがその実行ファイルの特定メニューを 使用不可にする方法はありますか。ソースがあれば簡単なんですが exeしかありません。やはり逆アセンブルとかになってしまうので しょうか。
メニューを探してEnableMenuItem()。 それか、WM_COMMANDをフックする。
>>502 適当なリソースエディタで。
NTならVisualStudioでも可
>>504 MFCアプリだったらOnUpdate〜を引っかけられてたら利かないじゃん。
多分、MFCだと思います。MFCでなかったらEXEファイルのみでも>503 見たいなことできるんですか。
>>506 >>503 はグローバルフックを使う方法。
Windows標準のMenuコントロールを使っているアプリ全般に利く。
ただし、随伴するアプリを常に同時に起動する必要がある。
また、他のアプリに影響が出ることがあるかも知れないような
気がしないでもない。
無効にしたいメニューのコマンドIDはspy++であらかじめ調べておく。
>>504 は、いちどリソースオブジェクトを分離し、編集(メニュー無効化とか)
して再リンクする。
(VSから「ファイル」→「形式を指定して開く」で「リソース」を指定、対象のexe
ファイルを選択。WinNT/2000のみ可能。9xでは編集できるが再リンク不可。)
実装によってはメニュー無効化だけでは利かないこともあり得る。
メニュー項目自体の削除ならたぶん大丈夫。
ただし、メニュー項目をリソースとして持ってない(実行時に作成する)場合は
利かない(というか編集すべきリソースがない)
509 :
教えてください :01/11/08 09:57
>>498 ->-subsystem:consoleを-subsystem:windowsに変更
どこを修正すればそうなりますか?
510 :
デフォルトの名無しさん :01/11/08 13:16
SDIのアプリケーションで、右上にある[×]をクリックしても、アプリケーションのダイアログが消えるだけで、その後もずっと動きつづけてしまうのですが・・ どうしたら直せるのかわかりません。知っているかたいましたら教えて下さい。お願いします。
>508さんたち ありがとうございます。VSはありますのでやってみます。
>>510 ウィンドウが閉じたイベントに反応して、
アプリケーションを終了させるよーに仕向けてください。
513 :
デフォルトの名無しさん :01/11/08 17:33
MFCの質問はここでいいのでしょうか? CObListのGetNextメソッド内部の ASSERT(AfxIsValidAddress(pNode, sizeof(CNode))); で落ちてしまいます。 原因がサパーリです。どなたかヒントを・・・
514 :
デフォルトの名無しさん :01/11/08 19:45
COleDataSource::OnRenderGlobalData COleDataObject の、サンプルコードがあるところを教えてください。 達人の方々、簡単なサンプルコードをいただけると幸いです。 サパーリわからなくて困り果てています。うう(泣
>>513 パラメータクラスのコピーコンストラクタをきちんと書いたか?
516 :
デフォルトの名無しさん :01/11/08 22:10
VC++6.0をアカデミックで 購入しようと思っているのですが、これは 必要に応じて差額を支払い、通常版に アップグレードすることが可能なのでしょうか? 無理なら、最初から通常版を買うつもりです。 技術的な質問でなくて申し訳ありません。
>>516 通常版って?次のバージョンにアプグレドしたいの?
アカデミックだからと言って機能制限はなかったはず。。。
俺のはアカデミックプロ版だよ〜
518 :
デフォルトの名無しさん :01/11/08 22:37
>>517 レスありがとうございます。
通常版とは、アカデミックでない
7〜8万円くらいで売ってるもの、という意味でした。
僕が欲しいのはプロフェッショナルですが
アカデミック版では、商用利用が出来ないと
聞いています。
当分、シェアウェアなどを制作する予定はないのですが…
もしも、そうなった時に買い直すのも馬鹿らしいですし。
>>518 商用利用とかはわからないけど、
個人でするなら、それほど気にすることはないのでは?
素直にアカデミック買えるなら買っとけ!
得した気分になるぞ!(ワラ
そういうものなんですか? アカデミックを商用利用してる人 って結構いるんでしょうか? どっちにしろ、差額払っての 通常版へのアップグレードが出来るか どうかは知りたいところです。 //検索はしているんですが、なかなか見つからない(TT)
ライセンス上違いないよ 商用もok た
>>518 > アカデミック版では、商用利用が出来ないと聞いています。
誰から?
523 :
516=518 :01/11/09 02:57
>>522 高校の時の友達っす。
今、思い返すとデタラメだったのかも…?
さっき、VC++持ってる近所の
友達にアカデミックの使用許諾契約書
を見せてもらいました。
難しく書いてあって、良く分からないけど
コンパイルしたものを売っちゃイカン…
みたいな事は書いてなかったです。
でも、どうなんだろ?
コードのすべてに〜の記述を含めなければいけません、とかあったし。
アカデミックと通常版の違いを書いたものが無いってのが…鬱。
TC++にはそんな制限があった気がするがVC++にはないはずだよ>商用利用不可
>>524 そうですか。
もうちょっと調べてから決断を下します。
たぶん、アカデミック買うと思います。
レスしてくれた方々、ありがとうございました。
526 :
がんばれや :01/11/09 03:30
アカデミックと一般版の価格差に 怒りが頂点にたっしました。 VC++を買うのを止めてBCBプロフェッショナル を買おうと思います。 しかし、あの価格差は呆れちゃいますね。
>>526 ご怒りはごもっとも。
visualstudioのエンタープライズが
アカデミックなら4万弱ぐらいだよね。
VC++一般版プロフェッショナルより
はるかに安いもんね。
528 :
デフォルトの名無しさん :01/11/09 13:14
昨日の件は、言っている意味がわかって修正したものの、手詰まりの為続行を断念。 次に入ったところで「拡張子に関連したコンパイルツールが無い為にコンパイル出 来ません」と出てしまいました。対処法を教えてください。 --------------------------------------------------------------------------------
>>528 誰だてめえ。
このスレは貴様のために回ってるわけじゃねえんだから「昨日の件」で通じる
わけねえだろが。おととい来やがれ。
江戸っ子ハケーン!!
>>528 command: stop
msgbox: warningbox
msg_titile: 開発者へ
msg_str: あなたの動かしているデバッガが2chに来て
msg_str: 対話デバッグしてますよ
command: popup
command: restart
536 :
デフォルトの名無しさん :01/11/09 17:56
Win98では現在のローカル日時設定出来るのですが、WinNT/200では出来ません SetLocalTime関数を使用しています Helpを見るとSE_SYSTEMTIME_NAME 特権を有効にしなければならず、 この特権を割り当てるには、AdjustTokenPrivileges 関数を使いますが、 AdjustTokenPrivilegesのパラメータの意味がまったくわかりません 教えていただくか、別の方法を教えてください
537 :
デフォルトの名無しさん :01/11/09 18:24
>>536 待て待て待て。
同じ板でマルチポストするな。
新手の荒らしか?
538 :
デフォルトの名無しさん :01/11/09 18:26
権限の概念自体は共通の筈なので、「NTで再起動するには」系の Programming - Tipsを検索すれば、それなりに解説が出ているかと。
VC5.0のlearningだと商用配布できなかったな、確か。
Win32サービスでRegisterDeviceNotificationを使って USBマウスの接続イベントをとるには どうすればいいのでしょう? DEVICE_NOTIFY_SERVICE_HANDLEをして とりたいのですが? 特にGUIDあたりがさっぱりわかりません.
541 :
デフォルトの名無しさん :01/11/10 04:41
GetLayeredWindowAttributesをWin2000で使いたい。
542 :
デフォルトの名無しさん :01/11/10 10:35
Win98SE上でMFCを利用してMDIプログラムを作っているんですが、 一度起動した後、二度目に起動するとアイコンなどにマウスを乗せた瞬間や、 そのままマウスを待機させてツールチップが出る瞬間にAccess Violationが でて強制終了してしまいます。 一度AccessViolationが出ると、デスクトップの他のアイコンにマウスを乗せるだけで、 Exploreが強制終了してしまって再起動しなければならなくなります。 メニュー項目に対応するSTRINGテーブルなどはツールチップも含めて、 ちゃんと設定できていると思います。 プログラムの構成なのですが、App、MainFrame、ChildFrame、Document、Viewといった 標準的なクラスに加えて、CFrameから派生したものと、CWndから派生したものの、 独自のウィンドを複数追加しています。 newで作成したCWndは親ウィンドのデストラクタでDestroyWindow()とdelete()を使って 後処理していますが、これが原因でしょうか・・・。 原因不明のまま、とりあえず他の関係ない部分のコードを追加していると 突然エラーがでなくなったりします。 何が原因で発生しているバグだと思われますでしょうか。
CWnd派生クラスは自分でdeleteするが何か?
>>543 例えば、CWndオブジェクトへのポインタがm_Wndだったとすると、
m_Wnd->DestoryWindow();
delete(m_Wnd);
と親ウィンドウのデストラクタで後処理しています。
これは通常の事後処理でしょうか。
ただDestroyWindow()がいらないのかなぁ、と思ってこの行をコメントアウトしてみても、
やっぱりAccessViolationがでています。
545 :
デフォルトの名無しさん :01/11/10 14:30
>>544 CWnd派生クラスをdeleteするときは、そのウィンドウ自身の
PostNcDestroy()を使うのが通常のやりかたでなかった?
546 :
デフォルトの名無しさん :01/11/10 14:48
ローカル変数が使用されないとコンパイラが警告出しますが スタティック変数やグローバル変数の場合は警告が出ません。 プログラム中で使用されているか調べる方法ってありますか? 変数をコメントにしてコンパイルしてみる。 スタティック変数の場合エディタで static を auto に置換してコンパイルした後で auto を static に置換する。( auto は使われていない場合 ) 検索機能で変数を調べてみる。 くらいしか思いつかないんですけども簡単な方法ってありますか?
簡単な方法はない。 正確だが少々面倒な方法なら、ある。 MSDN で「BSCMAKE」もしくは「ブラウズ ファイル」を調べてみれ。
>>545 はい。
PostNcDestroy()で
delete(this);
とするように書いてますね・・・。
どこをいじればこのバグがなくなるか色々試す中で、
PostNcDestroyではなく親ウィンドのデストラクタでdeleteしてやれば
エラーが出なくなったことがあったんですが、
どうも因果関係がはっきりしないのでWndのdeleteの問題ではないようです・・・。
この部分は指摘していただいたようにPostNcDestroyでdeleteするようにしてみます。
ありがとうございます。
また別のコードを追加していたらバグがでなくなりました。
もうほとんど完成です。でもなんかすっきりしない。(´д`)マズー
549 :
デフォルトの名無しさん :01/11/11 23:21
みなさま、VisualC++でどういうソフトを今作っているのですか?
550 :
デフォルトの名無しさん :01/11/11 23:47
お勧めの書籍教えて
551 :
デフォルトの名無しさん :01/11/12 06:17
Cの標準ライブラリ(VC++6.0付属のもの)を開いてみても中ではプロトタイプ宣言やマクロの定義しかしていないようにみえるのですが、処理はどこにかかれているのですか?
どのエディションのどこをみてるのか知らんけど。 うちのVS6.0エンタ版のインストールフォルダには VC98\CRT\SRCってフォルダがあって、 そこに標準ライブラリのソースが並んでるが。
>>552 実は
>>551 はヘッダとライブラリ, インポートライブラリの区別がついていないに 6 ガノッサ。
VC でアクセスやVBみたいなフォームを扱いたい。 リソースエディタにはサブフォーム(VBでいうGrid がないです。 どうやればいいでしょうか?
555 :
デフォルトの名無しさん :01/11/12 14:04
コンソールアプリでマウスの右クリックを検出するにはどうやればいいのでしょうか?
>>556 サンクスです
GetKeyState(VK_RBUTTON)<0
ですがコンソールではうまくいかないようです
558 :
デフォルトの名無しさん :01/11/12 17:33
いきました ありがとうございます
560 :
デフォルトの名無しさん :01/11/12 19:16
VC++は今後廃れるのでしょうか?
DELPHI>>>>>BCB>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>VC++
VB>>>>>>>>>>DELPHI>>>>>BCB>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>VC++
563 :
デフォルトの名無しさん :01/11/12 20:37
static char tag_head[12][4] = {"ISBJ","IART","IPRD","ICMT","IGNR","ICRD","ICOP","IENG","ISRC","IKEY","ITCH","ICMS"}; でエラーが発生してコンパイルできないのですが、 どこがいけないのでしょう? 今は直接代入せずにlstrcpyを使っていますが、美しくないので直したいのですが(^^;
ちなみに static char tag_head[12][5] =以下略 で5の部分を8以上の数にしても通りません。
static char *tag_head[]= にしてみろ
566 :
デフォルトの名無しさん :01/11/12 22:37
プログラムを一応完成させた後、 細かい部分がちゃんと動いているか、 コンソールか何かに、値を表示させたいのですが どうすればいいのでしょうか?
デバッガを使え
568 :
デフォルトの名無しさん :01/11/12 23:33
あの、クラスを作ったら、ウインドウプシージャ書いてあるところにパブリックな変数で宣言するのが普通なんですか?
569 :
デフォルトの名無しさん :01/11/12 23:33
570 :
デフォルトの名無しさん :01/11/12 23:43
つまり、Windowsプログラムでは、あるクラスを作ったら、WinMain()やプロシージャが書かれているcppファイルにグローバルに宣言して、それぞれのプロシージャで使うのが普通なのかなということです。
571 :
デフォルトの名無しさん :01/11/12 23:45
>>570 complie error at 2ch.c at 570
プロシージャの意味が曖昧です。
WndProc()
それともVBで言う手続き?
572 :
デフォルトの名無しさん :01/11/12 23:46
WndProc() のほうです。
>>570 ぼくぁ WinMain のローカル変数に実体とってるよ>メインクラス。
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, int)
{
if (!ACLASS::Init(hInstance)) return 0;
ACLASS a;
return a.Run();
}
>>570 俺は ATL の CWindowImpl クラスを使ってるけど。
575 :
デフォルトの名無しさん :01/11/13 16:01
::GetPrivateProfileString() のデフォルト文字列 lpDefautなんですが。 ・NULL を指定することはできません。 ・半角スペースで終わる文字列を既定の文字列として指定することは避けてください となっています。 じゃ、デフォルト文字列を NULLとしたい場合、どうすれば良いんでしょうか。 とりあえず、 ::GetPrivateProfileString(...,"\v",buffer,... if(buffer[0]=='\v' && buffer[1]=='\0') buffer[0]='\0' とかやってるんですが。何か美しくないような... lpDefautに NULLを指定しても動いてしまいますが、禁止されてるようだし。 レジストリを使え!とか言わずにご教授ください。
>575 ん??なんか勘違いしてないか?普通に GetPrivateProfileString(...,"",... でいいじゃん。関数の引数をNULLにするなってことなんじゃないの??
577 :
デフォルトの名無しさん :01/11/13 16:15
>>575 文字列を与えないことと、空の文字列を与えることは違うのです。
>576, >577 ありがとうございます。勉強になりました。
580 :
デフォルトの名無しさん :01/11/13 22:05
VC++で ファイルを読み込んだり,書き込んだりするプログラムを作りたいのですが どういうクラス?関数?があるのでしょうか?
581 :
デフォルトの名無しさん :01/11/13 22:17
つーかMFCのオンラインリファレンスってないの・・・
MSDN読め馬鹿
>>580 VC++ 以前の問題として、まず「プログラミング言語C」「プログラミング言語C++」読んどけよ。
Win32 API 使って読み書きしても良い(それが必要になる場面もある)が、標準ライブラリ関数
知らんのは論外。
584 :
デフォルトの名無しさん :01/11/13 22:30
MSDNにCFILEの使い方ってのってましたっけ? >VC++ 以前の問題として、まず「プログラミング言語C」「プログラミング言語C++」読んどけよ。 Win32APIに近いレベルの方がいろいろできると思ったので。 uxixと同じやり方でいいんですか?
CD-Rで焼いたVSEEだからMSDNないんだよ。きっと
Win32環境にはシステムコールがないかわりにWin32APIがある。 だが、いちおうコードの移植もしやすいように、 K&Rに載っている程度のシステムコールはランタイムライブラリとして提供されている。 ランタイムライブラリは最終的にWin32APIを呼び出して処理を完了させるが、 いまどきのPCは処理性能がよいため、呼び出しにかかるコストはそれほど 変わらない。 いろいろできるかどうか、であれば、Win32APIを直接呼ぶ方がいろいろできる。 が、ここでそんなしょぼい質問をしてるレベルだと、ランタイムを使おうが APIを使おうが大差ない。 MFC/iostreamも然り。
587 :
デフォルトの名無しさん :01/11/13 23:02
最近windowsプログラミングを始めた物で 醜い仕様に唖然です 結局のところ、どのように書くのがwinpgでは一般的なのでしょうか?
588 :
デフォルトの名無しさん :01/11/13 23:12
結局誰もわかってないのかな 自分流が一番ってことか
589 :
デフォルトの名無しさん :01/11/13 23:16
>587 うるせー馬鹿。C言語を前提としてるから仕方ねーんだよ。俺はけっこうキッチリまとまってると思うぞ。
適当にCOM/COM+で組み合わせて終わり。 言語は適材適所。 GUIだってVBでもVCでもDelphiでもHTMLでもなんでもいいよ。
>>589 キャストを多用せざるを得ない API のインターフェースは、どうかと思うが。CreateMenu の 9 番目の
引数 (hMenu) とか、さすがに辛いだろ。
>>587 過去との互換性を保ちつつ、無理矢理に機能拡張してきたからな・・・
仕方ないものと考えるしか。
しかし const は、ちゃんと指定して欲しかった。
いちいち const_cast で const 解除するのが何かとイヤだ、、、
const_castが必要な場面って、思いつかないんだが、 実例があったら教えてくれ。
>>593 俺が思いつくのは DrawTextEx(), VariantCopy() あたりだが。
595 :
デフォルトの名無しさん :01/11/14 04:02
ファイルをRB+でオープンして編集していたのですが、 この場合ファイルサイズが小さくなった時にゴミデータが末尾に残ってしまいます。 そこでtruncate()関数を使ってファイルを切り詰めようと思ったのですが、 unistd.hはUNIX系のみなのかVC6ではサポートされていないようなのです。 扱うファイルのファイルサイズが巨大で一部のみを編集するので書き込み用のファイル を別にオープンするといったことは避けたいのですが、いいアイデアはないでしょうか? もしくはソースコードを公開されてるバイナリエディッタとかがあればソースを読んで勉強しますが・・・ (Bainary maidは出力用のファイルを別にオープンするタイプだったので参考にならず(^^;
>>595 MFCのCFile::SetLength()のソースを見てみたら、
SetEndOfFile()というAPIを呼んでるみたいだよ。
そういえばMS-DOSにもtruncateがなくて、そのかわりwriteで0バイト出力を指定すると
ファイル切り詰め動作になったんだよねー。なんだよそれわって感じ。なつかしい。
597 :
デフォルトの名無しさん :01/11/14 10:57
質問です プログラムの進行と同時に 状況をエディットビューに表示させ続けてます しかし 限界がきたようで途中から書き込みを止めてしまいました 随時表示するには 以前に表示したものを消さないといけないと思うのですが エディットに書かれた最初の部分にさかのぼり 消すのは どうしたらいいですか? よろしくお願いします
598 :
デフォルトの名無しさん :01/11/14 11:24
ダイアログベースで、プログラムの起動時にウィンドウを非表示にしたいのですが、 どうすればいいのか教えていただけないでしょうか?OnInitDialogのなかで、 ShowWindow(SW_HIDE)を実行してもうまくいきません。 よろしくお願いします。
599 :
デフォルトの名無しさん :01/11/14 11:50
はじめまして。 以前は普通にコンパイルできていたのですが以下の様なメッセージが出て きてコンパイルできなくなりました。どうしたことでしょう? --------------------構成: Cpp1 - Win32 Debug-------------------- コンパイル中... cl.exe の起動エラー Cpp1.exe - エラー 1、警告 0 環境はWin2000です。以前はWinをインストールしたドライブ(C)にインストール していたのですが、それをアンインストールして増設したドライブにもう一度 インストールし直したのがまずかったのかな???
>>598 質問者が同じ人だったら悪いけど…一応、前スレの最後の方で話題になってたよ
>>600 レスありがとうございます。
多分前スレ938の事だと思いますが、あれはMFCを使わないプログラムの
事だと思います。MFCのダイアログベースでのやり方を教えていただき
たいのですが。言葉足らずですみません。
602 :
名無し募集中。。。 :01/11/14 13:12
>>601 MFCというかウィザードでダイアログベースのアプリの場合でしょ?
出来上がったプロジェクトのrcファイルの中に↓みたいなのがあるからこれを書き換えなよ。
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
WX_EX_APPWINDOWEXSTYLE を WS_EX_TOOLWINDOW にするだけ。
別のやり方としてウィザードが作ったダイアログを消してから新規リソースでダイアログを
追加すればリソースのプロパティでTOOLウィンドウをチェックすればOKなんだけどね。
603 :
名無し募集中。。。 :01/11/14 13:14
訂正 WX_EX_APPWINDOW を WS_EX_TOOLWINDOW にするだけ。 簡単でしょ?
604 :
名無し募集中。。。 :01/11/14 13:21
念のため補足。TOOLWINDOWにするとタスクバーにアイコンが表示されなくなる。 その状態でShowWindow(SW_HIDE)すること。 ウィルスは作るなよ。
はじめまして。初心者質問ですみません。 よろしくお願いします。 ダイアログベースのプログラムで、メインのダイアログから 子ダイアログをDialogBox関数で呼び出した時、 子ダイアログがメインダイアログの外に出ないようにしたいのですが どうすればいいのでしょうか? ヘルプで探しても、私の探し方が悪いのか全然関係ないものばかりが 大量に検索されて全然見つかりません。 よろしくお願いします。
>>602 レスありがとうございます。
rcファイルのWS_EX_TOOLWINDOWに修正したのですが、たしかにタスクバーには
アイコンが出なくなったのですが、依然としてウィンドウは表示されたままです。
ShowWindow(SW_HIDE)を実行してもウィンドウは消えないのです。
起動時以外ならばうまくいくのですが、起動時だけはどうしてもうまくいきません。
>>606 起動時ってどのタイミングだ?
CWinApp::InitInstanceのタイミングだったら何をやっても無駄。
CDialog::InitDialogでもダメ。
最初のCDialog::OnPaintのタイミングでShowWindowすれば、
WM_EX_TOOLWINDOWに関わらず消えるはず。
ただし、一瞬だけ表示されるけどな。
608 :
デフォルトの名無しさん :01/11/14 15:32
>>605 DialogBox関数って何?MesageBoxじゃないの?
>>606 起動時だけ非表示にしたいのか?動作中ずっとじゃなくて?
どっちにしてもリージョンをいじればいいとおもうけどね。
>>594 おー、DT_MODIFYSTRINGの時だけ書き換えの可能性有りなのね。
const_cast使うしかないな。
ただのDrawTextで満足してたから気付かなかった。
VariantCopyは使う気ねーから(゚ε゚)キニシナイ!!
>>609 俺も DrawTextEx は滅多に使わないなぁ。VariantCopy は ATL の CComVariant とか介して使うのが
普通だから、こっちはまったく困らない。
Win32 API だと reinterpret_cast は多用せざるを得ないけど const_cast はほとんど必要ないと思う。
すいません。私の質問はあまりにも初心者過ぎてばからしくてレスする気が 起きないのか。それともそんな状況になったことがないからレスしようにもできない のかどちらか教えていただけませんか?
>>611 単に cl.exe にパスが通ってないんじゃ?
cl.exeがあるところにはpathが通ってるんですよ・・・・・。 その証拠にコマンドプロンプトでは普通にコンパイルできるんですよね。
[ツール]...[オプション]...[ディレクトリ]...実行ファイルパス
>>614 ありがとうございました。
関係ありそうなところをすべてインストールしたドライブに変更したところ
うまくいきました。
あなたはわたしにとって神です。
616 :
デフォルトの名無しさん :01/11/14 23:50
ボタンにBMPを貼り付けたいと思いこのまえ質問したのですが、 そのときの回答がHP猫でものオーナードロウボタンの項目だったのですが そこに載っていたのはボタンが1個の場合でした。 複数のボタンにそれぞれ違うBMPを貼り付ける場合のHPありませんか? もしくは、書きこみで教えてー
617 :
デフォルトの名無しさん :01/11/14 23:58
>616 BM_SETIMAGEメッセージを全部のボタンに送れごるぁ
>616 HBITMAP hb=LoadImage(............); HWND hbtn=GetDialogItem(hDlg,IDC_BUTTON1); SendMessage(hbtn,WM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)(HANDLE)hb); MFC?そんなものは知らん。
電卓のソースなど教えてください。 初心者なのでわからないこといっぱいで・・・
電卓買ってこい>619
電卓にはケチャップの方があう。
622 :
デフォルトの名無しさん :01/11/15 01:06
大きめの0ボタンあたりを塩焼きにすると、結構いけるよね。
説明ありがとう 助かりました。
説明ありがとう 助かりました。
626 :
デフォルトの名無しさん :01/11/15 01:29
デバッガのブレークポイントの追加と削除はポップアップメニューで出来ますが 現在のブレークポイントを全部無効にする方法ってありますか? 前回のブレークポイントを無効にし忘れていると関係無いところで停止してウザイです。 複数あると止まりまくりです。 なんとかなりませんか?
629 :
デフォルトの名無しさん :01/11/15 01:36
C言語を勉強しようと思ってVCを買ってはみたものの使い方がさっぱり・・・
高い勉強代だったな。 とりあえずチュートリアルでもやれ。
まずは「新しいプロジェクトの作成」の素振りを10回。これを10セット。 出来るようになったらフェイントも混ぜながら、もう10セット
その前にマウスの素振りを毎日千本ずつやっとけ。 休日もマウスをもってかえって素振りしとけ。
練習が終わったら、デスクトップの掃除とディレクトリの整理整頓。 ゴミ箱もちゃんと空にしておけよ。
ボタンを透かすってことできますか? 後ろのデスクトップやウィンドウが見えるようにしたいのです。
>>634 砂ケシを使うとか、セロテープを貼って剥がしてとか
ミカンの汁をつけて、ティッシュでこする。
もしくはBMPの選択したぶぶんだけを上と同じように 透かすことはできますか?(選択部分はまるとかじゃなく複雑なかたち)
638 :
デフォルトの名無しさん :01/11/15 04:19
下の画像を加工してボタンに貼りましょう。
639 :
デフォルトの名無しさん :01/11/15 04:20
>>637 も同じ。
マスクパターン作って下の画像を加工。
>>638 >>639 たびたびすいません、もうちょい詳しくお願いします。
まずはBMPのマスクパターンをつくることですよね。
そしてそのBMPの表示したくない部分はどうやったら
表示しないでウィンドウなどに貼り付けたりできるんで
しょうか?
つけたし ようはBMPの背景を消したい(透明に)ってことなんですが。 色々調べた結果BitBltの最後の値をどうにかするってことなんでしょうか?
642 :
デフォルトの名無しさん :01/11/15 04:56
なんだ、ひょっとして只の透明のことかな? それとも「丸い透明」というオブジェクトがあって、その下の絵が消えて 下の下の画像が見えるとか。
643 :
デフォルトの名無しさん :01/11/15 05:04
もし下の下の画像が見える透明オブジェクトの事なら 「下の画像を消す」という考えは捨てて 「下の画像の上に下の下の画像を書けば透明になったように見える」 という考えに切り替えましょう。 四角以外の形にする場合はマスクパターンが必要。 形が固定で移動しないモノなら下の下の画像から切りぬいて作った 別のBMPを書けば良い。 「擬似透明」という手法です。
644 :
デフォルトの名無しさん :01/11/15 05:05
ATLのCOMの初歩的な質問ですまんす。 あるCOMクラスCoにインターフェイスIAとインターフェイスIBを持たせるとしますよね。 ATLの場合CoをIAとIBから派生させることになりますよね? この場合、IAとIBに同じ名前のメソッドやプロパティを持たせようとすると 多重継承の問題からかVC++に蹴られてしまいます。 これはプロパティやメソッドというものは、あくまでCOMオブジェクトCoに属するものであり IAやIBに属するものでは無い、と認識しろという事なんでしょうか?
そうです。 変な形のウィンドウをつくりたいのですが その元としてBMPをつかってるのですがそのBMPそのまま で作ったら四角なのでその背景の部分が後ろを見える状態にしたい ってことです。
646 :
デフォルトの名無しさん :01/11/15 05:17
>>645 VCのリソースのBMPではやったことないなあ。
BMPファイル(VCのリソースのBMPとは別物)を読みこんで
PENで透明コードは書かない、という処理をしてた。
domo
>>645 ボタンじゃなくて、ウィンドウ自体を変な形にしたいなら、
googleで「非矩形ウィンドウ」で検索しよう。
だからリージョンをいじれって言ってるだろ・・・
651 :
デフォルトの名無しさん :01/11/15 11:34
flatなボタンを作りたいんですが、 できればヒントおしえてください。
普通に無理っぽいです。 MFCでいきます。
654 :
デフォルトの名無しさん :01/11/15 15:01
オーナードロウで 複数のボタンに複数のボタンを貼り付けできますか?
656 :
デフォルトの名無しさん :01/11/15 15:51
今年の夏にパソコン買いました。 インターネットをやって面白かったのですが最近飽きたのでプログラミングをやってみようと思いました。 VCが欲しかったのですが友人がJavaってのしか持ってなかったのでそれを貰いました。 プログラムするのにDOSというソフトが必要らしいのでインターネットで検索して探したんですが情報は結構あるんですがダウンロードできる場所が見つかりません。 何処でダウンロードできますか? メーリングリストで質問してみたのですが回答がもらえませんでした。 2チャンネルの人は詳しそうなので誰かダウンロード先を教えて頂けないでしょうか? パソコンはiMacのオレンジ色です。 プログラミングを勉強してインターネットのような便利なソフトを作って自分を馬鹿にしていた人達を見返してやろうと思っています。 マンガ喫茶でのバイトが終わってから見にくるのでそれまでに解凍していただけると嬉しいです。
>>656 1.まず、長くて丈夫な縄を用意します。
2.縄の先に直径30cmくらいの輪を作って結びます。
3.その輪を地上2mくらいの高さに吊します。
4.輪の中に頭を突っ込んで思い切りぶら下がってください。
>656 マジレスしてやる。ありがたく思え。appleのサイト逝って、 MRJとMRJ SDK拾ってきて入れろ。それで終わり。あ、それと、Mac ユーザって判っててWinのSDKくれた友達は切った方がいいよ(w
俺もこれくらい天然っぽいネタが書けるようになりたい。
今年の夏にパソコン買いました。 ↑ この一文だけでも文才があるな。ネタスレ立ててみれば?>656
661 :
デフォルトの名無しさん :01/11/15 19:04
インターネットのような便利なソフトを作って ↑ 芸術点加算
662 :
デフォルトの名無しさん :01/11/15 19:09
1時間ほど前からVC++を使い始めました(これまではg++でした)。 それで質問があるのですが、 class _PAPA; class _MAMA; class _MUSUKO; class _MUSUKO{ list<_PAPA>::iterator papa; list<_MAMA>::iterator mama; }; class _PAPA{ list<_MUSUKO> musuko_list; }; class _MAMA{ list<_PAPA>::iterator papa; list<_MUSUKO>::iterator musuko; }; という感じの記述がg++ではさっくりコンパイルできたのですが、 VC++では『コンパイルされたクラスのテンプレートのインスタンス化が云々・・・』という エラーが出て通りません。なぜ駄目なのかはなんとなく分かるんですが (こうだ!という説明はできませんが・・・)、g++で通るのでなんとか このままVC++でも通せないかと淡い期待をしています。 なんとかならんもんでしょうか。
663 :
デフォルトの名無しさん :01/11/15 19:11
パソコンはiMacのオレンジ色です。 ↑ ケースの色をさりげなく披露している。 ボンダイブルーでないところで、さらに芸術点加算
665 :
デフォルトの名無しさん :01/11/15 19:17
>>664 やはり偉大な先人というものはどの分野にもいるものだな
666 :
デフォルトの名無しさん :01/11/15 19:21
>インターネットで検索して探したんですが >メーリングリストで質問してみたのですが ここで質問する前に試行錯誤のあとが見られる。 技術点も加算。 これはかなりの高得点が期待される。
656の後というのはタイミング悪かった・・・。 ついでにもう一つ質問があります。 for(int i=0; i<10; ++i) hogehoge(i); for(int i=0; i<10; ++i) hogehoge2(i); という記述は、iが二重に宣言されてると言われて VC++ではエラーになります。g++では通るのに。 変数のスコープ違うんですか。もういやん。 (g++がゆるいのかな。-Wallでも警告出ないのに。)
>>667 それはVCがクロです。古い仕様に基づいてるんで。
>>662 はクラスが無限ネストしてるから。
iteratorがポインタだと限らない。
>>667 はVCが古いからそういうことになってるだけ。
#define if (0) ; else for
このマクロで回避
どうもありがとう。
>>667 の件は了解です。自分のせいなのかコンパイラのせいなのか
判らないのが一番辛いので、こうはっきり言ってもらえると助かります。
>>662 の件はやはり設計から考え直さないといけないのでしょうか。うぅぅ。
そこをなんとか・・・。(この場合はg++の方がいい加減ということですね?)
VC++で作ったプログラムをdosモードで動かそうとしたのですが、 このプログラムは実行できないと表示されてしまいました。 dosモードでの実行は出来ないものなんですか?出来ると したらどのような方法があるのでしょうか?
>>671 32bitプログラムはDOSモードでは実行できない。
VCでは32bitプログラムしか作れない。
>>672 2行目は明らかに間違ってるぞ。
VCでもDOSアプリは作れるって。
>>673 VC++1.51までな。
いっとくけど、コンソールアプリ!=DOSアプリだからな。
>>670 もし、単に papa, mama が参照できれば良いのなら
class _MUSUKO {
_PAPA* papa;
_MAMA* mama;
};
iterator 必須ならポインタにする。解放し忘れるのを防ぐため auto_ptr にしておくと吉。
class _MUSUKO {
auto_ptr<list<_PAPA>::iterator> papa;
auto_ptr<list<_MAMA>::iterator> mama;
};
どうでもいいが _PAPA, _MAMA, _MUSUKO なんていうのは属性であって、それ自身をクラス化する
対象ではない気がする。たとえばゲルマニクスのインスタンスを作ると、カリグラの父でありドルスス
の息子ということで、_MUSUKO と _PAPA を多重継承するのか?
むしろ
class Person {
Person* father;
Person* mother;
list<Person*> childs;
};
とでもモデル化したほうが良いと思うが。
>>669 そんなマクロ始めてみた。便利そうだ。貰うYO。
小一時間程ジョギングしてきました。
>>676 さん詳細有難う。
今晩の宿題にしてみます。
>>675 どうでもいいが childs じゃなくて children だね(w
681 :
デフォルトの名無しさん :01/11/15 22:43
VC++ でVBのGridのACTIVE X を開発しようと おもうのですが、できれば文化オリエントの Spreadみたいなのを開発したい。 可能ですか?
682 :
デフォルトの名無しさん :01/11/15 23:17
↓この例外処理ってMFCじゃないと駄目っすか? try{ ・ ・ ・ }catch(CException* e){ ・ ・ ・ ・ }
683 :
デフォルトの名無しさん :01/11/16 09:12
>>662 class _PAPA に
list<_MAMA>::iterator mama;
が抜けています。
684 :
デフォルトの名無しさん :01/11/16 12:35
>>682 CException が MFC クラスなんで、当然ダメっす。
>>681 VC++には可能。君に出来るかどうかは知らん。
>>682 自分でCExceptionを定義すれば可能(笑
つぅか、682はC++の入門書買えって。
ウインドウコントロールを自作したいのですが。 class OriginalTextBox{ HWND hwnd; public: OriginalTextBox(HINSTANCE hInstance,HWND hPWnd,char* classname); static LRESULT CALLBACK WndProc(.....); } 宣言はこうやっているのですが、こうやってやるものですか? あとはプロシージャで振る舞いを定義すればよいのですか?
688 :
デフォルトの名無しさん :01/11/17 00:02
#define if (0) ; else for この意味教えてもらえませんか?
689 :
デフォルトの名無しさん :01/11/17 00:08
>>688 #define for if(0);else for
じゃないのか?
ワラタ
691 :
デフォルトの名無しさん :01/11/17 01:02
>>688 意味はねえ〜、VC++6.0のバグを回避するおまじないだよ
VC++でアプリを作っていると、非常にしばしば、ファイルが壊れて、プロジェクトが台無しになるんですが、どうにかなりませんか? 今日は、WinMainのLoadStringから上全部が意味不明なパスに置き換わり、氏にました。 クソです。
>692 漏れはなったこと無い。まずは自分の環境を疑え。これ鉄則。
>>692 こわー
忌まんと子経験内が
他に経験社員の?
自作パソコンが
不安定とかじゃなくて?
>>692 そんな経験ないなぁ。
VC++のバージョンは?サービスパックインストールしてる?
なんとなく他に原因がありそうな気がするが。
NTなのにいきなり電源落としてるとか。
環境はWin2k+DELLのノーぱソです。 その前は重要なクラスのcppが消失しました。 >695 そういえば今日は、ビルド直後、そのアプリのせいで2kが落ちました。それで電源切りました。 なぜNTだとまずいんですか?
漏れはVC5のプロジェクトをVC6で開くと、VCがページ違反で落ちる。(Win98で) 漏れの環境だけかなあ。ちなみに、マシンは98。
>>692 知識もないのに、クロックアップとかしてんだろ。
コンパイラは処理きついんだから、マージン食いつぶせばそうなる。
コンパイル環境はVC++6.0 proです。サービスパックはいれてません。 >698 DELL出荷時の設定そのままです。
>>696 win2kだと、たまにあるよ。
プロジェクトの入ってるディレクトリをIEで開きっぱなしにしてると、
ビルド時におかしなことになりやすい。
SP最新のを当ててもダメ。
IEをこまめに閉じておけば、かなり確率が減る。
まあ、それとは別に、
backup用のバッチを書いて、ことあるごとに
ぽちぽちバックアップすることを勧めるよ。
やっぱり、ありますか。 >IE開きっぱなしで消える 何が原因なんでしょう。VCとIEにどんな因果関係が?
ビルド開始 ↓ ファイルの自動保存が走る ↓ クラスブラウザがソースを舐めはじめる ↓ VCがディレクトリを変な形でロックする ↓ IEが更新を察知してなんか表示しようとする ↓ ソースブラウザの更新作業とか ぐるぐるマウスとかIMEとかウイルスチェッカとか いろんなのが同時になんかしようとして固まる ↓ なぜかファイル消える ↓ Σ(゚д゚lll)ガーン
いやーなるほど、納得しました。 これからは用心して開発を行います。 どうもありがとうございました。
705 :
デフォルトの名無しさん :01/11/17 02:31
>VCがディレクトリを変な形でロックする そうなんだよー、これかなり痛い 俺もこれが原因でたまにVCが逝きます 逆にコンパイル中でもファイル編集できるから便利つっちゃー便利なんだけど
>>696 > その前は重要なクラスのcppが消失しました。
Win2k + VC6 だけど、たまにあるな、これ。あとファイルを書き換えてからビルドしようとすると「ファイルが
書込み禁止です」と怒られ、もう一度ビルドを実行すると通ったり。
いずれにせよ、バージョン管理ツールを使ってこまめにリポジトリに登録していれば、ファイルが消えた場
合の被害は極小に抑えられます。VSS か CVS + Igloo (CVS の VS 用 plugin) あたりを導入することを
強くお勧め。
Igloo
http://www.jalindi.com/igloo/
Win2kは気難しいんだね。 XPだとどうなんだろ?Meからアップグレード予定なんだけど。
2kのFATはいろいろとヤバげ。NTFS5もヤバげ。
だが、NT系列以外で開発する気はゼロ
俺はWin98で十分。 VC++立ち上げると禿げしくリソース消費するのは痛いが。 MSDN、DirectXヘルプ、VC++でシステムリソースの残りが10%以下だったり。 XP導入しようかと思ってたけど、このスレ読んでたら不安になってきた。
FAT上で開発しようというその気が知れない。
712 :
デフォルトの名無しさん :01/11/17 20:56
VC++6.0プロフェッショナル使用しているのですが、サービスパックが当たっているか どうかを知るにはどこを見たらよいのでしょうか?
>>712 cl.exe のバージョンを見る、とか?
12.0.8804.0ってなってました。ファイルの日付は2000年3月14日です。 SP2はたしか2001年4月ぐらいでしたよね?となると全然当たってないって こと?
>714 漏れSP5当ててるけど、cl.exeはそのバージョンだったYO
>>715 スマソ、ちなみに VC98\Lib\WS2_32 は98年5月13日とかになってます?
とりあえず別の実装方法を試そうと思い、 以下のようなものを書きました。 #include <list> #include <memory> using namespace std; class _musuko{}; int main(int argc, char **argv) { list< auto_ptr<_musuko> > mlist; mlist.push_back(auto_ptr<_musuko>(new _musuko)); return(0); } すると今度はVC++ではさっくり通りましたが g++でコンパイルしようとすると /usr/include/g++-3/stl_construct.h: In function `void construct<auto_ptr<_musuko>, auto_ptr<_musuko> >(auto_ptr<_musuko> *, const auto_ptr<_musuko> &)': /usr/include/g++-3/stl_list.h:293: instantiated from `list<auto_ptr<_musuko>, allocator<auto_ptr<_musuko> > >::_M_create_node(const auto_ptr<_musuko> &)' ・・・ のようにごそっとエラーが来ます。 何を信じればいいんでしょうか;;。 #書き方が悪いのは自覚しているんですが・・・。
auto_ptrをコンテナの中に入れちゃダメだよ
auto_ptr同士のコピー同士は等しくない。 listやvectorがauto_ptrを内部でコピーしないという 保証はない。 ツーか、vectorなんか確実にコピーする。 sortなんかのアルゴリズムを適用したときどうなるか ない知恵を絞って考えてミロ。
>>720 言いたいことが良く分からんので、ちょっと分かりやすいように書き直していただけません?
> 23 Containers library
> 23.1 Container requirements
> 3 The type of objects stored in these components must meet the requirements of CopyConstructible
> types (20.1.3), and the additional requirements of Assignable types.
> Assignable types
> -------------------------------
> expression : t = u
> return type : T&
> post-condition: t is equivalent to u
これの post-condition に抵触すると言いたいのかなぁ。
> sortなんかのアルゴリズムを適用したときどうなるか
> ない知恵を絞って考えてミロ。
すくなくとも auto_ptr なら
tmp = b;
b = a;
a = tmp;
みたいなコードは、問題ないよね。
>>720 ということはこの場合はコンパイルが通ってしまう
VC++の方がゆるいということでしょうか。
それともg++が親切なのかな。
でも
list<_musuko*> mlist;
mlist.push_back(new _musuko);
これは解放が面倒でうれしくないなぁ・・・。
でもポインタのリストにしないと
class _musuko;
typedef list<_musuko> _musuko_list; // 実体のリストの場合
typedef _musuko_list::iterator _musuko_itr; // (*1)
class _musuko{ ... };
(*1)のところでVC++がコンパイル通してくれないし(g++は通る)・・・。
はふぅ。
Effective STL の Item 8 に "Never create containers of auto_ptr s" ってのを見つけた。 読んだらまとめ書くよ。
>>722 > ということはこの場合はコンパイルが通ってしまう
> VC++の方がゆるいということでしょうか。
ということらしい。
実際 sort() の中で値をコピーして使ってる実装もあって、それだと sort() した結果として値が壊れて
しまう。回避策としては、所有権を管理する auto_ptr ではなく、参照回数計測で管理するスマートポイ
ンタ (たとえば Boost.org にある boost::shared_ptr とか) を使えば OK とのこと。
Boost.org
http://www.boost.org/boost/
725 :
デフォルトの名無しさん :01/11/18 19:12
効率よくHDに書き込みしたいのですが、 put(char*) よりも write(const char *buf,int streamsize num) を使ったほうがいいんですよね? その時、num(バッファサイズ)はどれくらいがいいのでしょうか? 環境はVC++6.0です
なんでWin32APIつかわないの?
あぼーん
728 :
デフォルトの名無しさん :01/11/18 19:53
ブラウザのFORMでファイルをサーバにアップロードするのと同じこと をするクライアントのプログラムを作りたいのですが、POSTメソッド で接続しないといけないようです。しかし、POSTでのパラメータの送 信の仕方がわかりません・・・・。(かなり初心者・・・) 教えていただけませんでしょうか。あるいは参考書籍を。。。
729 :
デフォルトの名無しさん :01/11/18 21:26
>>726 Win32API使っても、それをラップしたクラスを使っても
変わらないだろ
というかネタか?
ブラウザを作ろうと思い、 アクティブX(?)のMicrosoft Web Browserを貼り付けたのですが、 これって他の人に配布してもちゃんと動くのでしょうか?
age
732 :
デフォルトの名無しさん :01/11/19 07:18
>>730 IE4.0以上が入っていれば大丈夫だと思うっす。
>>725 MemoryMappedFileを使うと速くなるらしい。
API質問スレを検索してね。
>>721 ありがとう〜。そのスジで検討してみます。
>>728 居れも初心者で厨房発言かもしれないでど
ポート80のhttpのプロコトル無視したサーバープログラム組んでみそ。
そしてブラウザで
<form action="
http://localhost " method=post>
<input ,,,,,,
</form>
とゆう具合にアクセスしてみ
ブラウザどのようにサーバーとやり取りしてるかわかるから。
おまえは次に「RFCってなんですか?」と言う!
すみません、プロトコルが分からないのではなく、VCの使い方がわからないのです・・・。 AddRequestHeaders()でヘッダーは変えるとして、送るデータはどうしたら・・・?
740 :
デフォルトの名無しさん :01/11/19 16:01
>>739 プロトコルがわかってるなら、CAsyncSocketでも使ったほうが
てっとり早くないか?
どうしてsocket使わないんですか?(既出?)
お返事ありがとうございます。 これってデータを丸ごと送るってことでしょうか・・・? POST /cgi-bin/XXX.cgi HTTP/1.0 Referer: http...... : : ・・・と。 サンプルのプログラムに「TEAR」ってのがあって、それをPOSTで出来るようにすれば 簡単かなと思ったもので。CAsyncSocket これって難しそう・・・・。
そこでは、こんな風にやっていて、 pServer = session.GetHttpConnection(strServerName, nPort); pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject); pFile->AddRequestHeaders(szHeaders); pFile->SendRequest(); pFile->QueryInfoStatusCode(dwRet); これをPOSTにして、ヘッダーを変えて、あとはmultipartのデータを送ればいいん だと思ったんですが。。。VCもネットワークもそれほど詳しくないので、これが 一番簡単に思えたんです・・・・。
744 :
デフォルトの名無しさん :01/11/19 17:45
前にカキコしてたらごめんなさい。 メールソフトのソースを載せているHPってありますか?猫でもはみました。
RFCとtelnetがあれば解析できるよ。
f
747 :
デフォルトの名無しさん :01/11/19 19:28
クリップボードチェインのやり方教えてください。 SetClipboardViewerで登録、ChangeClipboardChainで削除は分かるんですが WM_DRAWCLIPBOARDとWM_CHANGECBCHAINの処理が分かりません。 次のウィンドウにメッセージを渡すらしいですが次のウィンドウがNULLの場合 (SetClipboardViewerで次のウィンドウがない場合はNULLが返るらしい) でもNULLを指定してSendMessageを呼ぶのですか? WM_DRAWCLIPBOARDとWM_CHANGECBCHAINで渡されたWPARAMとLPARAMをそのまま次のウィンドウに送っていいんですか? MSDNのサンプルはMFCのものしかないので分かりません。 知ってる人教えて。
__int64形式の数値を10進数で文字列に変換するAPIってないですか?
APIはどうだかしらんがsprintf系でいけるぞ
750 :
デフォルトの名無しさん :01/11/20 03:40
プロセスハンドルについて教えてください。 OpenProcessで別のプロセスのハンドルを取得した場合にハンドルの対象のプロセスが終了したあとでもOpenProcessが返したハンドルは有効ですか? しばらくしたら同じハンドル値で別のプログラムが動いているなんてことありますか? WaitForSingleObjectでプロセスが終了されているかの判定を行う場合にOpenProcessのハンドルが別のプロセスで再利用されて正常に調べられないなんてことありますか?
>>747 APIヘルプには生APIで載っているよ。
752 :
デフォルトの名無しさん :01/11/20 07:17
ウィンドウプログラムが終了する場合必ずWM_DESTROYが送られますか? 強制終了させたりページ違反で落としてみましたがどうやらWM_DESTROYが送られてから終了しているようです。 「ウィンドウズの終了」を行った場合は送られないらしいですが、それ以外の場合(単一のプログラムが何らかの理由で終了する場合)は必ずWM_DESTROYが送られてくると思っていいですか?
>>752 while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
if(なんか) break;
}
こんな場合でも送られる?
>>752 たんに終了時に必ず実行させたい処理があるだけなら、__finallyを使うとえぇよ。
>>750 ハンドルを CloseHandle するまでは大丈夫です
756 :
デフォルトの名無しさん :01/11/20 12:01
5つの整数を入力して、例えば、2.4.2.3.1の場合 * * * **** ***** のようの表示するように書くプログラミングの問題がわかりません。 これの横バージョンはできたのですが・・・ 配列を使ってやるらしいですが考えてもわからないので、返答マジで頼みます。
>>756 左上が原点になるからややこしく感じるのだろう。
配列の中から最大値を見つけてY軸の上限を算出。
その最大値を初期値とする変数をデクリメントさせて、
描画の条件とする。
>>756 その場合に限って言えば、5×4の配列を仮想VRAMとして値を設定したあと
1行ずつスキャンして表示。一般化は自分で考えれ。
ずれてるのによく分かるな
760 :
デフォルトの名無しさん :01/11/20 17:24
質問です。 あるアドレスの領域を、参照したり書き込んだりしているコードを ピックアップすることは可能でしょうか? また、VCでは出来なくても何かツールがあればできそうでしょうか? 教えてください。
761 :
デフォルトの名無しさん :01/11/20 18:15
>>760 デバッガで停止条件に特定アドレスの変更とか設定できたと思ったが
そういう事をいってるのか?
HeapWalkerみたいなことをいってるのか?
763 :
デフォルトの名無しさん :01/11/20 18:17
>>761 検索が完了しましたが、何も見つかりませんでした。
764 :
デフォルトの名無しさん :01/11/20 18:23
>>762 そういうことをいってます。VCでできるのでしょうか・・・?
>>763 SDKツールをすべてインストールしなさい。
767 :
デフォルトの名無しさん :01/11/20 22:07
windows.hって #include <windef.h> #include <winbase.h> #include <wingdi.h> #include <winuser.h> ・・・ ってな感じで、他のヘッダーインクルードしまくってるけど どういう目的で使えばいいの よく使うヘッダー盛り合わせみたいに、面倒な場合に使うの? これインクルードすると、コンパイル時間が長くなったりする?
普通はwindows.hだけでよい。 足りないと言われたらはじめて追加のインクルードファイルを取り込みなさい。 蛇足だけどwindowsx.hはいれとくと便利だよ。
>>767 <windef.h> とかは個別に include せず <windows.h> だけ読み込むのが普通。読み込むヘッダを
減らしたい場合には WIN32_LEAN_AND_MEAN を定義しておく。
> これインクルードすると、コンパイル時間が長くなったりする?
<windows.h> はプリコンパイルしておく (StdAfx.h に書いておく) のがお勧め。
>>768 windowsx.hは便利だけど、中身見ないと使い方が分からないよね。
中身見て覚えろ
>>768 C++ の場合には WTL いれて <atlmisc.h> とかも便利。
Windowsのカレントディレクトリは、プロセスごとに持っているものでしょうか? アプリケーション実行中に、他のアプリケーションがカレントディレクトリを変更しても、 既に起動してあるプロセスへは影響ありませんか?
774 :
デフォルトの名無しさん :01/11/21 14:22
age
775 :
デフォルトの名無しさん :01/11/21 14:38
>>773 カレントディレクトリは、プロセスごとに別々だと思う。
というか、実験すればいいじゃん。
>>773 もちろんカレントディレクトリは別々だけども、カレントディレクトリ=EXEのある
ディレクトリという仮定は成り立たないから、iniファイルなんかはフルパスで扱う
のがWindowsの常識。
実験してもそれがWin32の仕様として正しいのか判断できないじゃん。 9x系でMapViewOfFile()が返してくるポインタがプロセス共通だということが 実験で判っても間違った使い方だし。
778 :
デフォルトの名無しさん :01/11/21 19:11
VisualC++ver6.0ではgraph.hは使えないのですか?
ショートカットで実行したらカレントディレクトリはショートカットがある 場所だよ。それにCreateProcessでも指定できるし
ありがとうございました。 起動時のカレントディレクトリは問題ありません。 ファイラを作っているのですが、ディレクトリエントリ一覧を得るのに、 絶対パスで指定しているのではなく、カレントから一覧を得る仕様にするつもりだったので、 この仕様だと、更新したときに他のアプリによってカレントを変更されると問題があるので、 不安だったから質問しました。 追加で質問ですが、 Dドライブで作業している間は、Cドライブのカレントも保存されているのでしょうか? 実験した限りは問題なさそうですが、心配なので。 自分で保存しておけばいいのかもしれないですが、 なるべくならデフォルトの動作に従わせたいので。
>>779 おいおい、ショートカットに実行するディレクトリの指定があるだろうよ...
>>777 正確さを求めるなら、ここで聞くのも実験するのも大差ないよ。
実際、「カレントディレクトリがプロセスごとに違う」って、
根拠を示してる人は、いないじゃん。
カレントディレクトリとかフルパスとかの概念を正確に
把握してないような人も回答してるし。
>>780 MS-DOS ではカレントディレクトリはドライブごとにあったけど、
NT では全体でひとつだったと思われ。
だから NT と Win9x/ME で違うんじゃないかな?
>>783 MSDNのGetCurrentDirectoryにプロセスのカレントディレクトリを返すって書いてあるだろ。
NTの解説書かナニカに、プロセスの持つ情報としてカレントディレクトリも入ってたな。
特にスレッドの〜って、書いてないんだし、プロセスのでいいんでないの?
>>783 > 正確さを求めるなら、ここで聞くのも実験するのも大差ないよ。
そのためのマニュアルなんだけどね。
マニュアルも間違ってたりするのが鬱。
>>780 > ファイラを作っているのですが、ディレクトリエントリ一覧を得るのに、
ライバル出現の予感。
> Dドライブで作業している間は、Cドライブのカレントも保存されているのでしょうか?
_chdir()で変更してれば大丈夫。
NT系ドライブごとに覚えていないので、環境変数に各ドライブのカレントディレクトリを保持することで再現してる。
カレントディレクトリが \\hoge\hage\voke なんてこともあるしからドライブごとに気にする必要は感じないけど。
>>780 ついでに言うと、コモンダイアログなんか使うと勝手にカレントディレクトリを
変えてくれるので注意。
さらに言うと、意図的にやれば他のプロセスのカレントディレクトリを変えることも できるけど、そんなことまで気にする必要はないよね。 あと、パス解析はできるだけ自前のルーチンよりも、標準ライブラリとかAPIを使っ た方がいいよ。フォルダ名に日本語が使えない英語ソフトを使ってムカついた事が あるなら分かるかと。
791 :
デフォルトの名無しさん :01/11/22 09:35
現在VC++6にて、常駐型のユーティリティーを作成していますが、 もともとウィンドウを持たないプログラムでした。 ところが、WM_DEVICECHANGEを受け取る必要がでてきまして、これが 上手く受け取れませんでした。 いろいろ調べてみると、どうやらウィンドウだと簡単に受け取れるよ うなので、試してみるとその通りでした。 そこで質問なのですが、このような場合、 1.表示はさせないウィンドウを作成しそこでメッセージを受け取る 2.他で動いてるウィンドウを適当に一つ狙って、そこにシステムフ ックをかける 以上二つの方法を考えたのですが、どちらがよりスマートなのでしょ うか? もし他に良い方法があれば、ぜひご教授ください。
792 :
デフォルトの名無しさん :01/11/22 09:36
DOS窓のコンソールプログラムで マウスの右クリックで処理を中断したいのですが どうしたらよいでしょうか? もしくはコンテキストメニュー表示するにはどうしたらよいでしょうか? お願いします
793 :
デフォルトの名無しさん :01/11/22 09:47
>>792 DOS窓でマウスを使うつもりなんだ・・・・
794 :
デフォルトの名無しさん :01/11/22 09:48
>>792 printf("Ctrl+Cを押せ\n");
じゃだめなの?
796 :
デフォルトの名無しさん :01/11/22 10:33
DOS窓でpopd,pushdもどきをやろうとして _system("cd foo"); とかやってもプログラムが終了すると、もとのディレクトリ に戻っちゃうんですが、カレントディレクトリを移動して そのままにするのはどうしたらいいんですか?
797 :
デフォルトの名無しさん :01/11/22 10:37
>>796 その問題とは関係ないけど、
_system()じゃなくてsystem()にしろよ。
>>795 ではそれでいきます。
これで安心して書けそうです。
ありがとうございました。
>>796 CDとか一部のDOS内部コマンドはプログラムの方でカバーすべし。
CGIでshell作ったとき俺はそうした。
>>793 mouse.comとかまだあるんかいな?
なければドライバからコーディングし直し。
あればint86()の使い方くらいは習得してね。
コンテキストは自前で描画。
DOS APIはGUIなんぞ考慮していない。
DOS時代のBorlandのコンパイラは、キャラクタベースで ウインドウを扱うライブラリがついてたんだけどね。 もう手に入らないかな?
>>799 shell作って内部で完結しろってこと?
ぢつはそれも考えてたんだけど、ヘタレのオイラには
ハードル高すぎ。
nyadosってDOS窓用のシェルがtcshライクで気に入って
使わせてもらってるんだが、pushd, popdがあれば
より便利だろうと思って自作しようとしたのだが。
ソースも付いてるんで改造しようとも思ったのだが
TurboCの独自クラスを使ってるのでVC++,GCCやBorlandC++で
はコンパイルできないしで、どうしようかと。
ちなみに作ろうとしているpushd, popdはテンポラリファイルに
ディレクトリの絶対パスを記録しておくという簡易なものです。
>>802 それなら、本物の tcsh 使えば良いのでは? Win32 native, Cygwin 両方あるぞ (native はヒープ管理
まわりでクリティカルなバグがあるから、あまり勧めんが)。
>>804 ありがとう(^^)/
でもね、でもね、それも知ってはいるし(一時期使っても板)のですが
C言語学習の一環として自分で作ることにしたのです。
せっかく教えてくれたのにスマソ〜。
system関数もカレントディレクトリを変更する関数_chgdir
(だったかな?今、別のマシンでアクセスしてて手元にソースが
ないんで正確な関数名は書けないんです)でも
プログラムが動作中は変更できるんですが、終了後には
もとのディレクトリに戻っちゃうんですよねえ。これは
DOSがこういう仕様とあきらめた方がいいかも新米。
簡単にできるなら、それこそ「nyados」でもpushd,popdを
とっくの昔に実装しているだろうし。
#今ネットカフェなんで803のリンク先の圧縮ファイルが
解凍できないんでやんの(自嘲。
>>805 仕様だな。
そういえばDOS使ってて終了時にディレクトリ移動してました♪とかはなかった。
こんなバッチファイルは?
popd.bat
@echo off
pop.exe
popdtmp.bat
del popdtmp.bat
で、pop.exeでpoptmp.batにcdコマンドを書けば・・・。
>>806 おお!そんな方法があったとわ!
ありがとうございます。誠にありがとうございます。
>>806 > そういえばDOS使ってて終了時にディレクトリ移動してました♪とかはなかった。
FDとかって終了時にディレクトリ変えてくれるじゃん。
Win32だとできないのかな。
>>808 自分もDOS時代に使っていたFDのその記憶があったんで
WinのDOS窓でも出来ないかなあ?と、少しあがいてみました。
810 :
デフォルトの名無しさん :01/11/22 15:33
クラスビューに飛ぶショートカットキーがあれば教えてください。
キーボードマップでActiveWorkspaceWindowを探して見ろ。
812 :
ふしあなさん :01/11/22 15:42
中が塗りつぶされていない円を描画したいのですが、 標準でそんな関数ありますか?
813 :
デフォルトの名無しさん :01/11/22 15:46
>>812 SelectObject(hdc, GetStockObject(NULL_BRUSH) )
してから円を書いてみろ。
814 :
デフォルトの名無しさん :01/11/22 15:46
標準のブラウザ&メーラーを取得するにはどうしたらいいですか? レジストリを使う気がしますがどのキーを調べたらいいですか?
815 :
デフォルトの名無しさん :01/11/22 15:46
816 :
デフォルトの名無しさん :01/11/22 15:54
インテリセンスの入力候補のリストって編集できないんですか? ::で出てくるグローバルなやつ。
>817 はぁ、そういうわけですか。そりゃそうですな。 例えば、FillMemoryとかが、::で出てこなくて、おかしいなと思ったんですが、 ヘッダを調べると、なんとなく訳が分かりました。
補足情報 以下の記事では、特に MFC アプリケーションを中心として、メモリ リークのデバッグについて論じています。 1997 年 11 月 Pinnacle Publishing 発行、Mike Blasczak 著、『Visual C++ Developer』の「Stunt Debugging: Diagnosing Memory Leaks」 以下の書籍はメモリ リークのデバッグにはまったく関係ありませんが、ホワイトペーパーを書いていて、昔の中国の哲学者の言葉を引用したいと思っている読者には役に立つかもしれません。 孫子著『兵法』、取扱出版社多数。 microsoftの正規のVC++ページなんだけど、この「兵法」 の紹介って、なにかの凄いギャグなのかな・・・・
820 :
デフォルトの名無しさん :01/11/22 17:55
821 :
デフォルトの名無しさん :01/11/22 18:17
またまた質問なんですけど、DLLでシステムフックをかけてる場合、 メインのプログラムが終了する時にフックを外しに行かなければだめな ものなのでしょうか?(Winプログラムのお作法的に) ちなみに、メイン実行中はずっとかけっぱなしにする必要があるのです。
>>792 DOS窓って、DOS用アプリケーションをWinで動かしたいのか、それともただの
Win32コンソールアプリケーションなのかによって全然違うよ。
後者なら、普通のGUIアプリケーションでできる事は何でもできるけど。
823 :
デフォルトの名無しさん :01/11/23 06:54
ファイルのアイコンを取得するには SHGetFileInfo で出来ますが 拡張子に関連付けられているアイコンはどうやって取得したらいいですか? 具体的なファイル名 c:\readme.txt のようなものは無く単に txt といった拡張子のみでアイコンを取得したいです。
824 :
デフォルトの名無しさん :01/11/23 06:54
FILETIME や SYSTEMTIME は何年まで正常に扱えますか? FILETIME は64ビットで1601年から始まるらしいですけど。
825 :
デフォルトの名無しさん :01/11/23 06:56
リストビューにImageListをセットするとリストビューが破棄されるときにImageListが破棄されてしまいます。 リストビューが破棄されてもImageListが有効な状態にするにはどうしたらいいですか?
>>825 ImageListを切り離してからリストビューを破棄すれば良いのでは?
828 :
デフォルトの名無しさん :01/11/23 09:45
>>821 「グローバルフック」ですね。
フックをかけたら、あとでちゃんと外しておかないと、
リソースを漏らしちゃう結果になると思います。
ちなみにグローバルフックのかけっぱなしは、あまり感心しません。
よくシステムを不安定にさせる原因になりますから。
>>824 計算してみればすぐわかる
定義は1601年1月1日からの100ナノ秒毎のカウント
リソースエディタで「共有イメージリスト」ってのをチェックしたら破棄されないようになりました。
831 :
デフォルトの名無しさん :01/11/23 11:59
Cで20桁くらいの整数の計算をしたいのですが できますか?
#include <Ruby.h>
>>831 こういうのって出来ないわけはないでしょ。
簡単にやるための方法なら、標準的な方法はない。
環境が何か知らないが多倍長演算のライブラリを探せばいいと思うよ。
>>831 VCなら、__int64 をMSDNで調べてみそ。
一般的なANSI Cならlong long。
MFCなんですが、スケルトン作って実行したときWindowの上のバーにでる文字ってありますよね? あれ変えたいんですが・・・ project名-無題 のようになってますね、、、はじめ
>>836 CDocument::SetTitle
>>837 あ、ありがとうございます!!できました。
839 :
デフォルトの名無しさん :01/11/23 22:45
指定された出力ポートにデータを送るのに _outp、_outpw、_outpdのルーチンがありますが これはWin9x系のみ動作するみたいですけど NT系はだめみたいなので、NT系で出力ポートに データを送る方法はないでしょうか?
841 :
デフォルトの名無しさん :01/11/24 15:44
publicメソッドをinline指定すると 「外部参照 1 が未解決です。」 といわれてしまいます。 privateメソッドや、ヘッダに実装を書けばOKなのですが、 どうしたらpublicメソッドをinline指定しつつビルドできるのでしょうか?
class定義の中にpublicメソッドの定義も入れとけ。
呼び出すところから実装が見えれば、どこに書いてもいいよ。
inline指定が有れば、一緒のヘッダか .inl にでもいれとけばよいか。 hmm
845 :
デフォルトの名無しさん :01/11/24 18:55
VC++で例外ハンドリングをしたいのですが 「warning C4290: C++ の例外の指定は無視されます。」 という警告がコンパイル時にでます。 ソースコードでは コンストラクタ() throw (Exception){ if(1)throw new Exception } とやっているのですが コンストラクタは例外を投げられないのでしょうか?
みなさん、ありがとうです。
>>844 それが一番スマートですかね。
ちょっとくらいなら、ヘッダに書いても良いと思うのですが、
大量のコードを記述したくないな、と思ったので。
>>845 例外指定を外せばいい
constructor() {
if(1) throw new Exception;
}
日本語のwindowsのメニューのフォントは MS ゴシックでしょうか? 標準の設定時のフォントの大きさは12ポイントぐらい ですか?
849 :
デフォルトの名無しさん :01/11/24 21:07
>>848 Win95/98/NTは「MS Pゴシック」
Win98SE/Me/2000は「MS UI Gothic」
の9ポイントだと思われ(標準では)
850 :
デフォルトの名無しさん :01/11/24 21:15
>>849 ってゆーか、
要するにどのバージョンの IE がインストールされてるか…じゃなかったっけ?
>>849 ありがとうございます。
9ポイントですか、意外と小さいですね。
>>850 IEがフォントを換えてしまうんですか?
852 :
デフォルトの名無しさん :01/11/24 21:38
>>845 > コンストラクタ() throw (Exception){
のような、送出する例外の指定は対応してないから無視しますよ
っていうメッセージです。
何を指定してもどんな例外でも投げれます。
856 :
初心者一郎 :01/11/24 22:58
MFCのClassWizardのメッセージ一覧に出てこないメッセージを処理する場合 、OnXXXX()内で継承元のOnXXXX()を呼ぶ必要があるかどうか、又自分の書い たロジックの前で呼ぶのか、後で呼ぶのかは、何で判断すればよろしいのでし ょうか? 具体的には ・OnTimerの場合 void CMyDialog::OnTimer(UINT nIDEvent) { // TODO: この位置にメッセージ ハンドラ用・・・・ CDialog::OnTimer(nIDEvent); } ・OnDestroyの場合 void CMyDialog::OnDestroy() { CDialog::OnDestroy(); // TODO: この位置にメッセージ ハンドラ用・・・・ } 上記の場合は MFCが自動的に生成する為、何も考えなくて良いが 例えば OnNcHitTestの場合 UINT CMyDialog::OnNcHitTest(CPoint point) { 自分のロジックの場所?? <--ここに書く? CMyDialog::OnNcHitTest( point );<--必要、不要 ? 自分のロジックの場所?? <--それともここ? return xxxx; } 長くなりましたが宜しくお願い致します。
857 :
初心者一郎 :01/11/24 23:27
すいません、一番下は以下の間違いです↓ UINT CMyDialog::OnNcHitTest(CPoint point) { 自分のロジックの場所?? <--ここに書く? CDialog::OnNcHitTest( point );<--必要、不要 ? 自分のロジックの場所?? <--それともここ? return xxxx; }
ファイル名 "00.wav" 簡単に音を鳴らしたいんですけどなんかいいのないでしょうか?
PlaySound("00.wav",NULL,SND_FILENAME);
>>856 基本的にはどっちでもいい気がする。
一部のメッセージだけ、デフォルトの処理内容を考えてみて
先にどっちを処理した方がいいのか自分で判断。
ヒットテストの場合は、渡された位置の HTxxx を判定するわけだから、
自分で判定できる位置では自分で勝手に判定して、CDialog::OnNcHitTest は呼ぶ必要ない。
自分で判定できない位置、つまりデフォルトの判定処理をさせたい場合は
CDialog::OnNcHitTest を呼んで、その戻り値をそのまま return すれば良い。
862 :
初心者一郎 :01/11/25 00:05
>>861 なるほど、つまり継承元のロジックを確認して
判断すれば良いと言う事でしょうか?
・OnNcHitTestの場合
_AFXWIN_INLINE UINT CWnd::OnNcHitTest(CPoint)
{ return (UINT)Default(); }
と言う事は呼ぶ必要がない、と判断する。
では OnTimer()の場合、MFCが自動的に
CDialog::OnTimer(nIDEvent);を記述しますが、
特に呼ぶ必要がない、と言う事でしょうか?
_AFXWIN_INLINE void CWnd::OnTimer(UINT)
{ Default(); }
同じく特別な処理をしていないよです。
863 :
デフォルトの名無しさん :01/11/25 04:47
コンボボックスのプルダウン部分のようなウィンドウはどうやって作ればいいですか? 1.ウィンドウがアクティブにならない。 2.それでいてスクロールバーをいじったり出来る。 3.ウィンドウ以外の領域をクリックすると消える。 4.親ウィンドウからはみ出して表示することも可能 最大の難関は1です。 ポップアップウィンドウで2.3.4は実現できるのですがウィンドウがアクティブになってしまいます。 どうしたらいいですか?
864 :
デフォルトの名無しさん :01/11/25 07:58
ちょっと急ぎで教えて欲しいのですが、 VisualC++ で 64bit サイズの int 型は定義できるのでしょうか? ついでに C++ , C 共に可能かどうが分かればありがたいです。
>>862 いや、実際に処理内容を覗くのではなくて(どうせ見えないし)、
デフォルトでどういう処理が行われているのか想像して。
具体的に OnNcHitTest だと、
point がタイトルバーの位置のときは HTCAPTION
point がクライアント領域のときは HTCLIENT
point が最小化ボタンの位置のときは HTREDUCE
というふうに、位置に応じて値が返ってくるはずだ。
このデフォルトの処理を、やらせたいかどうか。で判断。
>>863 ShowWindow(hwnd, SW_SHOWNOACTIVE);
>>864 VC では __int64
C標準では long long int (VC未対応)
C++標準には無い。
868 :
デフォルトの名無しさん :01/11/25 08:48
>>867 速攻のお返事、ありがとう御座います。
ところで __int64 は C , C++ 両方に使えますでしょうか?
#使えれば、お昼に買いにいける・・・
869 :
初心者一郎 :01/11/25 09:15
>>865 ああっ、そうゆうことですか!勉強になりま
した。861さん,865さん(同じ方かも)、夜を
またいでの解答ありがとうございました。
>>868 C でも C++ でもだいじょーぶです。
VC6で確認してみました(VC5以下は知らん)。
#買いに行くって VC を・・・?
871 :
デフォルトの名無しさん :01/11/25 10:42
>>870 どうも有難う御座います、大変助かりました。
#gcc からの移植作業やってまして、
#ボーランドの古いコンパイラだと、できなくて往生してたんです。
Borland コンパイラの最新のはフリーでダウンロードできますが・・・
873 :
デフォルトの名無しさん :01/11/25 12:52
って言うかそれは,
クラス作って演算子をオーバーロードするだけの話では?
>>864
874 :
デフォルトの名無しさん :01/11/25 14:31
vcだと cout<<ios::hex<<int(a); ってやると上手くいかない・・・ cout<<hex<<int(a); だと上手くいく なぜ??
>>872 ついでに、ダウンロードできる Borland C++ Compiler でも __int64, unsigned __int64 は使えますね。
(仕事でプログラム書くなら、デバッガ機能が充実した VC6 買っても良いと思うけど)
かなりどうしようもない質問ですが、、、 VC買ってついて来たMSDNのライブラリCDですが、それの新しいものはどうやって手に入れるんですか? というかバージョンアップしてる?98年かな?大分前買ったものだから、英語のままとか載ってなかったりするので ちょっと困る。
877 :
デフォルトの名無しさん :01/11/26 02:22
MoveMemoryを使うほうがいいのかな forでループしてコピーするよりも
878 :
デフォルトの名無しさん :01/11/26 02:27
>>877 なぜmemmove()にしないんだろう・・・
というかコピーするならmemcpy()にしないか?
重なるのが嫌とか?
879 :
デフォルトの名無しさん :01/11/26 02:34
>>876 MSDNの新しいやつは、MSと契約しないと手に入らないよ。
契約料は、何万もすると思う。たしか。
そういえばMSのサイトでも見れるやつって、CD-ROMで配布されてる のと、内容違うのかな? 同じだったら、そっちでもいいけど…。
882 :
デフォルトの名無しさん :01/11/26 02:55
最近 VC6を買ったが、1年間無料 MSDNライブラリ サブスクリプション なるものがついてた。無料で、最新版が手に入るよ。 MSDN OnlineもCDと大体同じっぽいけど、構造体の解説とかが無かったり、 リンクが省かれていたりで、突っ込んで調べようとすると、結構辛い。
MSDNライブラリ サブスクリプションの無料クーポン使おうと思ってて 箱にしまっておいたら気付いたときには期限切れてた(笑 英語でよければ、Platform SDKの最新版をDLすればSDKの説明は読めるよ。 Onlineのは正直言って使いにくい。
ぐ、、、MSめ、、、、、ライブラリページ検索使えないし MXで調べてみても、転がってないし。 困った(;´Д`)
>877 転送領域が重ならない限りmemcpyが速度的にベスト memmoveはインライン展開最適化の対象になってないので常に関数呼び出しになる (memmoveのソースを見たがごく普通のコードなのでforと大して変わらないはず) memcpyはリリースビルドではインライン展開最適化の対象になってて rep movsd+rep movsbにその場で展開されるので速度的に有利 (ちなみにmemsetもrep stosdに展開される) まぁ特別問題が無いならばVCではmemcpy使えってことだ
>>885 ライブラリページの説明をちゃんと読んだ?
MSDN ライブラリの操作方法
MSDN ライブラリから目的の情報を取得する以下のような方法があります。
左側の目次を使用して、MSDN ライブラリをブラウズする。
MSDN Online サイトの[このサイトの検索] を使用して、特定のキーワードから検索を行う。
貴重な意見ありがとうございます かなり参考になりました
889 :
デフォルトの名無しさん :01/11/26 12:57
オブジェクトへのポインタの配列って動的に作れるのでしょうか? Object** obj=new.... みたいにしたいのですけど
>>889 Object **obj = new (Object *[n]);
または MFC なら CObArray か CObList を使うとか。
スマソ、前後の "(" ")" 要らんわ。
できましたー ありがとさんです 名前が激しいですな(^^;
初心者です。唐突な質問ですいません。 外部依存関係というフォルダは何なのでしょうか? また、それはどうすれば作成できるのでしょうか? お願いします。
894 :
デフォルトの名無しさん :01/11/26 19:20
標準ヘッダーファイルで #if(WINVER >= 0x0400) #define VK_PROCESSKEY 0xE5 #endif /* WINVER >= 0x0400 */ のような記述がありますが 0x0400 ってどのWindowsですか? 95ですか? 余談ですが先日初めて職務質問されました。 7時ごろに人気の少ない道を通っていたら通りかかったパトカーに止められました。 プログラマーって怪しさが表ににじみ出るものですか?
895 :
デフォルトの名無しさん :01/11/26 20:33
コマンドとかCVARの名前変更して TSCに引っ掛からないようにビルドし直す方法教えて
896 :
デフォルトの名無しさん :01/11/26 22:22
少しC言語をやっているものなんですが、 時々ソースコードの中に "\xxx\xxx\xxx\xxx\xxx\xxx"というような文字列があるのですがこれは どうすれば普通の文字に戻せるんでしょうか? 例えば"\253\104\114\266"とかなんですが・・・
ォDLカ ?
コピペしてrubyにでも喰わせろ。 #ruby -e 'print "\253\104"'
899 :
デフォルトの名無しさん :01/11/26 22:47
ある基底クラスポインタが指すオブジェクトが、 あるクラスを継承しているかどうか調べるには、 どうすればいいのでしょうか?
rtti有効にして、dynamic_cast<あるクラス>(基底クラスポインタ)の返値を見ろ。
ダメだ。コピペしてperlにでも喰わせろ。 #perl -e 'print "\253\104"'
つか、みんなrootで実行デスカ‥‥ あるいは、コメント?
897さんの言う通り変になってしまうんですが単なるアルファベットになるみたいなんです。
画像データーベースを作ったかた。デジタルカメラ組み込みのしごとがあります。 但しDirectShow、Twainを使わなければなりません。 また少し変わったSDKで機械語ルーティン集ではありません。あくまで機械語部分はシステムに埋め込まれてしまい各機能の呼び出しタイトルだけが書かれているものです。 ご興味ある方いらっしゃいますか? マニュアルは今のところ英語です。
>>903 ASCII じゃないだろ。
EBCDC じゃないのか?
UNICODEとか
>>906 アルファベットになる…ってーのを信じるなら、それはない。
ちなみに、そーいうファイル作って秀丸でUNICODE表示すると、 「yhrC」みたいな表示がされるから、 # 正確な表記ではない。よく知らんが、欧州系の装飾付きアルファベット UNICODEのような気がする。内容の意味は分からんが。
>>893 ワークスペースウィンドウのFileViewの話だよな?
プロジェクトに明示的に追加したヘッダファイル(Header Files の下)以外で
参照しているヘッダファイルがあると、自動的に「外部依存関係」に追加される。
無理して自分で作るものではない。
プロジェクトに含まれるヘッダファイルならきちんと Header Files の下に
移動しておくのが吉。
>>894 NT。詳しくはGetVersionExのヘルプを参照。
>>909 WINVER 0x0400 だと Windows 95 or NT4.0 です。NT only にしたければ _WIN32_WINNT 使わないと。
詳しくは Platform SDK のドキュメントで [Using the SDK Headers] を検索。
恥かしい質問でしたらごめんなさい。 VC++にてダイアログベースでプログラムを作っているのですが。 ダイアログ画面を表示する前に、個別のチェック(ファイル有無チェック等)かなんかでNGの時 画面を表示させずに、MSGBOXを表示させてそのまま処理を終了させたいのですが、 どうすればよいのでようか? ダイアログ画面を表示させたくないのです。 宜しくお願いします
913 :
デフォルトの名無しさん :01/11/27 13:10
InitInstanceでダイアログを開く前にエラーチェックしろ。
非常に初歩的なことですいません。 MFCをやっているのですが、ハンドルというものがでてきて、とりあえずはじめでてきたときに、「IDみたいにとらえて・・・」のような記述があったのでそのようにとらえていたんですが 「メンバ変数にハンドルをもつクラスが・・・・」のような記述を別で見ました。なんのことだか意味がわからなくなってしまいました。。 どういうことなんでしょうか??
917 :
デフォルトの名無しさん :01/12/04 14:22
>>916 うーん、そのクラスのメンバ変数の中に、ハンドルがあるっていうような
意味だとおもうんだけど、
この場合ハンドルっていうのはクラスの実体のIDみたいなもので、
メンバ変数としてもつことによって外から容易に参照できるようになってるのだと思う
918 :
デフォルトの名無しさん :01/12/04 18:26
同時にファイルの複数開きたいと考えています。 WinAPIのGetOpenFileName()を用いて複数ファイル名を 取得するにはどのようにすればいいですか?
919 :
デフォルトの名無しさん :01/12/05 18:15
>918 lpofn->lpstrFile | For Explorer-style dialog boxes, the directory and file name strings are | NULL separated, with an extra NULL character after the last file name. MFCのソース、DLGFILE.CPP の CFileDialog::GetNextPathName あたりも参考に。
920 :
デフォルトの名無しさん :01/12/07 11:33
DCB構造体の、fAbortOnErrorなんですけど、 Win2000だと設定通り動くんだけどWin98でやったら、TRUEにしても エラーのときに処理を中断しないんです(FALSEと変わらない)。 同じような人いませんか?どっちでもいいんだけどなんか気持ち悪いです。
921 :
デフォルトの名無しさん :01/12/31 02:57
1GBを越える画像を印刷するには? 途中で欠けてしまいます。 どうしよう・・・・・
>921 その画像うpして
てかどういう不思議装置で印刷するだろう、、、
FAQっぽいけど、、、 system("***.exe a.tex b.tex"); みたいなのをDOS窓を出さずにできる方法はないの?
924 sageで。
しつもん! #include "stdafx.h" #include <stdio.h> #include <string.h> class TT{ private: public: char *name; TT(char *_in){ name=new char[strlen(_in)]; strcpy(name,_in); } ~TT(){ delete name; } void getName(char *val){ strcpy(val,name); } }; int main(int argc, char* argv[]){ TT *a=new TT("aaaa"); delete a; return 0; } で、デストラクタでnameをdeleteするとデバッグエラーというダイアログが現れますが、 なんでですか? デリートすることが間違っているということでしょうか?
> name=new char[strlen(_in)]; > strcpy(name,_in); メモリの書きこみ違反です。
928 :
デフォルトの名無しさん :02/01/12 00:48
質問です。 Office XPみたいな右クリックメニューはどうやって作ればいいんでしょうか。
>>927 え、、書き込み違反なんですか?
すいませんが、僕には何がまずいのかわかりません。
よろしければ、回避法等、詳しく教えてくださいますか?
930 :
デフォルトの名無しさん :02/01/12 02:35
delete [] name; と書いてみる。
>>929 '\0' の分が抜けてる。
それと C++ 使うなら std::string 使った方が何かと楽だぞ。