VisualC++相談室 【7】

このエントリーをはてなブックマークに追加
1いさましいチビの女の子
VisualC++関連の話題を扱うスレッドです。

前スレッド
http://pc.2ch.net/test/read.cgi/tech/1011615035/l50
2943:02/04/03 23:31
2ゲッチュ
3だっつーの!!(怒)
>>1
女の子かー。
んなわけない。
6アルメイダ:02/04/04 09:59
すみません、以前リストボックスの色のつけ方を質問した者ですが
色はつけることが出来たのですが、リストボックス内全部が同じ
色になってしまいます。
リストボクスッが複数項目ある場合、その項目毎に色を変えることは
出来ないのでしょうか

お忙しいところ申し訳ありませんが
教えていただけるようお願い致します。
7デフォルトの名無しさん:02/04/04 10:06
VCのシステムって根本的にどうゆうことなの?
C++やってるが全然わからん。
小人が入ってるらしい
>>6
前スレの919
>>7
C++ + MFC + IDE用コード。
11デフォルトの名無しさん:02/04/04 12:03
STL.hって何入れれば使えるようになりますか?
12デフォルトの名無しさん:02/04/04 13:51
「エクスプローラでファイルを右クリックしたときに表示されるポップアップメニュー」
と同じものをプログラム的に表示するにはどうしたらよいのでしょうか?
やさしい有識者のお方、ご助言よろしくお願いいたします。
13デフォルトの名無しさん:02/04/04 14:26
>>1御付かれみたまちゃん
>>12
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_int/shell_int.asp
あたりを読むとか。MSDN LibraryやPlatform SDKにもサンプルがあった気が。
日本語解説があるかどうかは知りません。
15デフォルトの名無しさん:02/04/04 16:19
マウスの中ボタンと左ボタンを入替えるプログラムを作りたいのですが
とりあえず中ボタンをフックで捕まえることが出来るのですがその後に
左ボタンが押された用に見せる処理がうまくいきません。

どのようにすれば良いか教えてほしいYO!
>15
捕まえられたんなら、
そこで左クリックのメッセージを投げとけば?
17デフォルトの名無しさん:02/04/04 18:09
CM_Get〜の関数を使って、あるデバイスが現在ドコに繋がっているか(※)を
調べるには如何すれば良いんでしょうか?

※ノートパソなんかで、SCSIカードがPCMCIAに繋がっているとか...
誰かPostgreSQLをWin32でコンパイルして配布してください。
   _____
 /::\_____\   
 |: ̄\∩`_´) \ 
 |:   :| ̄ ̄U ̄:|
20デフォルトの名無しさん:02/04/04 20:58
MFCで、毎フレームある作業をさせたいときはどうすれば?
>>20
毎フレーム
OnIdle
23デフォルトの名無しさん:02/04/05 01:11
ときどき出てくるVC7ってVC6の次バージョンのこと?
それともVS.NETに入ってる偽VC++のこと?
前者と後者はどう違うんだ
2515:02/04/05 09:59
>16
WH_MOUSE_LLでWM_MBUTTONXXをフックしてWM_LBUTTONXXをPostMessage
してみてもうまくいかないYO! このやり方じゃダメですかね?
26Disca ◆NAfP6znE :02/04/05 13:50
VisualCでMySQLを動かしたいのですが、どのようにしてプログラムすれば良いのでしょうか…。
28Disca ◆NAfP6znE :02/04/05 14:13
>>26
ありがとう、参考になりました。
.netが発売されてから、あまり伸びてないね。
新しい人は、C#に関心があるのかな?
souka?
3123:02/04/05 16:51
>>24
VC6の次バージョン: ネイティブコードを作る。
偽VC: VC#.net, VB.netなどと同様の中間コードを作る(.netのない環境では動かない)

という意味です。
で、VC7はどっちなんでしょ?
>>31
VisualSstudio .NETだろ?
ネイティブコードも作れるし、CLI版も作れる。
>>15
ごめん。嘘ついてた。コレだと抜けが多すぎる...

>>25
システムフックのDLLを作ってそこで置き換える。
完璧なのを作りたいのなら、
マウスドライバに被せるような、フィルタドライバを作る。
34デフォルトの名無しさん:02/04/05 17:29
CM_Get_DevNode_Registry_Propertyって関数の第2引数に指定する#defineで
"CM_DRP_CAPABILITIES"の意味は何なんでしょうか?
知ってる方回答よろしく。m(_ _)m
35デフォルトの名無しさん:02/04/05 18:07
Excel2000 のオブジェクトを VC++6.0 で使いたいんですけど、どうしたらいいのでしょう?
Excel97 のサンプルは見つけたのですが、それを 2000 で使おうとすると、
excel9.tlh 内で
「error C2501: '_CommandBarsPtr' : 識別名を宣言するのに、型が指定されていません。」
等のエラーが出てしまいます。

ご存知の方、ご回答よろしくお願いします。
36デフォルトの名無しさん:02/04/05 22:06
VisualC++6.0 スタンダードエディション+DirectXでプログラムを作った
時はある程度安定してたけどVisualC++6.0エンタープライスにしたら
ビルドしたアプリがフリーズすることが多くなったんですけど自分だけ?
>>36
アンタのコードにもともとバグがあったんだよ。
スタンダードエディションでは最適化をしないから、
今まで発覚しなかっただけ。
38デフォルトの名無しさん:02/04/05 23:42
VC6.0でつくったアプリには、
プロパティのバージョン情報以外に、
プロダクトIDのようなものが、
埋め込んであるんですか?
39デフォルトの名無しさん:02/04/05 23:52
>>36
サービスパックを最新のを当ててる?
40デフォルトの名無しさん:02/04/06 03:35
vc6エンタープライズとvc6.netどっちがよいのですか?
>>40
vc"6".netにしる!
自分のアプリを友人のマシンでテストプレイさせたら

Runtime Error!

って出てきます。自分のマシンではおきません。これって、
DLLが足りないとかが原因でおきるんですか?

だとしたら、どのDLLが必要なのかを簡単に調べる方法って
ありませんか?(使ってるAPIやらを全部洗い出してMSDN
ライブラリで調べろってのは勘弁してください)
4342:02/04/06 13:12
ごめん。ageさせて。
>>42
> どのDLLが必要なのかを簡単に調べる方法
Dependecy Walker 辺りを使うとよろし。
4542:02/04/06 13:42
>>44
ありがとうございましたー。

フル英語なのがちょいムカつく(しかも、日本語pathは大文字変換のせいでバグありだ)けど、
これのおかげで何とかなりそうな予感です。
4615:02/04/06 17:21
>33
レスありがとう。
う〜ん、簡単に出来そうと思ったんだけどなかなか難しそうだな。
4723:02/04/06 17:25
>>32
ネイティブコードもつくれるとは知らんかったです。
ありがとございます。

じゃあ、ここで聞くことじゃないかもしれないけど、VC#.netもネイティブコード
吐いてくれるのかな?
シェルエクステンションでエクスプローラにツールバーを加えたん
ですけども、そのうえのボタンを押したときに選択しているファイ
ルを取得する方法を教えてください。
エクスプローラのあれは、
ListViewやないの?
エクスプローラのListViewを取得することができるのかな?
もしくはメッセージをおくるとかですか?
51初心者:02/04/07 17:29
基本的な質問なんですが、
VC6で、C++の教本に載ってる、プログラムを
普通に入力して実行するにはどのように
したらよろしいんでしょうか?
>>51
・・・VC6の教本も買った方がいいと思うよ。マジで。
>>51
VC6を立ち上げなさい。
ファイル、新規作成、プロジェクト選択、ファイル、新規作成、
ソースファイル(cpp)で後はコードを打て。
>>51
VC6.0のエディタにコードを入力してビルド->実行じゃだめなの?
C++の教本に載っているようなものならコマンドラインからclを使った方がいいけど。
55デフォルトの名無しさん:02/04/07 18:53
VC6 を使っています。
自作クラスへのポインタの std::list を iterator を使って for でループしようとすると

SourceFile.cpp(121) : error C2678:
二項演算子 '<' : 型
'class std::list<class NAMESPACE::CLASSNAME *,class std::allocator<class NAMESPACE::CLASSNAME *> >::iterator'
の左オペランドを扱う演算子は定義されていません。
(または変換できません)(新しい動作; ヘルプを参照)

というエラーが出てしまいます。まったく意味不明なのですが、
どういう意味でしょうか?
std::list::itarator を扱う operator < は定義されてないから
そんなもん使うんじゃねぇ!という意味でしょう。
STLのiteratorの巡回終了条件には、!= を使うのが常道で、
i < list.end();みたいなコードは書けない場合もある。
5855:02/04/07 20:00
>>56
それっぽいエラーが出たので対象クラス用の比較演算子群を定義したら
そのエラーは消えました。
ともあれ、ご返答いただきましてありがとうございました。

>>57
なるほど…ズバリこれでした。
iterator を使ってないコードからコピペしたので全然気づきませんでした。
ありがとうございました!!
59デフォルトの名無しさん:02/04/07 20:13
アルゴリズム使えよ
ポインタのリストだからな…
全てのポインタが必ずi < list.end();のアドレスにあるとは限らん。
61デフォルトの名無しさん:02/04/07 23:21
>39
>サービスパックを最新のを当ててる?
サービスパックって複数枚あるんですけど、どれでしょうか?
>>59
transform?
63初心者:02/04/08 13:21
CWnd::OnKillFocus は入力フォーカスを失う直前に呼び出されるみたいですが、
フォーカスを失った直後に処理をしたい場合はどうしたらいいでしょうか?
64デフォルトの名無しさん:02/04/08 14:16
教えて君で申し訳ありませんが。
今、VC++でプログラムを自作し、移動ステージを動かさねばなりません。
しかし付属のマニュアルにはコントローラのパネル操作でのステージ移動
についてしか書いてなく困っているしだいです。
PCにコントローラを繋いで、そのコントローラに直接コマンドを
送る方法について教えてください。
おそらくこんな書き方では伝わりにくいと思うのですが・・・。
よろしくです。
65リアル厨房 :02/04/08 16:29
nが真のとき偽を返し、nが偽の時真を返すファンクションが欲しいのですけれど、
どのように書けばスマートに行けるのでしょうか?

こんなのは不味いですよね。
御教示頂けたら幸いです。

bool Classname::funcname(n) const{
  if(n){
    return (false);
  }else{
    return (true);
  }
return !n;
67リアル厨房 :02/04/08 16:40
>>66
それも試したのですが動かなくてお伺いした所存です。
他に間違いがあると思いますので、もう少し試して見ます。有難う御座いました。
68リアル厨房 :02/04/08 16:44
関数を呼び出す時の()を付け忘れておりました。
どうもお騒がせ致しました。
69Disca ◆NAfP6znE :02/04/08 16:54
return (n ? false : true);
return !!!n;
operator !()しか定義されてなくて、
if( !!obj )
{...}
とやる罠
72デフォルトの名無しさん:02/04/08 17:08
一番基本的で他言語からも呼び出せるDLLが作りたいのですが
なんだかいろいろな方法があって困っています。
一番正当な方法がしりたいのですが、HPなどあったら教えてください。
73デフォルトの名無しさん:02/04/08 17:11
VCは、買ってみて、幻滅した。
結局コンパイラとデバッカしかつかっとらん。
俺はウィンドーズだけじゃなく、リナックスのアプリケーションも
作りてーんだぁーーーーー(切)
マイクロソフト マンセーー
>73
すまない。その高度なボケにうまく突っ込む技術はオレには無い。
単にマンセーの意味を間違ってるだけだと思われ
76デフォルトの名無しさん:02/04/08 19:11
                 /)
             、2)Y⌒  ⌒フ   +
           ッ-i'´       ⌒フ
           (´ ,.-゙ー-、     ろ、
        * シ彡ノ"ミVv    )
      *    ノノノノ"ヽヽヽミ   シ  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.          ,l')∩  ∩ |)|ヾ ミ  < DoLoveLove?
           ,○)、 ▽  ノjl| YY゙    \________
           {_∃ `l____/⌒'i|
            ̄ Yl"゙⌒lY |  +
              ,ト|__/ハ i、
           ,iニiニiニユ ゙h,,)
           ノtYTYヾ\
          /''フ''''ー<"ヽ、
           /__ノ     \ノヽ、
          (__)     ゞ__)

77デフォルトの名無しさん:02/04/08 20:35
普通にMSDNLibraryを起動するとタスクマネージャにhh.exeってのが表示されますよね?
でも、VC++から起動すると表示されません。
これは、どういう風に起動しているのでしょうか?
7872:02/04/08 21:36
わかりました。
ショートカットのプロパティをみれ。
80デフォルトの名無しさん:02/04/09 00:17
ヲい!モ前ら!
プロジェクトファイルが提供されてない、メイクファイルしかない、
プロジェクトをVCで開くとき、どんな方法を使ってますか?
>>77 COMのinprocess serverだろ。
VCから起動すると、たまにヘルプのキー入力を奪い取ったり(CTL+Fとか)かなり不便。
std::negateで駄目な理由がおもいつかん。
>15
いまさらだけどこんな発見。
コレ → SwapMouseButton
気づいてたらスマン。
電源投入時の時間が知りたいんですけど、何かAPI知りませんか?
(電源投入時 → OSが起動した時間です。)
「起動してからの時間を取って、現在の時間から逆算」ってのは無しの方向で...
ご存知の方、よろしくお願いしますm(_ _)m
>>84
RDTSC
電源投入時からっつーのは難しい。
>>84
Winが起動してからならGetTickCount
そしてスレ違い
87デフォルトの名無しさん:02/04/09 12:24
HBITMAPってなんですか?
メモリー上にビットマップのデータがあってそれへのポインタですか?
8884:02/04/09 13:35
レスどうも。>>85 >>86
質問の仕方の書き方を間違った...ついでに板も。←Win32APIのトコか?
A→Bなんて書き方をしちゃあイケナかったね。
システムが起動した(出来れば電源投入時)時間を取得したかったんですよ。
やっぱり経過時間から逆算するしかないのか・・・
89デフォルトの名無しさん:02/04/09 15:13
>>72
今ならCOM。将来は.NET。
かな?
90デフォルトの名無しさん:02/04/09 17:14
環境変数をVC使ってプログラムで登録するのはどうすれば良いですか?
91デフォルトの名無しさん:02/04/09 17:20
>>90
プロセス環境の環境変数の取得/設定なら、
Get/SetEnvironmentVariableです。
が、Windows全体の環境変数を設定する方法はわからないです。
92デフォルトの名無しさん:02/04/09 17:45
レスありがとうございます。>>91
質問悪くてすみません。
おっしゃられている通り、全体の環境変数なんですよ・・・
93デフォルトの名無しさん:02/04/09 18:08
FILE構造体を引数にもつ関数をもったDLLを作成し、
いざ実行プログラムでstderrを引数にして呼び出したら
DLLの関数内のfprintfで落ちるんだけど、なぜなんでしょう?
94デフォルトの名無しさん:02/04/09 18:20
OnDraw()で描画後、画面に表示されません。
Invalidate()とかしても表示されません。もしくはOnDraw()のループになります。
どうすればいいですか?
Invalidateはクライアント全体を更新領域に追加する関数。
その後OnDraw(WM_PAINT)を呼び出して、無効領域の描画を行う。
OnDraw内でInvalidateをすると無限ループに陥る可能性がある
9694:02/04/09 18:44
かわりの関数おしえてくださいです。。
きっちりメッセージループを回しているなら、
好きなタイミングでInvalidateすれば次、もしくはさらに後のループで描画されるはず。
メッセージループを回していないなら、Invalidate後にUpdateWindowしろ。
9894:02/04/09 18:57
もしかしてOnDrawで表示されないのはまだドキュメントが作成されてないからかな
と思い、新規作成を選んだら表示されました。

これを最初から行うにはどうすればいいのでしょう?

つまりOnCreate()とかそんなハンドラで、
それを呼び出す時点でViewは完成していて、OnDraw()が動いてくれる、そんなような関数ありますか?
はじめから無題が開いているだろ。
もしかしてMDIか?
きっちり状況を説明しろよ
10094:02/04/09 19:06
SDIです。
実行した時点ではなにも表示されません。
この状態で
・他のウインドの下に隠してから、もう一度アクティブにしてあげると表示される
・新規作成を選ぶと即座に表示される。

です。よろしくお願いします
10177:02/04/09 20:48
>>79
そうじゃなくて、VC++の側からのような起動はどういう風にしているのか知りたいんです。
102デフォルトの名無しさん:02/04/09 22:26
>>101 たぶんHTMLHelp API でhhctrl.ocxを呼ぶ
103デフォルトの名無しさん:02/04/09 22:47
早速ですが、VC6 SP5で開発をはじめたVC初心者です
最近、プロジェクトのロード時間と、エディタの改行時間が重くて、困っております
プロジェクトのロード時は、『リストボックスを読み込んでいます』で、
エディタでは、ブレイクポイントのあるソースで改行をすると、砂時計でまたされます
何か、ご存知の方、ご指導ください
10415:02/04/10 09:53
>83
レスサンクス、オレも亀レススマソ。
SwapMouseButtonは右左を入替えだけなんだよね。
右中はフックしてmouseEvent投げてやればある程度できるんだけど、
mouseEventのコールがまたフックされる、それをフラグで回避してる
けどやり方がおかしいためか挙動が変になっちゃう。
2日ほど仕事の空があってその間で出来るかなっと思って作り始めけど今は仕事で
時間が割けんのでストップ中です。
105デフォルトの名無しさん:02/04/11 11:29
       ,.-、       ,..-‐−- 、、
     /^`~",  :\  ,ィ":::::::::::::::::::;;;;;iii>;,、
   ,.-",   /......:::::i::l /:::::::::::::::;;;;;;;;iii彡" ::ヤi、
  ,.i  .|  :キ:::::::::::|::V::::::::::::;:"~ ̄     ::i||li
 / 、  | ,;:::::l:::::::::::マ,.-‐-、j'_,.ィ>、、   .:::iii》
 i、 ヘ  :\:::::::キ;:::::::(:::j::):...) `‐-‐"^{"^ヾノ"
  ヤ、 \:::::\,::::\:;;;:iゞ:-:;ィ     ,.,li`~~i    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.,;iiλ\.,,ィ^-‐'`ー",:::|::;X'::7、   ・=-_、, .:/   <      ついに完成した。これがドラえもんだ!!
";ii::i`ゝ、::;;;:、-‐-;;;;i‐'''|  .〉'.ヘ    ''  ./     \_____________________
.;ill;;:\::::::::::::::::;ノノl} ィ|、./:ー-`=‐-、、ノ
iilllllli;;:::`:‐-‐'":;ノ  │丶=‐-、,,_`l, ,.へ
llllllllllllii;;,,___;;;iill|||( ´D`) \ー=、7^ヾ'‐-、、
|||||||||||||||||||||||j'::::(U,U‐"、:::::\..::/   \  `ヽ
             UU
106VC挑戦中:02/04/11 11:59
VC始めて1ヶ月の初心者です。ActiveX(COM)の質問をさせてください。
ダイログにActiveX(DLL)を貼り付けられなかったので(貼り付けて実行するとダイアログが表示されない)
コード中で作成することにしました。(VBでは貼り付けてコントロールが表示される)
#importディレクティブでロードし、スマートポインタをCoCreateInstanceで作成しています。
このDLLには、コントロールを持っているのですが、そのコントロールを表示することが出来ません。
コントロールを表示するメソッドは、DLLに実装されているものなのでしょうか?
それとも、OLE関係の関数で外部から表示することが出来るのでしょうか?
ちょっと内容がわかりづらいかもしれないですけど、宜しくお願いします。
環境はVC++6 SDKです。
107デフォルトの名無しさん:02/04/11 14:08
タスクトレーにアイコンを入れてみたんですが色がおかしいです。
どうやら16色じゃないとダメみたいです。
自分はWin98です。
MeやXPでも16色表示ですか?
108別の人:02/04/11 14:09
>>94
SDI・MDIのヴューに対する開始時の処理は OnInitialUpdate() で。
・・・で、Invalidate()&UpdateWinodw() をペアで呼ぶと OnDraw()(≒WM_PAINT
正確には少し違う)が走る。
∞になるのは、既出だが多分OnDraw()の中でInva〜 or Update〜 を読んでるから。

最初だけ表示されないのはタイミングだけの話なので、面倒臭けりゃ後回しに
しといて後からゆっくり試しましょう。じゃ
>>103
真面目な話、マシンの問題くさい。
ハードディスクが壊れる寸前、読み込みに時間のかかるセクタがコンパイラの
バイナリにぶち当たっている?のでは
大体、開発環境はマシン負荷が一番かかるので、イカれ始めはコイツから
発覚しやすい、多分。
>>106
開発時に貼り付けるだけのときでも、関連パスが通ってなけりゃ
駄目だったりとか色々あると思う。そのためのプロパティ用コーディングやら
なんやらやってあるはずなので。でも詳しいことは知らん。
>>107
アイコンリソース内に大小2つ持ったりしてんじゃないの。
ちゃんとしたアプリは。
112不明なデバイスさん:02/04/11 17:44
Visual C++ 6.0 Professional Edition: \84,100 (\13,600)

これって、アカデミックパックでもほとんどかわりありませんか?_
113デフォルトの名無しさん:02/04/11 19:13
DLLとダイナミックリンクする場合
どういうタイミングでリンクさせるべきですか?

(1)プログラム開始時にリンクさせてそのまま
(2)実際にDLL内のプロシージャを使用するときにリンクして必要無くなったら開放

複数のDLLとリンクさせてDLL内のプロシージャを使うことが
殆どない場合(2)にすべきですか?
(2)の方がメモリの使用量が少なくて他のアプリには優しそうですが
いちいちロードしていたら処理速度が落ちそうです。
メモリにキャッシュされていればロード時間は短縮されそうですが
キャッシュされているくらいメモリに余裕があるなら(1)の方が効率的ですよね?

どうしましょう?
>113
楽な方でいいんじゃ無いですか?w

チウか9xってデフォルトだと死ぬほどディスクキャッシュにメモリ
持っていきますよね。もうね以下略。
115デフォルトの名無しさん:02/04/11 21:49
>>113
EXEやDLLのコードは実メモリに常駐しないよ。
仮想記憶上に割当てられて、必要なときに読みこまれるから、
(2)にメモリ節約や処理速度のメリットは無いよ。
(2)はプラグインの実装や、DLLバージョンの違いによる
APIの有無に対応する場合に有効です。

でも、起動を早くする効果はある
117113じゃないけど:02/04/11 23:13
>>115>>116
ってことは、

(3)初めて必要になったときにリンクして、以後そのまま使用する。

って感じで、プロキシクラスっぽい使い方がベスト?
118デフォルトの名無しさん:02/04/12 06:48
VC++6入れようと思うのですが
Visual Studio 6.0 と Visual Studio .NETって
どっち入れたほうがいいですか?
車に乗ろうと思うのですが
カローラと223系近郊型電車って
どっち乗った方がいいですか?
飴をなめようと思うのですが
サクマドロップスとミルキーって
どっち舐めた方がいいですか?
チンポ入れようと思うのですが
ヘルスとイメクラって
どっち入ったほうがいいですか?
122デフォルトの名無しさん:02/04/12 08:55
>>114
どういう制御なら満足なの?
123デフォルトの名無しさん:02/04/12 09:09
>>115
MFCxx.DLLみたいな、たくさんのEXEからつかわれる
やつは、DLL化したほうがシステムの負担が減るんじゃない?
>>115
>EXEやDLLのコードは実メモリに常駐しないよ。
>仮想記憶上に割当てられて、必要なときに読みこまれるから、

どのくらいの頻度でスワップするか知らないけど、
ほぼ常駐状態なのでは?
>>124
もっと仮想記憶について勉強してこい
126デフォルトの名無しさん:02/04/12 11:35
OSのファイルハンドルからFDを得るのか、
その逆の動作をするAPIかcrtの関数があったと思うのですが、
検索しても見あたらなくて困ってます

どなたかご存じありませんか?
じゃこういう理解でいい?
 DLLがロードされたというのは メモリマップドファイル化された状態
 だから、実メモリ上は共有され
 実際にどこかのプロセスでアクセスがあるまでは実ロードも保留されている。
>>125
なんか勘違いしてないか、こいつ。
TranslateAcceleratorを使うと、子コントロールに入力フォーカスがあっても
キー入力を奪っちゃうんだけど、これを回避する方法はない?

たとえば、Aキーにアプリケーションの終了とか割り当てちゃうと、
エディットコントロールにフォーカスがあってもAが入力できないとか。
130115:02/04/12 15:37
>>127さんの理解で正解。
仮想記憶1ページ分(Win32では4KB)の実メモリさえあれば
どんなサイズのEXE/DLLでも実行が可能です。

>122
たまにはメモリ整理してくれよ…と。今は使ってないので問題無しw
132デフォルトの名無しさん:02/04/12 17:35
すみません教えて下さい
VC++いくつかのクラスを定義して、コンパイルしようとすると
最近こんなことを言われます

ビルド : 警告 : ビルドに失敗しました
(またはビルドの方法がわかりません) 'C:\しぃ言語\sea\Debug\sea.pch'

pchファイルとはなんでしょうか?
 対処法などあるのでしょうか 教えて下さい
これって初心者向け?
134デフォルトの名無しさん:02/04/12 17:42
とりあえずVC立ち上げ直して、クリーンビルドやってみたら。
135デフォルトの名無しさん:02/04/12 18:08
>>131
整理って実際には?
http://pc.2ch.net/test/read.cgi/tech/1006834463/182

がよくわからぬ。詳しく説明きぼんぬ。
>136
コンパイラの警告を無視せずちゃんと調べろ、くらいの意味だと思われ。
>>137
警告ですか。…警告が出てなくても落ちる時は
主にどこを調べればよいでしょうか。
>138
ポインタに変なモノが入っていないか、根気よくデバッグして調べる。
参考までに、リリース版でこける原因のトップ3は
1. 初期化されていないポインタ
2. 初期化されていない配列や構造体
3. ASSERTトラップ
だ。頑張れ。
140デフォルトの名無しさん:02/04/13 07:46
http://www.google.co.jp/search?q=cache:Gku2r4QU1fMC:www.dodgson.org/lab/docs/hat/boost_intro.html+boost+shared_ptr&hl=ja&lr=lang_ja

ここのarrayの説明に、templateに整数で引数を渡すとVCじゃ問題ありみたいなことが書いてあるんだけど、
どういう問題があるの?
ウィンドウのフレームや、タイトルバー、その他のバーの色を変えたいんだけど
できますか?
できる
>142
教えて下さい。おながいします。
144デフォルトの名無しさん:02/04/13 17:01
VBとVCにスレッド両方に書き込みましたが
「マルチポストうぜ〜」などと煽らずにマジレスしてください。

VBでファイルにバイナリアクセスする場合に
本にはバイト配列を使用して書き込むと書いてありましたが
どうやるんですか?
VCの場合はLONG型や浮動小数点型でもポインタを使って
バイト配列の一部にコピーしたりするのは簡単ですが
VBはポインタが無いのでどうやって変換して良いのか分かりません。
例えばLONG型(4バイト)と倍精度浮動小数点型(8バイト)を
12バイトの配列に格納する方法
逆に12バイトの配列からLONG型と倍精度浮動小数点型を抽出する方法教えてください。
>>144
何のために、そんな事したいの ? 普通に文字列で書いて、文字列で読みだしゃい
いじゃん。

どうしてもやりたいなら、C で .dll 書いてそれ呼び出すか、RtlMoveMemory
API を使えばできるが、「VBはポインタが無いので」と言う認識では無理、
あきらめな。
>>144
マルチポストしたなら答えてもらう資格はない
147デフォルトの名無しさん:02/04/13 17:25
string hogehoge="ageage";
MessageBox(NULL,hogehoge,"Message",MB_OK);
みたいにするとき
hogehogeの文字列char[]を参照するにはどうしたらいいDEATHか?

&hogehoge[0]
149147:02/04/13 17:59
>>148

おー!待ってたぜ。
ありがとう
I love you babe!
>>149
マジかよ
>>148-149
ワラタ
152デフォルトの名無しさん:02/04/14 00:27
すみませんちょっと教えてください
LPSTR
っていう変数名がなにげによくでてくるんですが
これってなんなんでしょうか?
 ヘルプをみても文字列への 32 ビット ポインタとしか書いてない・・・・
CString *と同じですか?
char* と同じです。
>>152
typedef char CHAR;
typedef CHAR *LPSTR, *PSTR;
char 文字列知らない人・・・?時代は変わったのか・・・。

>文字列への 32 ビット ポインタ
charへのFARポインタだろ
全くもう..
157デフォルトの名無しさん:02/04/14 18:25
FARって何?
>>157
セグメントをまたいでのメモリアクセスが可能なポインタ。
FAR…過去の遺物では?
64kb境界を越えられるポインタだろ
全くもう..
161デフォルトの名無しさん:02/04/14 18:38
セグメントって何?
超えられない?

わけわからーん。
>>160
それが1セグメントっす。
>>159
ナニ、過去の遺物だって? 寝ぼけたこといってるなぁ。
VC がどんなコードを吐いてるか、考えたことないのか?

「FAR ポインタなんて過去の遺物」なんて言ってるヤツは、
今後一切、例外処理を使うなよ。
例外処理をしている DLL を呼び出すこともまかりならん。
>>163
FAR自体を知らなくても例外処理できるから遺物なんでつよ(´Д⊂
128bitコンパイラとかでてきたらFAR/NEARの復権もあり得るかモナ。
166163:02/04/14 19:15
>>164
あのね、「遺物」というのは、もう誰も使ってないから「遺物」なんだよ。

たとえ知らなくても、現役で使われていたらそれは「遺物」とは言わんと思うが。
167159:02/04/14 20:35
>166
んと,VC++のインクルードファイル見たんですよ。すると,

#define far
#define FAR far

ってなってたので。

32bit以前のコード移植の為にあるだけだと思ってたんですが。
>>167
将来のコンパイラとのソース互換確保のためじゃないの?
>>156-160
お前ら本当に大丈夫か ? まさか、Near ポインタがいまだに 16bit とかいって
んじぁねーのか。
170デフォルトの名無しさん:02/04/14 21:54
Nearポインタって何〜?
きょうびセグメントつったら、最大4Gで、16bitのセレクタで指定しるアレだろ…
NT(win32)じゃnearもfarもねーぞ!!。フラットだ!!。
「64k」って...いつの時代の話してるんだゴラァ!
173デフォルトの名無しさん:02/04/14 23:41
そろそろ64bitの時代が来ますがお前らどうですか?
VS.NETからPlatformSDKも最新版(64bit対応)になってそのままだと
通らないソースとか出てきてショボーンだったりしませんか?
IntPtrとかなー、ちょっと直感的でないtypedefだとおもいません?
>>173
一部のAPIは64bitへの移植に備えてるみたいだが、まだ中途半端で困る。
つーか、64bitOS上で64bitコード書くつもりかおまえら何様だ(藁
現在新visualc++6.0入門ビギナー編(林晴比古)で勉強中です。
何かアドバイスをください。
その本を投げ捨てましょう。
まずその本を捨てろ。
180デフォルトの名無しさん:02/04/15 10:21
VC++ (SDK)でRealPlayer用のファイルを再生する場合、どのようにすればいいのでしょうか?
RealSDKをDLしてみたんですが、MFCでコンソールアプリ用だったし。
rmoc3260.dllを#importしてCoCreateInstanceでスマートポインタを取得するところまではできたのですが、
「再生ウィンドウを表示して、自作ウィンドウに埋め込む」というのが出来ません。
VBとDelphiなら簡単にできましたが、ActiveXを使うにはVCは向いてないのでしょうか?
どなたか知恵を貸してください。
VBはともかく、Delphiがやっていることと同じ事をやればOK。
もちろん、VC標準にはない機能は自分で実装すること
182180:02/04/15 10:41
>>181
!?
DelphiもVBと同じ方法ですよ?
フォームにActivexコントロールをペタッと貼り付けて…
>>182
ハァ?
おまえがDelphiでやった事じゃなくて、
Delphiが内部でやっていることだっつーの。
VCLのソースだって付いてきてるんだろ
184180:02/04/15 11:21
>>183
実はDelphi全くの初心者で…
フォームに貼り付けて実行して表示された段階でできた!って思っただけなので。
(VCではダイアログに貼り付けても表示すらされない)
ちょっとDelphi勉強してきます。
185チビ:02/04/15 17:16
あげ
ATLあるいはMFC使うのが通例。手でActiveXコントロールコンテナ書くのは無謀。
187学徒:02/04/16 01:13
プログラムで0.1を百万回たさせても十万という値が出ずに中途半端な値
(確か十万よりちょっと大きかったです)が出るわけですがこの理由は何なのでしょうか?不思議でしょうがないです
int i=0;
float a=0;
while(i<1000000){
i++;
a=a+0.1;
}
誰か御教えください、おねがいしますm(_ _)m
またこのことについて載っているサイト等ありましたら御教えくださいませ
>187
0.1というか浮動小数点数が2進数でどう表されてるかを
勉強すると良いかと。
>187
10進数の 0.1 は、2進数では割りきれない値だから、その誤差が出る。
ループで加算のかわりに、乗算でも結果は同じだと思うな。
float a = 0.1;
printf("%f\n", a*1000000 - 100000);
>>187
10/3 = 0.3333333を3回足しても10という値が出ずに中途半端な値
(確か10よりちょっと小さかったです)が出るわけですがこの理由は何なのでしょうか?不思議でしょうがないです。
191もうだめぽ・・・:02/04/16 03:09
×10/3 = 0.3333333
○10/3 = 3.3333333
>>190
情報処理技術者試験でも受けてみなはれ。
194180:02/04/16 15:29
>>186
MFC嫌いなんだよな〜
MFC使うならVBで書いたって同じだし…
でもユーザが
「VC++ SDKで。
プレゼンテーションを表示したいから、フォームでRealPlayerを実行したい」
ってなわがまま言うもんだから…
しっかし、COM難しすぎ!!
>MFC嫌いなんだよな〜
なら、ATL/WTLですね :-)
196デフォルトの名無しさん:02/04/16 18:34
Win2000sp2で、PlatformSDK 2001/oct のセットアップがどうしても
失敗するんですが、原因わかる方、いる?

Errors occurred during installation.
1601: A Windows installer error has occurred.
512: Installation failed with one or more errors.
Plaese correct the errors and/or try again.
197学徒:02/04/16 20:07
>>188-192
皆様ありがとうございます
0.1は2進数で割り切れない数だからだったんですね
ということはfloatでなくてdoubleにでもすれば少しはましになるということですね
完全に解決する方法はないのでしょうか?

>>189
>printf("%f\n", a*1000000 - 100000);
これはなぜ -100000引いてるんですか?
>197
文字列で数値表現すれば一応解決w
199デフォルトの名無しさん:02/04/17 02:06
あの、質問いいでしょうか?

mciSendStringやsndPlaySoundなどで音を鳴らすときに
2つ以上の音を同時に鳴らすことはできないといわれました。
DIRECTSOUNDを使えばできるといわれたんですが
これは本当なのでしょうか?

また、もし本当なら、DSOUNDを使う以外にどのような手段があるでしょうか?
自前ミキサを使ってwaveOut〜
あらかじめ、2つの音がミックスされたwavを用意しておく。
202デフォルトの名無しさん:02/04/17 02:15
>>200
自前ミキサとは何でしょう?
検索エンジンにもひっかからないところを見るとプログラム用語ではないのでしょうか?

>>201
BGMと効果音なので、そういう手段はとれないんですよ。
>>202
ぉぃぉぃ
まぁ、名前を聞いて理解できないようじゃおまえにゃ実現できない方法だから安心しろ。

BGMとSEなら、midi/waveで普通に並列で慣らせるだろ。
BGMをwaveで鳴らすような馬鹿なことはするな
蛇足だが、自前ミキサとは自分の力で複数の音をリアルタイムに合成して
1つのwave outから沢山の音を出す事。素人にはおすすめ以前に、出来ない。
何にせよ、199君はDirectSoundを学ぶ事を勧めるよ。
いや、ミキシング自体はものすごく簡単なんだが。
206デフォルトの名無しさん:02/04/17 02:30
むう、そんなに難しいものでしたか……
DIRECTSOUNDではできるんですが、
ちょっとした事情によりDSOUNDを使ってはいけないんですよ。

検索すればソースとかが出てきてもよさげなので、
それを改造してミキサを実装することにします。

すばやい回答ありがとうございました。
>>205
ミキシングは簡単だが、sndPlaySoundしか知らない奴にダブルバッファリング
でリアルタイム合成出力なぞ出来る訳がなかろう。
208デフォルトの名無しさん:02/04/17 02:53
あれ、でも今試しに2回sndPlaySoundをやったら
同時に音がなったんですが、これはサウンドボードによるものなのでしょうか?
そんなに良いサウンドボードは使ってないんですが……
最近のサウンドカードは2〜4chの出力を持っていて、
その数までなら普通に同時に鳴らせられる。
それから、Win2k(XPはしらん)ならOSがミキシングしてくれるから、
自前で書かなくても問題はない。
210デフォルトの名無しさん:02/04/17 03:26
なんとなくわかってきました。
WAVEファイルを読んでメモリにおいておき、
それを自分でWAVEOUTで出力するんですね。

実際に音の合成をするにはどのような演算をすればいいんでしょう?
それが検索でなかなか見つからなくて……
211デフォルトの名無しさん:02/04/17 03:26
>>209
ありがとうございます。
最近のマシンのみを対象にする場合はそれでもOKということですね。
>>210
足し算です。但しオーバーしないように、あらかじめ元のwaveを縮小しておくべし。
213デフォルトの名無しさん:02/04/17 03:51
>>212
ありがとうございます、検索で見ながらさっそくやってみます。
214デフォルトの名無しさん:02/04/17 08:13
最近CPUをCeleron1.1GHzに替えたんですが、そしたらデバッガ上で実行する時
SSE命令の所を通るとIllegalInsatruction例外が発生するようになってしまいました。
SSEは自分で書いた物じゃなくてDirectXの中なんですが。
デバッガ上でなくシェル上でなら普通に動作します。
VC++6.0使ってるんですが、そういや最新のSP当てて無かったなぁ、とSP5
を当てて見たものの解決せず。
どうやったらこれ解決できるんでしょう?

検索して見たらこのスレの過去ログがヒットした物の、HTML化されて
無くて閲覧できづ。
キシュツだったらスマンですが、誰か何か知って居たら教えて下さい‥‥
DirectX内で__tryで囲ってあるから大丈夫、という話だったきがする。
IllegalInstructionを「ハンドルされてなければ停止」にすればいいとか。
がいしゅつだったらごめんなさい。
xxx.libxxxという名前のフォルダの下にライブラリファイルを置いたら、
リンクできないんですがなぜですか?
使用しているコンパイラはVC++6.0です。
217216:02/04/17 12:38
age忘れ
>216
MSDNで「リンカ入力ファイル」で検索すると
 .libxxxなんて入力ファイル形式が無いが。
219216:02/04/17 13:02
>>218
ファイルじゃなくてフォルダの名前が"xxx.libxxx"なんです。
具体的にいうと
C:\Documents and Settings\username.LIBxxx\My Ducuments\project\hoge\lib
に置いてあるライブラリがリンクできないんです。LIBxxxはドメイン名です。
220216:02/04/17 13:08
ためしに
C:\work\xxx.libxxx\
というフォルダを作ってそこに置いてみてもだめでした。
221デフォルトの名無しさん:02/04/17 13:08
DLLからDLLを呼ぶことってできます?
できるなら注意点を教えて欲しいです。
>220
c:\Docu...\username.LIBxxx\...\hoge\lib\にライブラリファイル全部移しても
全然問題ないのだが。
ライブラリファイルのディレクトリがちゃんと通ってないのでは?
かオブジェクト/ラブラリモジュールの中に*.libの綴りが間違ってるとか?
>>197 あらかじめ10倍にしておけ そして出力する時に少数点を付けろ
224216:02/04/17 13:58
>>222
「ファイルをプロジェクトに追加」でそのライブラリファイルを指定して追加しても、
リンク時にそのライブラリに入っているはずの関数が未解決になるんです。
ほかのフォルダに移してリンクすればちゃんとできます。
>219の\projectのフォルダを丸ごとC:\workとかに移動すれば、
そのままでリンクが通るのに、
パスの途中に*.lib*という名前のフォルダがあるとだめなんです。
いい忘れてましたがOSはWindows2000です。
225デフォルトの名無しさん:02/04/17 21:52
S-JIS環境でUnicodeの文字(ハートマークとか)をTextOutで出力するにはどうすればよいのですか?
CharSetでSHIFTJIS_CHARSETはあるのですが、Unicodeにあたるものが見つかりません。
よろしくお願いします。
226SevenTH@SUNDAY:02/04/17 22:33
>>225
UnicodeのAPIを呼び出す。
>226
なるほど、
TextOutW( dc, 0, 0, L"\x2665", 1 );
これで出来ました。
ありがとうございました。
228デフォルトの名無しさん:02/04/18 00:18
あの、ずっと今までフルスクリーンばかりで
今回はじめてウィンドウモードでプログラム組んでみたんですが
640*480にしても、タイトルバーなどを含めて640*480に
なってしまいます。描画可能領域を640*480にするには
どうしたらいいんでしょうか?
>>221
双方の DLL でリンクするランタイムライブラリの種類に注意すべし。

シングルスレッド/マルチスレッド、スタティックリンク/ダイナミックリンク、…。
>228
AdjustWindowRect
231デフォルトの名無しさん:02/04/18 01:37
>>230
そのAPIを検索したらわかりました。
ありがとうございます^^
232デフォルトの名無しさん:02/04/18 02:44
スロットゲームを作りたいのですがスロットが回転する部分の
実装方法がわかりません。どなたか教えていただけませんか?
回転する部分の何がわからないんだよ
ドラムのデータの持ち方か?
アニメーションの方法か?
234デフォルトの名無しさん:02/04/18 02:59
>>233
アニメーション方法です。
235216:02/04/18 03:04
>>215
むーん。
SSEをサポートしているCPUなんで、IllegalInstructionが送出されること自体が
おかしいような‥‥
「ハンドルされて無ければ停止」を試してみたいですが、手元に環境が無くて。
明日試して見マス。
236デフォルトの名無しさん:02/04/18 03:20
Windowsプログラマのみなさん
辛く無いですか?
237チビ:02/04/18 13:06
age
>>236 そうですね 舐めてみたら確かにカライです
239デフォルトの名無しさん:02/04/18 20:45
VC6-SP5を使用しています。
コンパイルオプションに -MT (マルチスレッド対応)をつけた途端に
作成中のプログラムの挙動がおかしくなりました。

コンストラクタの初期化リストで NULL に設定したメンバの値が
勝手に何か別の値に書き換えられてしまうのです。

コンストラクタ内で MessageBox で確認すると NULL になっていますが、
メンバ関数を呼び出した時、書き換えていないはずの値にゴミが入っています。

関係する全てのファイルをマルチスレッド対応ライブラリにリンクするように
変更しましたし、まだライブラリを変更しただけで、コード内で
別スレッドを作成したりはしていませんので、別スレッドが書き換えているという可能性も低いです。

どうしてこうなってしまうのでしょうか?ご存知の方いらっしゃいましたらお願いいたします。
>>239
どうしてって、潜在的なバグが表面化しただけだろ
Bounds CheckerとかPurifyで確認しろ
241デフォルトの名無しさん:02/04/19 12:20
【質問】
VC++でゲーム作ろうとおもってるのですが、
簡単なサイコロ目当てゲームをとりあえずやってみようとおもってるんだけど、
とりあえず、普通のウィンドウズようアプリ(アイコンクリックしたら起動、DOS窓じゃない)
って状態にもっていきたい。

とりあえず空っぽのなんの機能もないウィンドウは作った。
そこにC++のメインのゲーム処理ソースは一体どこに書いたらいいの?
クラスとかたくさんありすぎてわけワカメです。
>>241
タイマーイベントでいいんじゃないか?
243デフォルトの名無しさん:02/04/19 12:52
>>242
ななにそれ!?
>>243
検索すれよ。
245デフォルトの名無しさん:02/04/19 13:01
>>244
あったけど、意味がわらん。
>>245
全部説明させる気かよ。
なんか本でも買って読めよ。
247デフォルトの名無しさん:02/04/19 13:08
タイマーイベントなんて本にのってないかったよ。
248デフォルトの名無しさん:02/04/19 17:03
pCmdUI->SetText("hoge");
で字に下線つけるのはどうすればいいですか?
普通にVC上でメニュー作る時に
キャプションに 開く(&O)
ってやるかんじでできる下線です。
pCmdUI->SetText("&hoge");
250デフォルトの名無しさん:02/04/19 17:34
pCmdUI->SetText("&hoge");
だとできました。

ただpCmdUI->SetText("hage\t&hoge");
とするとだめでした。
こういうもんですか?
251デフォルトの名無しさん:02/04/19 18:25
VBプログラマのためのVC++って本読んでVBで使えるATL COMをC++で作ってみました。
VBで走らせてみると、”ActiveXはオブジェクトが作れません”とかなんとかいわれる。
仕方ないから本のサンプルコードコピって試しても同じだった。

状況;
本の環境:NT,
自分環境:98
レジストリ登録は行われてる。
VBのオブジェクトブラウザでも見れる。
VB上でのオブジェクトの宣言は問題ない。
メソッドやプロパティにアクセスすると上記のエラーが出る。

って感じなんです。散々調べたんですがもうギブです。
誰か原因&解決法教えて下さい。
252デフォルトの名無しさん:02/04/20 00:20
誰か助けて下さい。
関数から抜ける時に _BLOCK_TYPE_IS_VALID っていうアサートが出ます。
ランタイムの delete 演算子が多重 delete 等の時に発している警告のようなのですが、
何故でるのかがわからないのです。
「関数から抜ける時」に発生するので、auto 変数だと思うのですが(ちなみに auto_ptr などは一切使っていません。)

これはどういう状況の時発生するのでしょうか?
指針のような物でもよいのでアドバイスを頂けないでしょうか?
よろしくお願いいたします。

253デフォルトの名無しさん:02/04/20 00:44
>>252
メモリリークかアクセスしてはいけないメモリ(確保したメモリの外部)にアクセスしてる可能性
コードとにらめっこしませう
254252:02/04/20 00:45
事故レスです。
やっぱりただの勘違い( delete したポインタを NULL クリアし忘れ…)
という凡ミスでした。

大変お騒がせしました。
255252:02/04/20 00:48
あう、丁度レスを頂いた所だったのですね。
>>253
レスありがとうございます。
「そろそろ C++ も解ってきたな。」などと増長している所で
それ以前のレベルの間違いをしてしまいました^^;
精進したいと思います。
ありがとうございました。
256デフォルトの名無しさん:02/04/20 00:49
char *p;

p = new char [4];
p[0] = 'a'; // OK
p[1] = 'b'; // OK
p[2] = 'c'; // OK
p[3] = 'd'; // OK
p[4] = 'e'; // アサート発生要因!!
>>やっぱりただの勘違い( delete したポインタを NULL クリアし忘れ…)
正確にはそれが要因ではなくて
解放したあとの変数にアクセスしてるのが問題ですかね・・・
258デフォルトの名無しさん:02/04/20 01:49
CFileDialogについて質問があります。

CFileDialog dlg(FALSE, NULL, strPath,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"テキスト|*.txt|html|*.html|log|*.log||");

みたいなファイルダイアログを作成したとします。
リストボックスでテキスト、html、logと
フィルタの拡張子を選ぶと、自動的にその拡張子を
つけるようにするにはどうすればいいでしょうか?

>>254 >>257
もっと正確にいうと、「手動でdeleteしてNULLクリアする」という
クラス設計がおかしいんだけどね。
auto_ptrも「使ってない」って言ってるけど、「使いこなせない」の
間違いのような気がする。
252は「C++を極めるまで後5歩くらい」って感じてるんだろうけど、
少なくともあと100歩は進まないといかんぞ。「少なくとも」、だ。
260デフォルトの名無しさん:02/04/20 09:54
今年から授業でVC++使うことになりました
まだ皆さんがなにいってるかわかりませんがついてけるようにがんばります。
261デフォルトの名無しさん:02/04/20 16:37
MFCのSDIプログラムを起動するとタイトルに
「無題 - XXX」みたいに勝手に表示されてしまいますが
これを好きな文字列にするにはどのタイミングでSetWindowTextしたらいいですか?
OnCreate でやっても反映されません。
教えて!
262デフォルトの名無しさん:02/04/20 16:41
FlexGridでセルに直接入力する技を教えてくれ。
>>261
PreCreateWindowで
cs.style &= ~(FWS_PREFIXTITLE | FWS_ADDTOTITLE);
264デフォルトの名無しさん:02/04/20 19:02
>>263

ありがとう!!
265デフォルトの名無しさん:02/04/21 03:01
エクスプローラで「?」マーク入りのファイルを作ろうとすると
「次の文字は使えません。」ってメッセージが出ますがその真似をするにはどうしたらいいですか?
ファイル管理ソフトでユーザーが入力したファイル名に不正な文字が含まれているかチェックするAPIは?
自分で1文字ずつ調べるしかないですか?
MFCならCString::SpanExcludingで
SpanExcluding(_T("\/:,;"));
みたいな感じでいっぺんに調べられるけど...
MoveFileEx()のエラーを調べる、つうのはどうよ。
適当なので無視してOK。
shlwapiの
UINT PathGetCharType(TUCHAR ch);
が使えるっぽい。
98or2000以上だけど。
VCで今からプログラムを書きはじめようかというところなんですが、
ソースファイルをフォルダ分けしようとしているんですが、
ヘッダーファイルをインクルードするときに
#include "../Control/Scene.h"みたいになり、ややこしくなります。
なにかいい方法はないでしょうか?
>>269
プロジェクトの設定をしましょう。
インクルードパスの設定できますよ。
>>270
ありがとう。おかげさまでインクルードすんの楽になったよ。
>>251
VB側でCreateObjectでロードしたのか
コントロールとして読みこんだのか
どっちなんでしょう?
コントロールなら適切なインターフェイスが実装されてないとか・・・
273チビちゃん:02/04/22 11:31
age
274ちびちゃん:02/04/23 00:24
age
275ちびっちゃった:02/04/23 00:55
age
276チビちゃん:02/04/23 11:20
あげ。
だれも書き込まない。
VCもすっかり下火ですね…
VC使ってるやつはそれなりにスキルあるからぶび厨みたいに
なんでも人に聞かないで自分で解決できるからだと思われ。
つか、C++、MFC、Win32APIのスレでだめなら(以下略)
279デフォルトの名無しさん:02/04/23 17:14
リストボックスのスクロール幅は、
CListBox::SetHorizontalExtent()(LB_SETHORIZONTALEXTENT)で設定しますが、
これをリストボックス中の項目の長さに合わせて増減させるには、どのような
インプリメントをすれば良いですか?
//要は、エディットコントロールの水平オートスクロールみたいなのをやりたい
280デフォルトの名無しさん:02/04/23 19:38
msdev が自動生成するクラス情報ファイル(拡張子 .ncb) を
自分で作れるツールってどこかに出てますか?
281デフォルトの名無しさん:02/04/23 20:45
.NETが出たので、VB同様MFCも逝ってよしですか?

age
>>281
ふざけるな

sage
>>280
作れば?

VCのマイナーバージョンが変わるたびに書式が変わるかも知れない
データファイルを自分で作ろうというのなら誰も止めはしないよ。
284デフォルトの名無しさん:02/04/24 01:05
True DB Gridのコントロール、無理矢理使って成功した人、います?
285デフォルトの名無しさん:02/04/24 02:02
GetProfileInt()が
ChogeApp::Initinstance()内で
必ず失敗します。
なんででしょうか?
286デフォルトの名無しさん:02/04/24 02:11
>>285
SetRegistryKey()をコールする前に使用している。
>>286
>Thx!ソース確認します
288デフォルトの名無しさん:02/04/24 11:20
>>286
まんまでした。あはずかちい。。。
289デフォルトの名無しさん:02/04/24 17:03
学校でC++をやっているから、家で補習でもしようかなと思いVisual Studio.netを買ったんだけど、
「プロジェクト : error PRJ0016 : このユーザーのセキュリティ設定が原因で、プロセスを作成できません。これらの設定はビルドで必要です。」
とまあ、こんなエラーがでてビルドが出来ないんですが、どうやったらいいんですか?
290デフォルトの名無しさん:02/04/24 17:10
>>289 MSで検索して。出てる。
291デフォルトの名無しさん:02/04/24 17:10
>>289
割れだろ
もうFAQ化してそう。
>>291
正解。
入手経緯や動機をいちいち書いてくるのはやましいことがある証拠
>>293
言われて読み直してみると面白いなぁ。
確かに>>289はいらない情報ばっかで、不自然にみえてきた。
295:02/04/24 17:40
いま始めたばかりで、HelloWorldの
表示とメニューバー押すとメッセージでハローワールド
って簡単なやつ作りました。

そんで、実際のプログラムはデバックフォルダにある「hello」の1個だけなんだよね。150kくらい。
コレ単体で動くんだよね。たとえばフロッピーにいれて他のパソコンに
コレだけもっていってもうごく?

あと、その他の8メガとかある大量のデータは作る工程のもので実際は関係ない?
リリース版を作りなさい。
>>290とか
KBで検索しろとか言うレスよく出てるけど、
MSのサイトで目的の情報探すのって結構難しくない?
「KBを検索すれば見つかる」のがわかっただけでもありがたいが。
299かみ:02/04/24 20:38
ねーこの8メガってなんなの?
>>299
神と言うよりはお上。
コンパイラにもいろいろ都合があるんだよ(リンクとか)。
8MBっていうと、プリコンパイルヘッダーのことか?略してプリコ・・・なんて言わねーよ
プリコンヘ
303:02/04/25 16:06
質問。

VCでwindowsのスタートボタンみたいなコントロールを使いたいんだけど、
(リストの1個を選択する子リストが表示されるやつ)
あれって、何ていうこんとろーるなんでしょうか?
教えてください。
標準のコントロールでなくActiveXですかね?


304日下部圭子 ◆Z/ID97yU :02/04/25 16:10
>>303
普通のメニューを使えばサブメニューも使えるけど、
それではなくて?
305303:02/04/25 16:15
>304
回答ありがとうございます。
メニューでなく、見た目的にコンボボックスとか、
スタートボタンみたいに押下するとリストが出る感じのものがほしいのです。
メニューって、フレームにしかつかないですよね?

306 :02/04/25 16:31
>>305
ボタン押下時にポップアップメニュー出せばいいじゃん
307プロジェクトマネージャー:02/04/25 16:56
あのー質問なんだけど
とりあえず今はメモ丁みたいな、なんもないスケルトン作って
そこに線や円を書かせたりしている、よくVC++の本に
のってるようなことやってるんだけど、

座標x,0で for文でxにx++してって、例えば「●」を、
ヨコにスルーっと動いていくアニメを作りたいんだけど、
一瞬で処理してしまって、アニメどころじゃないです。
そんでベーシックでいうwait50 みたいなスローにさせる
プロフラムってあるの?
308日下部圭子 ◆Z/ID97yU :02/04/25 17:02
>>307
そういうのはタイマーイベントを使って処理するのが普通です。
(Sleep()でウエイトを入れてもいいけど)
309プロジェクトマネージャー:02/04/25 17:04
タイマーイベント?

Sleep(30);

って1文いれると遅くなる?
310308ではないが:02/04/25 17:20
311310:02/04/25 17:22
312プロジェクトマネージャー:02/04/25 17:23
>>310
おーどのライブラリCDいちいちいれないと見れないとおもってたら
ネットでみれるんだ。ドーモ。!
313:02/04/25 17:40
>304
>306
ありがとうございました。
ポップアップメニューの存在を知りませんでした。
早速サンプル作って持っていったら...
SE:「そんなんじゃなくコンボボックスから子リストでるやつないの?」
呪まーす。

314デフォルトの名無しさん:02/04/25 23:36
NULL文字セパレータ、ダブル NULLターミネートな文字列を扱うのに適した
クラスみたいなのってある?
>>314
扱うってどういう風に?
316314:02/04/26 00:12
失礼。ostrstream で解決しますた。
>>313
ムダ飯喰らいのSEだな。
「本当のコンボボックスとはこれのことなのです。」とかなんとか
テキトーなことでも言っちまえ。
吃驚した!
VisualC++って
stdio.hを読み込めないの!?!?

これはC++だから読めないの?
んなわけねー。
よみこめたけど
"StdAfx.h"を読み込んで、
StdAfx.hファイル内で、stdio.hを読み出さないと、
「プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。」
こんなエラーがでる。
なんで??
厨な質問でごめん
VCでWinsockを扱うプログラミングを紹介してるページない?
探し方が悪いのかグーグルでみつからん
>>320
「プリコンパイルヘッダーを使う」という設定になってると、デフォルトで stdafx.h を読み込む
ようになってるよ。この設定のときに、stdafx.h をインクルードしていないと、
エラーになります。それが嫌なら、プリコンパイルヘッダーを使わないようにしよう。
323デフォルトの名無しさん:02/04/26 22:16
初心者ですみませんが
120、30、1200を各々五桁、4桁、10桁で表示するプログラムの作り方がわかりません
教えてください。
324デフォルトの名無しさん:02/04/26 22:25
>>321
あんまりネット上じゃ詳しく説明してるとこしらないなぁ
「WinSock2.0プログラミング」 翔泳社
読んだら為になるとおもうよ
>323
printf("%5d, %4d, %10d", 120,30,1200);
ってことか?
326デフォルトの名無しさん:02/04/26 23:40
>>325
いや、120を五桁、三桁、10桁
30を五桁、4桁、10桁
1200を五桁、4桁、10桁
と表示したいのです。
327デフォルトの名無しさん:02/04/26 23:45
は?
120(三桁)を0埋めで五桁にしたいってこと?
printf("%.5d",120);
ってことかいな?
VCと関係ないけどまいっか
>>326
日本語を勉強しましょう。
329デフォルトの名無しさん:02/04/26 23:49
>>327
てことは
printf("%5d\n",120);
printf("%3d\n",120);
〜〜〜
って9回やらなきゃだめなの?
三つぐらいにまとめれるかなと思ったんだど
まあいいやさんくす
330デフォルトの名無しさん:02/04/26 23:52
すまん。しくじった。
323で書いてるじゃん。
変数を勉強しなせ
>329
"%3d\n"の所とかをsprintfとかで作るですよ。関数にでもすればすっきり。
void ketaput( int keta, int num )
{
char buf[16]; // 適当
sprintf( buf, "%%%dd\n", keta );
printf( buf, num );
}
んな感じで。宿題っぽい気がせんでもないなw
>326
>いや、120を五桁、三桁、10桁
>30を五桁、4桁、10桁
>1200を五桁、4桁、10桁
if( strcmp( str, "120") == 0)
 return "五桁、三桁、10桁 ";
if( strcmp(str, "30") == 0 )
return "五桁、4桁、10桁";
if( strcmp(str, "120") == 0 )
return "五桁、4桁、10桁";
新手の知恵試しか?
五桁、4桁、三桁、10桁と、表記がバラバラなのには意味があるのだろう。
struct {
 int val;
 int dig[3];
} tbl[] = {
 {120, {5,3,10}},
 {30, {5,4,10}},
 {1200, {5,4,10}},
};
int i, j;
for (i=0; i<3; i++)
 for (j=0; j<3; j++)
  printf("\"%*d\"\n", tbl[i].dig[j], tbl[i].val);
VC++ 全然関係ないな…スマソ
>>331
majidewarata。

printfの%桁数指定で * が使えるぞ。
きちんと調べて見ろ。
337VB厨毒:02/04/27 04:02
CHDocVwCtrl ってOCX?dll?
どこにあるんだ?
いろいろ参照しても
オブジェクトブラウザに出ないw
入ってないのかな?
…でも どんなもの?
SHDocVw
339デフォルトの名無しさん:02/04/27 04:46
>>338それは WebBrowserコントロールの元じゃんw

うんとね
検索でたまたま 見つけたの
http://www.users.gr.jp/ml/archive/com/1978.asp
ここで言ってるCHDocVwCtrl って あるの?
だって オレだってVS6.0プロ入れてんだよ 一応 VBとInterDevしか使わないけどw
ほら あれが したいの 
WebBrowserコントロールのカスタマイズ!!
画像読まないとか、スクリプト実行させないとか なんとかインターフェイスいじるでんしょ
VBでできないかな?

みつかんないんだよね だまされたのかw
>>321
WinSock生でそのまま使うの?それともMFC使うの?
ソケット周りだけはMFC使うと鼻汁出るほど便利。
生Socketはめんどい。
>336
そんなのがあるのね・・・逝ってきまふ
342デフォルトの名無しさん:02/04/27 12:17
VC++6.0 Professional Edition
をインストールしようとすると

c:\WINDOWS\System32\MSJINT35.DLL
c:\WINDOWS\System32\VBAR332.DLL

がないって言われちゃうんですけど、
これは重大なことでしょうか?
無視しちゃっても問題ないでしょうか?

OS は XP を使ってます。

よろしくお願いします。
343デフォルトの名無しさん:02/04/27 17:09
今日パソコンショップに行ったら.NETが大々的に売り出されていました。
VCは「4月いっぱいで製造中止!お求めの方はお急ぎください。」という張り紙付きで隅っこのほうに置いてありました。
VCって死滅してしまうんですか?
VC使いは数年後には現在の「COBOLおじさん」みたいな扱いを受けるのでしょうか?
不安で夜も眠れません。
どうしましょう?
VC++.netがあるが?
>>343
数年後になってもVC(というかMFCorWINAPI)使いならばそういう扱いを受けるだろうね。
VCもできるし、.NETも出来るなら問題あるまい。
>>343
それはないと思うが・・・
通常の配列は、デバッグ時に全ての要素を
クイックウォッチで確認することができますが、
CArrayやCObArray系のクラスで作成した配列ではそれができません。
何か別に方法があるのでしょうか。
今はとりあえず、確認したい要素をintやCStringの変数に写していますが、
これはさすがに不便です。

あと配列ついでにもう1つ。
CArray、CObArray系で多次元配列って作れますか?
>>347
矩形配列は無理だけどでこぼこ配列なら可能。
>>340
MFCを使えば鼻汁出るほど便利なのか・・・
Cから生で使うには本買った方がいいかな・・・
本屋逝ったけど売ってなかった。
取り寄せしかないか
どなたかいい本してくれませんか
要求ばかりで申し訳ない。
>>348
凸凹配列ってどんな配列ですか?
検索しても1件しかヒットせず……。
その一件を読め
>>349
たしかMAGURO Onlineあたりにサンプルがあったと思うんだが、今は休止中で
過去のコンテンツが見れないね。

とりあえず、TCPの簡単な流れだけ書いておくと、まず最初はWSAStartup()で
WinSockの初期化。これは必ず必要。終了時は同様にWSACleanup()。

■サーバ側
socket(AF_INET,SOCK_STREAM,0) ソケットハンドルを得る。引数はこんな感じで
bind() 通信に使用するポートを指定する。IPアドレスはINADDR_ANYでいい。
listen() クライアントからの接続を待つ。
accept() 接続を受理する。
send(),recv() データの送信、受信
closesocket() 通信終了

■クライアント側
socket(AF_INET,SOCK_STREAM,0) ソケットハンドルを得る。引数はこんな感じで
connect() サーバに接続する
send(),recv() データの送信、受信
closesocket() 通信終了

使用する関数と順番はこんな感じ。
ただし、send()やrecv()はデータが来てないときや送信できないときに呼ぶと
ブロックして戻ってこないから注意。select()でポーリングするか、WSAAsyncSelect()
でウィンドウメッセージで通知してもらうことで回避できる。

その他の便利な関数を挙げておくと
gethostbyname(),WSAAsyncGetHostByName() ホスト名からIPアドレスを取得
htonl() 32ビット値をネットワークオーダーに変換(エンディアンの変換)
ntohl() htonlの逆
inet_addr() ドット区切りのIPアドレス文字列から32ビット値に変換
inet_ntoa() inet_addrの逆
354悩みつづけて3ヶ月!:02/04/28 03:11
下のようなちょっと大きめの3次元配列の定義の仕方を教えてください。

double val[3][100][100];

出来ないはずはないと思ったのですが、いざ定義してみると
ビルドはできるのですが実行ができないのです。
Cマスターの方々、この理由と解決策を宜しくお願いします。
static double val[・・・
なんだマルチか
vector<vector<vector<double> > >で解決だ!
環境がおかしい。
double三万個(240KB)くらいではスタックは余裕。
359悩みつづけて3ヶ月!:02/04/28 03:35
vector???
なんですか?それ?
無知で申し訳ないです。
>vector???
>なんですか?それ?
>Cマスターの方々、この理由と解決策を宜しくお願いします。
ここはCスレじゃなくて、C++スレだよ。
>360
しばらくすると、そこには、「VisualC++(C言語限定)スレ」の文字が‥‥
362初心者:02/04/28 10:50
VC++てなんて読むんですか?
びじゅあるしーぷらすぷらすと読むも良し。
ぶいしーぷらぷらと読むも良し。
えむえすしーと読むも良し。
発音を拒否しても良し。
ご自由に。
364初心者:02/04/28 10:58
ありがとう!
>>354
コンパイラは何? 実はVC++ 1.0 とか、LSIC試食版ってオチはない?
>>365
VC++ 1.0 はいいとして、LSI-C はねーだろ。スレ違いだ。
そもそも、こいつは...
http://pc.2ch.net/test/read.cgi/tech/1019372139/61- とマルチし
てる奴で、しかもそっちで解決してるから無視でいいよ。
>>350
遅レスでスマソ。
矩形配列ってのは int array[2][2]; (Cの2次元配列)
でこぼこ配列ってのは int *array[2] = { new int[4], new int[1] };(配列の配列)

つまり、CArray自体を2次元として扱うことは出来ないけど、CArrayの中にCArrayを要素として持てば、それっぽいものは出来るってこと。
>>367
で、それをどうやってデバッグするの?
>>368
メモリウィンドウのアドレス欄に
CArray< CArray< int > > array ならば
array.m_pData[index].m_pData
と書けば array[index] の int 配列がみれる、もっとスマートな方法は、漏れは知らない。
370デフォルトの名無しさん:02/04/28 16:28
VC++から.netへ移行するならVC++.NET?C#.NET?
>>370
VC++.NET
>>370
MSの記事によると、VC++ Proからの移行はVS.NET Proだそうだ
>>
回答どうもです。
そっかー、配列の中に配列を入れる、って手があったか。気づかなかった。
ありがとうでした。
374 ◆nktTSMw2 :02/04/28 21:25
VC++であるソフトからある座標の色の情報を取りたいのですが、
VC++でそのような事は出来ますか?
また、出来るのならばそれを定期的に監視することは出来ますか?
これらの事が出来るのならば、VC++使い始めてどれぐらいで出来るようになりますか?

質問いっぱいですいませんが、そのやり方なども教えてくれると嬉しいです。
日本語下手ですんまそん
>>374
自作する必要性があるから訊いているんだろうけど、その前に、
http://www.hikarun.com/w/
このソフトをDLして使いなされ。これを使った上で、自作する必要が
あるんなら、そのときまた改めて訊くべきことを訊きなよ。
376 ◆nktTSMw2 :02/04/28 21:42
>>375
ありがとうございます
早速使って見ることにします
「引数」 は「ひきすう」ですか? 「いんすう」ですか?

場違いですか?でも知りたいんです。
どうなんですか、みなさん?
>>377
http://www.kumei.jp/c_lang/intro/no_03.htm
↑「ひきすう」らしい。
379デフォルトの名無しさん:02/04/30 17:01
そーだたんだ。
でもエキスパートはみな「あーぐめんと」ですか?
380デフォルトの名無しさん:02/04/30 17:22
あーぎゅめんとだな
381デフォルトの名無しさん:02/04/30 18:13
日本語化ソフトの作り方教えてくだされ。。。
>>381
まず、どこまで日本語に対応するのか明確にせよ。(そもそもどういうソ
フトを組んでんだよ。)
>>381
CreateFont〜系をフックして欧文フォントが選択されたら、
Unicodeフォントか日本語フォントをCreateして返し、
TextOut〜やExtTextOut〜系API等の文字列を受け取るAPIをフックして、
自動的にExciteなり自前なりで翻訳して、翻訳結果を画面に表示。
もちろん、lstrlenとかそういうのも全部フックしてくれ。
384381:02/04/30 18:53
あんがと。けど俺には理解できんかった・・・。
>>383
それ、絶対失敗する。なんか自信ある。
>>385
ネタに突っ込むなよ。かっこ悪いぞ。
>>381
少しは自分で調べろよ。その程度の努力もできない奴は
Hellow Would!!出力プログラムでも作ってろ。
実数を一つ入力して(%lf)、全体の桁数を10桁として、それぞれ小数以下を
3桁、2桁、1桁で表示するプログラムを作りなさい。(%10.3f、***、***) ***
は各自決定せよ。
という問題があるのですが誰かわかりませんか?
宿題スレにどうぞ。
390デフォルトの名無しさん:02/05/02 11:38
「VC++」
で処理をゆーっくりにするコードはなんですか?
たとえば、●を ツーっと横にアニメションで動かしたい。
この場合、ノーマルだと一瞬で絵画してしまい
単なる横棒になってしまう。
これをゆくり移動させるにはどしたらよいのか?
BESICでいうwaitってやつ。

また、このままだとよこに棒ができてしまう。
あくまでボールを動かしたい。
BASICでいうCLSにあたるものはなに?

なんだかソースを加えるだけでできるの?
>>390
この前とおなじやつか?
あの説明でわからなかったら何度聞いても同じ。
392デフォルトの名無しさん:02/05/02 12:40
>>390
wait,clsつくるよろし。
>>391-392
別のスレで同じ質問が出て回答もされてる。
394デフォルトの名無しさん:02/05/02 12:43
BESIC
>>394
そこに突っ込むかい…
あっちのスレでもまんまコピペしてるから同じミスがあるなw
396ダルシム:02/05/02 21:13
VC++6.0やってるんだけど、

// CTestView クラスの描画

void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: この場所にネイティブ データ用の描画コードを追加します。
int s;
s=10;
pDC->TextOut(200,6," 変数sを表示したいのだができない ");
pDC->TextOut(300,30,s);
}


なんだか、sは10と表示されず文字コード?みたいなので、謎の文字が出てしまいます。
どうしたらいいですか?

まずCを勉強してください。
398デフォルトの名無しさん:02/05/02 21:24
まじでCからの勉強が必要です
399デフォルトの名無しさん:02/05/02 21:26
なにこのスレ・・面白すぎる。。
CDC::TextOut() は、

virtual BOOL TextOut( int x, int y, LPCTSTR lpszString,
int nCount );
BOOL TextOut( int x, int y, const CString& str );

と言う風に定義されてるから、要は LPCTSTR (要するに char *、つまり
普通の文字列) か、CString (C++ の便利な文字列型) を受け取るわけ。
どうせ MFC 使うなら CString の方が便利だから、CString の勉強をし
よう。ヒントをあげとくと、CString::Format() あたりが近いと思う。
401ダルシム:02/05/02 21:31
なんだかもうわかんないです
要するにTextOutではint型の変数は表示できません、てこと。
403デフォルトの名無しさん:02/05/02 21:37
VCをつかっててふとおもったのですが、
アウトプットウィンドウのようなウィンドウを作るにはどうしたらいいんでしょうか?
エディットボックスとかシェルまわりかと思ったのですが、情報不足でよくわかりませんでした。
ご存知の方がいらっしゃいましたらぜひ教えてもらえないでしょうか?
404デフォルトの名無しさん:02/05/02 21:38
2chで聞くより先にMSDN見れ。
405デフォルトの名無しさん:02/05/02 21:38
char* s = "10";
406デフォルトの名無しさん:02/05/02 21:46
CString s = "10";

or

CString s("10");

も可
CString s = _T("10");//のほうが俺はうれしい。
408403:02/05/02 23:36
> 404
どの辺りをみればいいかさえよく分からないのですけど・・・。
バカですみません。
>>403
何を聞きたいのかあいまいすぎてわからん。
サイズ可変のドッキングバー -> CSizingControlBar でも検索するよろし。
編集不可能なエディット -> ReadOnly の CEdit の背景かえるだけでもよろし。
コンパイラとかの出力の取得 -> パイプを使えばよろし。(詳細忘れた)
410デフォルトの名無しさん:02/05/02 23:45
404です。
>>403,408
スマソ。カキコのタイミングが悪かった。
ダルシム宛なんで気にしないで下され。

ついでに。
アウトプットウィンドゥってVisualStudioのようなヤシが希望ですか?
とりあえずCEditでググってみれば?

OutputDebugStringを受け取りたいんじゃないか?
412403:02/05/03 00:16
一応、コンソールの出力を取得の仕方が知りたかったのですが、説明不足でしたね。
すみません。
どうもありがとうございました。
413_T("hoge"):02/05/03 00:38
UNICODE アプリ作ってる人って多いんですか?
414L"hoge":02/05/03 01:38
おらは UNICODE 専用アプリしかつくらん。
415デフォルトの名無しさん:02/05/03 06:45
あの〜
”〜.lib 外部シンボル "_main_initialize" は未解決です”
って100万回くらい言われるんです。
どうしたら良いでしょうか?
やっぱり死んだほうがいいですかね。
というアフォな事は質問しても良いですか?

ライブラリは全てぶち込んであります。
VC++6.0です。
本当に100万回だったら何かが壊れてる
console/windowsのFAQ?
418415:02/05/03 10:28
あ、えっと1回のコンパイルでじゃなくて
何回試しても、という意味です。
コンソールアプリの話です。
というか初心者です。

>>415のようなメッセージに対して
libの設定はあってる、となると
次に何を疑えばいいのかわからず
途方に暮れてる次第です。
>>418
main_initialize() って関数か、main_initialize って変数 (だった
ら、命名の仕方を疑うが...。) がどっかで呼ばれてんじゃねーの ?
とりあえず、全ソースに対してファイルから検索かけたら ?
420415:02/05/03 11:50
もうだめぽ。
諦めるYO。
外部シンボル恐怖症でつ。

えらーメッセージは
main.lib(pcacis.obj) : error LNK2001: 外部シンボル "_main_initialize" は未解決です
です。

>>419さんに従って検索しましたが
_main_initializeはmain.libにしかなく
main.libはちゃんと入ってます。

main.lib作った人にききましゅ。
421デフォルトの名無しさん:02/05/03 13:42
>>420
main.lib がCで作られていてC++のプログラムから使おうとしているなら
C++のプログラムで

extern "C" _main_initialize( 引数リスト )

で宣言しておかないとリンクに失敗するぞ。
422デフォルトの名無しさん:02/05/03 13:44
winsock のラッパーを書きたいんだが、
雛形とかどっかない?
使用を調べるの画面。
423415:02/05/03 14:08
>>421
Thx!でもダメでした。メッセージ変わらず。ありがd!
>>422
そんなプログラムWANに解放するなよ
>>421
それ、反対。そのケースなら、

test.obj : error LNK2001: 外部シンボル ""void __cdecl
main_initialize(void)" (?main_initialize@@YAXXZ)" は未解決です

と言う風に言われる。

main.lib(pcacis.obj) : error LNK2001: 外部シンボル "_main_initialize"
は未解決です

と言うエラーメッセージは、main.lib を構成している pcacis.obj が、
main_initialize() と言うのを使ってて、それを誰も定義していないことを
示している。ありがちなのはそのライブラリ使う時は、main_initailize()
って言う関数を定義しておくと、最初に一回呼ぶから必要な初期化をしてね。
と言うようなケース。

> main.lib作った人にききましゅ。

と言うのが正解。
426デフォルトの名無しさん:02/05/03 23:57
typedef int MYINT;
struct C{
  template<typename T> void foo(T t){}
  void hoge(void){
    foo<MYINT>(10);
  }
};

VC6で上のコードが通らないんだけど、これはVCの制限だよね。
もしかして、VCってかなり糞?
>>426こういう書き込みしたがる厨結構いるよなぁ
428貧乏人(^^):02/05/04 00:35
gccじゃ金あんま稼げないみたいなんでVC++か.NET(アカデミ)どっち買うか
迷ってるんですけど,どうしたらいいんですかねー。
このスレの住人からみてVCってあと何年くらい持つとおもいます?
>>427
だねぇ...。template 使ってて、struct C { だからねぇ...。まあ、
GW だからしょうがないかな。

>>426
なにしたいのか良くわからんけど、とりあえず直しといたからもう来る
なよ。

typedef int MYINT;

template<class T> class C {
private:
 void foo(T t){}
public:
 void hoge(void){
  foo(10);
 }
};

int main()
{
 C<MYINT> x;
 x.hoge();
 return 0;
}
430427:02/05/04 00:43
>>429
いや、残念ながらそういう事じゃない。
VCの既知の制限をいちいち持ち出して糞呼ばわりする奴って事。
そんなこと言い出したら、Lokiが通らないbccだって糞だしな。
431426:02/05/04 00:52
>>427
これって広く知られた制限だったのね。知らなかったよ。
メンバーテンプレートをはじめて書いて通らなかったんでおかしいなと思ったのよ。
まあたしかに糞は言い過ぎた。

>>429
GWだな
広く知られたどころか、readmeに書いてあるよ。
readmeなんか読んでられるか糞



というafoが多いのでこういうカキコがあるわけですね
434422 :02/05/04 07:57
>>424
しないよ。
単純にプロトコル解析したいだけ。
とある糞アプリをFreeBSDに移植したい。

ちゅーか誰も雛型があるところしらねーのか?
それとも、そんなもん公開してるやついないのか?
雛型が必要なほどのものじゃないぞ?
っていうか聞く前に検索くらいしてみたら?
snifferとかmonitorとかcaptureとか適当な単語と組み合わせれば、
そういうソフトはいくらでもあるし、Cで解説してるページもいっぱいあるけど。
436デフォルトの名無しさん:02/05/04 12:50
WinMain
関数が WM_QUIT メッセージを受け取って終了したときは、
メッセージの wParam パラメータが持つ終了コードを返してください。
関数がメッセージループに入る前に終了したときは、0 を返してください。

ってあるのに、オープンソース眺めてみると、

int WinMain( 省略 )
{
  try
  {
    初期化();
    実行();
  }
  catch( 省略 )
  {
    例外処理();
  }

  return 0;
}

こんなのが非常に多い!
WinMain の戻り値って常に 0 でも問題ないの?

PostQuitMessageで0しか返さないならそれでもいい
まあ、火さえ噴かなきゃ何でもいいんじゃないの?
439436:02/05/04 13:03
>>437
なるほど! ありがとうございます。

でも、そうすると、WinMain の戻り値って何の意味があるんでしょう?
何かを Windows に伝えることができるんでしょうか?
OSにエラーコードを返すのが流儀だからだろ。
最近はエラーが起きたらエラーコードを返すんじゃなくて、
abort()で人間にその旨を伝えるのが普通だな
441436:02/05/04 13:12
>>440
納得しました。
ありがとうございました。
442デフォルトの名無しさん:02/05/04 23:34
すいません。
WTLで教えてください。
WTL/ATLウイザードからプロジェクトを作ると
メインフレームクラスとして、
class CMainFrame : public CFrameWindowImpl<CMainFrame>〜 「MainFrm.h」
が生成されるんですけど、ヘッダファイルのみなんでCPPファイルを新たに自作すると
コンパイルが通らなくなります。
「error C2504: 'CFrameWindowImpl' : 定義されていない基本クラスが宣言されています。」
などと怒られてしまいます。
何が足りないのでしょうか?
cppを作成って何だ?
空のcppをプロジェクトに追加するだけでエラーがでるのか?
444442:02/05/04 23:54
>>443
「MainFrm.cpp」です。
中身はコレです。コレでアウトです。

// MainFrm.cpp : interface of the CMainFrame class
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MainFrm.h"

CMainFrame::CMainFrame()
{
}
CFrameWindowImpl
がどこに定義されているのかよーく考えてみろ。
446442:02/05/05 01:52
>>445
解決しました。ありがとうございました。
今回のトラブルの原因であり、
これは前々から思っていたことなんですが、
例えばあるヘッダファイル「A.h」があったとして
「A.h」は「B.h」を参照する仕様な場合、
#include <B.h>はどこに書くのが正しいんですか?
「A.h」を参照するのが、「C.cpp」ただ1つの場合
「C.cpp」に、
#include <B.h>
#include <A.h>
と書けばOKですよね。今回のWTLのソースもその方式でしたし。
でも他のファイルから「A.h」を参照したい場合これじゃダメですよね。
「A.h」の中で #include <B.h> を書かないと。
実際どっちが正しいんですか?



少なくとも、VCに限っては一つのヘッダにごっそり
#includeを入れて、そのヘッダを各cppの先頭で#includeするのがいいとおもう。
もちろん、プリコンパイル済みヘッダを作って
448442:02/05/05 02:14
>>447
なるほど、プリコンパイル済みヘッダってそういう
用途で使うもんなんですね。
自分は小規模なプログラムしか組んだ事が無いので
いままで気にしてませんでした。
勉強になりました。ありがとうございました。
プログラム自体は小規模でも、
STLとか使うなら、プリコンパイルするだけで10倍近く早くなるケースも多いよ
20〜30倍もザラですよ
451デフォルトの名無しさん:02/05/05 04:15
はずかしながら、nkf32.dllを、VC6の自作プログラムにどう組み込んでいいのかわからんです。
試した方法:

0.プロジェクトのライブラリにnkf32.libをおく。
1.#pragma comment(lib, "nkf32.lib")を使用するコードに入れる。
2.プロジェクト->設定->リンクにnkf32.libを追加

どうやってもLNK2001が消えないです・・・
452デフォルトの名無しさん:02/05/05 05:46
俺は自慢ぢゃないが
COMしか使ったことないから
生のDLLはサッパリだぜ!
いさましいチビの女の子の元ネタって何?
トースター。
>>451
#pragma〜と書いたらプロジェクトの設定にはいらない。
libがある位置をよく確認
456デフォルトの名無しさん:02/05/05 18:14
>>455 どうもです。

夕べ寝る直前に気づいたんですが、自分はC++のコードを書いてるので、
extern "C"が必要だったんですね。

とおもってよく見たら、>>421に答えが書いてあったりして・・・
お騒がせでした。
>>446

A.hがB.hを必要としているなら、
A.hでインクルードする。
(どのヘッダファイルを単独でインクルードしても
 コンパイルが通るようにする)

ただし、「全て」のヘッダファイルで2重インクルード抑止する。

というふうにしてます。


458デフォルトの名無しさん:02/05/06 19:02
初心者です。
VC++6.0使ってます。
よろしくお願いします。

Win32 Application ってプロジェクトで作ったやつをビルドすると

リンク中...
nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__endthreadex" は未解決です
nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__beginthreadex" は未解決です
Debug/WinMogu.exe : fatal error LNK1120: 外部参照 2 が未解決です。
link.exe の実行エラー

って出ちゃうのですが、
コンパイルはできているってことですよね?
何がいけないのでしょうか?
よろしくお願いします。
-MT
もしくはプロジェクト>なんか>ライブラリ(マルチスレッド)選択
MFC使ってるのにプロジェクト設定でMFCを使わない設定にしてると
そのエラー出るね
461458:02/05/06 19:27
>>459
レス、ありがとうございます。

MTオプションつけてビルドしてみたら
LNK4098 エラーが出ました。
(ライブラリが矛盾してるだとかなんだとか)
MSDN読んでもあんまりピンとこなくて、
とりあえず、
関係ありそうと思ったところで、リンクの設定で
「デフォルトライブラリをすべて無視」
ってのを選択して実行してみたら、エラーが120個出てきて、
で、リンクの設定を元に戻してまたビルドしてみたら、
実行できました。
う〜ん、解決したのだろうか・・・。
>>461
コマンドラインなら-MT
統合環境なら プロジェクト>C/C++>カテゴリ[コード生成]>使用するランタイムライブラリ
を変更
463458:02/05/06 19:39
460さんのおっしゃっている通り、
MFCを使わない設定になっていました・・・。
ただ、
461で書いた方法でビルドが完了したのが不思議なところですが。

お騒がせ致しました。
別スレで質問したのですが
解決しなかったのでこちらでもう一度お願いします。
VC 6.0と.NETともにデバッグしようとすると
かなりの確立でVCがフリーズします。
Win2000,XP両方発生します。
具体的にはF5押すとエディタがデバッグの画面に切り替わり
その後直後フリーズします。その際他のウィンドウとかも
巻き込まれます。タスクマネージャーは立ち上がらないのですが
1分ほど時間が経ってから閉じるボタンを押すと
「応答がない」のダイアログがでて何とか終了できます。
終了すると他のウィンドウなどは元に戻ります。
調べられる限り調べたのですがだめでした。
ちなみにノートンは切ってありますし、
オーバークロックもしておらず
オプションのデバッグ項目はデフォルトで使用しています。
SBLive挿してるのが怪しいといわれましたが
今回は関係なかったようです。
ご存知の方おられましたら教えてもらえないでしょうか?
板違いだったら教えてください。
よろしくお願いします。
タスクトレイに何にも表示しないようにしてみて。
(特にIME)
466464:02/05/06 22:44
>>465
タスクバーから出してもだめでした。
ノートンアンチウィルスはオフじゃなくて
アンインストまで試した方がいいですかね?
同じ状況の人はオフでいけた例があるみたい
なのでオフで無理なら関係ないと思ってますが。
えっとまとめておくと
ノートンオフ、IMEもタスクバーの外の状態で
固まってしまいます。
デバッグできなくてさすがに辛いので
すこしでも情報あれば提供くだされば助かりますので
よろしくお願いします。
>>464
あのさ、ここで解決しなければ今度はまた別のスレに貼るわけ?
いい加減にしてくれ。
どうしても解決が必要なら、MSにサポートしてもらえ(まぁ、解決するとは思えないけどな。
割れ厨だったらあきらめろ
>>466

タスクトレイに何も表示しない...
ってことはタスク領域自体が無くなるはずなんだけど、
そうなってる?
>>468

タスク領域=タスクトレイ領域
他のアプリ全部切った上で、
「デバッグ」メニューからの「デバッグ開始」は試したのなら、もう、手の打ちようが無いと思われ。
DirectInputでJoystick入力をさせるためにクラス化しようとしました
コールバック関数はクラスの中に置くことができないので
http://kobe.cool.ne.jp/solo2000/CInputControl.h
http://kobe.cool.ne.jp/solo2000/CInputControl.cpp
このようにしたのですが、当然これではlpInputとlpDeviceにアクセスできません。
このコールバック関数からlpInputとlpDeviceにアクセスすることはできないでしょうか?
>>471 超FAQ
hr = lpInput->EnumDevices( DI8DEVCLASS_GAMECTRL, EnumDevicesCallback, (void*)this, DIEDFL_ATTACHEDONLY );

BOOL CALLBACK EnumDevicesCallback( const DIDEVICEINSTANCE* pdidInstance, LPVOID pContext )
{
CInputControl* pThis = reinterpret_cast<CInputControl*>(pContext);
Set,Get系関数は無いのか?
>>472
ありがとうございます、早速調べてみます
>>473
初期化でこけているのでそこまで製作しておりません

thisポインタは関数を呼び出したオブジェクトへのポインタ
reinterpret_cast演算子はポインタ型に変換

まだVisualC++の知識は未熟なので詳しいこと輪分からないのですが
つまり(void*)thisはvoid形のポインタ
CInputControl* pThis = reinterpret_cast<CInputControl*>(pContext);は

CInputControlのポインタpThisにvoid型のポインタpContextが保持するアドレスを
変換して代入するということだと私は解釈しました。
そしてCreateDeviceと同じ内容の関数をCInputControlクラスに含ませておき
CInputControlのポインタpThisからそれを呼び出せばいいということだと判断した私は
このように改良しました。

http://kobe.cool.ne.jp/solo2000/CInputControl2.h
http://kobe.cool.ne.jp/solo2000/CInputControl2.cpp

実行してみたところエラーも出ず初期化は成功したと思います
本当にありがとうございました。
475デフォルトの名無しさん:02/05/07 01:31
>>474
外人?
476464:02/05/07 01:33
アドバイスありがとうございます。
467<<
えっと聞こえの悪い書き方してしまいました。
微妙に板違いだったのでこっちの方が的確な
アドバイスもらえると思って書き込みました。
すみません、MSのサポートは
467さんの想像通りで(笑)
いくつかドライバー関連の不具合(?),アプリの競合などなど
アドバイスもらったんですが特に当てはまらなかったので
諦めてしまいました。
468>>
残ってるのは
・アンチウィルスのアイコン(無効になってます)
・ボリューム調整するやつ。
のふたつです。
ノートンのやつ消すにはアンインストですね。
関係ないと判断してしてませんでした。
明日にでもさっそくアドバイス通り
やってみたいと思ってます。
470>>
もうひとがんばりしてみたいと思います。
せっかくMFC覚えたんですし。。
ながながすみません、また明日にでも報告いたします。
>>476
基本だが、VC自体の再インストールはしたのだろうな?
ノートンはダイアログボックスからプロセスそのものを切ってみたか?
そしてリブートはしたか?
>>472
void*への変換はC形式、戻すときはC++形式のキャストを使ってるのは何か理由が?
>>478
それ以前に、任意のポインタ型から void* へは暗黙のキャストで済むような気が。
>>478
あ、ミスだ(藁
長いからC形式になおして、callback側で直し忘れただけ
正直static_castはうざいだけと感じるんだけど、皆さん使ってます?
つかってる。

必要な場所ってそれほどないと思うが?
>>476
その現象は私の持っているThinkPadでもよく起こります
VisualStdioとDX8Librayのみをインストールしても起こりました
これは困りますよね

>>475
日本人です、思ったことを文章にするのが非常に苦手なのです

これで落ち着きました
http://kobe.cool.ne.jp/solo2000/CInputControl.h
http://kobe.cool.ne.jp/solo2000/CInputControl.cpp
んー、reinterpret_castとconst_castしかつかわねー
double->intみたいのに使う。
int*とchar*の変換なんかのときはstatic_castとreinterpret_castのどっちが良いんだろう。
int*とchar*の内部形式が同じとは限らないからstatic_castのほうが無難?
いまさらそんなこと気にせずreinterpret_castで行くほうがいい?

・・・スレ違いか・・・。
>>486
内部形式が同じとは限らないからreinterpret_castを使うべきだろ。
ポインタはvoid*との交換の時だけじゃないか?<static_cast
>>487
内部形式が違うならreinterpret_castはまずいのではないでしょうか?
内部形式が違う=変換不可能であればコンパイル時エラーになる。
だからこそreinterpret_castでよいのだ。
>>489
なろほど。
内部形式が違う==コンパイラが変換を行う。
という状況を想定していたけど、
そういう場合ならばstatic_castのほうが適切?
static_castは暗黙の変換が存在する場合にだけ有効じゃなかったっけ。
reinterpretはビットパターンを操作しないと理解している。
とりあえず、484は逝ってよい。
493デフォルトの名無しさん:02/05/07 12:18
ダイアログ上のエディットボックスをサブクラス化しているんですが
エンターキーを WM_KEYDOWN で検出したいんですがデフォルトのボタンがある場合などは
どっかでメッセージが処理されてエディットに WM_KEYDOWN が来てくれません。
サブクラス化しているエディットにフォーカスがある場合はデフォルトのボタンなどに関係無しに
エディットがすべてのキー入力(WM_KEYDOWN)を受信できるようにするにはどうしたらいいですか?

余談ですが今月中に.Netを購入しようしようと思うのですが
どれを購入するのがいいですか?
個人的に使用するだけだけなのでC#、VC、VBの単体パッケージのどれかを購入する予定です。
Win32アプリを作るならVC++6.0で十分ですよね?
C#が妥当ですかね?
494デフォルトの名無しさん:02/05/07 14:29
CSVファイルで保存したデータを自己参照構造体に読み込む方法は
ありますか?
あるます。
494
面倒ならCListかvectorでも使え
すみません、質問です。
VisualC++は0から始めたとして、
どのくらいで一通り覚えられますか?
ちなみにプログラムは殆どやったことがないのですが。
個人差があるが、
そんなことから人に聞いているようじゃ10年たっても無理
同意
すみません、質問です。
株取引は0から始めたとして、
どのくらいで一通り覚えられますか?
ちなみに買い物は殆どやったことがないのですが。

とおなじくらいバカ。
すみません、質問です。
セクースは0から始めたとして、
どのくらいで一通り覚えられますか?
ちなみにティムポは殆ど起ったことがないのですが。

とおなじくらい(以下略)
100人が思いついて99人が思いとどまったネタを書いちゃう勇者ハケーン
503464:02/05/08 09:12
>>464
の状況ですが結果報告しにきました。
えっと直りませんでしたがほとんどデバッガが
起動しない状態から3分の1くらいの確立で起動する
に改善しました。
まずIMEをタスクバーから出すと
デバッガの起動成功確立はまったく変わりませんが
固まってもバツボタンの反応がよくすぐに
「応答がない」ウィンドウが出るので復旧しやすくなりました。
ノートンはタスクバーから出しても関係なくて
「停止状態」にしておくとフリーズの確立が
3分の1まで下がりました。
まぁ万事解決とまではいきませんが
なんとか実用範囲になりました。
みなさんありがとうございました。
長文失礼。
Winプログラミングでメモリの確保のしかたは、
結局どれがいいのですか?HeapAlloc?malloc?new?
ALL APIで組んで new とか使うのがなんだかいやです。
newをオーバーライドして、中でHeapAlloc?
みんな、どうしてますか?
505ほげ ◆m4g7rP2k :02/05/08 16:33
[質問]他プロセスが握ってるソケットの受信バッファを読み書きしゅる

というのはできるのかお前ら教えてください。
相手プロセスの受信バッファの位置をしらべて
CreateFileMappingとかVirtualAllocExとかって路線で
いけるの??
でも可変長なデータだから単純に書き込もうとすると
随分奇怪なことをやらなきゃだめそうな気がしないでもないな〜
って言ってみるテスト
なんか便利なAPIないのかしら〜
DuplicateHandle
507ほげ ◆m4g7rP2k :02/05/08 19:00
oh! MSDNで調べてみたYO!
それでソケットのピーコが作成できるようなこともわかったYO!
っていう認識であってる?
でもねでもねでもね、漏れがやりたいことができそうにない?
ってかわからない!

まずやりたいことを説明しよう。
508ほげ ◆m4g7rP2k :02/05/08 19:01
登場人物
・サーバたん
・クライアントたん
・ツールたん

前提
・サーバたんはクライアントたんに文字列を送信してくる。
・クライアントたんは受信した文字列を表示する。

本題
ここでツールたんを作成し、本当はサーバたんから文字列が
送信されてきてないんだけど、さも送信されてきたかのように
クライアントたんを騙したい!!
ツールたんとクライアントたんは同一PCであり、
サーバたんは別PCである。

ゆえにツールたんでは、クライアントたんのソケットの受信
バッファに嘘データをカキコすれば騙せるのでは?と
考え、>>505 のような質問をした次第である。
先に言えというのは板違いだ きっと
実現方法について追加キーワード求む!
ソケットをピーコして、そのソケットに垂れ流せばいいんでないの?
>>504
malloc も new も中身は HeapAlloc だよ。たしか。
511ほげ ◆m4g7rP2k :02/05/08 19:11
>>507
ピーコじゃなくて参照か。
>>510
でかいのは直接HeapAlloc。
小さいのはHeapAllocしたでかいブロックから小分けにしている。
たしか。
513ほげ ◆m4g7rP2k :02/05/08 19:33
>>509
>ソケットをピーコして、そのソケットに垂れ流せばいいんでないの?

具体的にはどうやってやるの?
そのソケットに接続して流すってこと?
接続できるのかな?
すでに接続済みだから接続できないと思われ(?)
接続済みならsendすればいいやん
515ほげ ◆m4g7rP2k :02/05/08 20:15
自分にsendできるんだ?
ちとMSDN調べますw
>>515
煽るのは勝手だがお前根本的に何かが間違ってる気がする。
517デフォルトの名無しさん:02/05/08 20:28
VC++ 6.0+SP5 wIn2000pro SP2

spy++立ち上げてる時にファイルオープンダイアログを起動するとOSが固まってしまいます。
なにか対処法はありませんか?

ダイアログを開いたときに受け取るメッセージが確認できれば、用なしなんですが。
>>513
Duplicateする対象(ハンドル)をよく考え直せ
519ほげ ◆m4g7rP2k :02/05/08 20:38
>>516
どのへんが違うのか知りたい。

漏れの解釈
ツールでHeapAllocをコールしてクライアントのソケットへの参照を取得。
その参照にsendすればサーバに送信される。
520ほげ ◆m4g7rP2k :02/05/08 20:47
コピーしたとこ間違えたw
>ツールでHeapAllocをコールして
ツールでDuplicateHandleをコールして
に訂正・・しゅん
HeapAllocじゃソケットへの参照はとれない
522仕様書無しさん:02/05/08 20:54
#pragma onceって
同じヘッダーファイルを二度インクルードしないように
コンパイラに指示するためにあるんですか?
>>522
そうです。昔ifdefでやってたのの代用。
.NET?
VCなら5のころから使えたんじゃない?
>>520は書き方凝らなくていいからもっと理路整然と書け。
>>523
鋭いですね。房ですみません。CはLinuxでしかやってませんでした。
いや、最近いろんな言語の勉強一気にやってるから。
標準C++の話だったかVC++.NETの話だったか混乱。
#pragma
は処理系依存でしょ。
C99だと標準オプションもあるけど
529デフォルトの名無しさん:02/05/08 21:18
便乗で折れも教えて。
#pragma const_seg( "MY_DATA" )等の
セクションって何?
この場合、MY_DATAってどういう使い方が出来るの?
職業プログラマはg++でみっちり標準C++をやる、なんて余裕がないのが辛いね
g++で標準C++はちょっと・・・
>>531
lokiの通らないVC++よりはいいだろ
>>530
gccっていまだにVCでいうプリコンパイル済みヘッダ
ないでしょ? C++使う気がしない。
そのせいでUNIX系ではいつも素のCだ。
なんか変だけど。
(それとも俺知らないうちにできてた?)
>>532
それは同意
>>532
Lokiが通らないのが糞ならほとんどのコンパイラは糞だ
そもそも、実務であんなヘビーなテンプレートの使い方をすることはめったにない。
ちょっとLokiが話題になったからと、Lokiが通らない=糞とか
VCを糞呼ばわりしたいだけの厨がいっぱい居るのがそもそもの問題
>>533
>gccっていまだにVCでいうプリコンパイル済みヘッダないでしょ? C++使う気がしない。

これは何に対する言い訳?
>>535
勉強に向くかどうかと、現実的な要求に応えるかどうかは
全く別の話。VCを糞呼ばわりしたいのは少なくともここにはいない。
538デフォルトの名無しさん:02/05/08 21:45
>>536
謎だな。だいたい VC でプリコンパイルヘッダを使うのは C++ 云々よりも、巨大な
windows.h 用だし。

(まぁ g++ でもプリコンパイルヘッダ欲しいんだけど)
>>538
はぁ? おまえの方が謎。
windows.hなんて大して負荷にならない
STLヘッダをいくつも#includeする方が何十倍も負荷になる
VCのプリコンパイル済みヘッダって1個しか指定できないのかなぁ?
標準ヘッダなんかのほとんど変更しないものと、
たまーに変更するけど毎回コンパイルするのはちょっと嫌なものを分けられたら便利なんだけど。
統合環境じゃ1つだけみたいだけど、
コマンドラインなら複数指定できるよ
542533:02/05/08 22:01
>>539

そうだよね。
C++だとコードのかなりの部分をヘッダに置かざるをえないから
C++は・・・って書いたんだけど通じなかったかな?

>>536
言い訳うんぬんってのはどうゆう意味?
>>539
なんか勘違いしてると思う。使い方調べれ。

>>540
なんかいいことあるの?
>>543
リファレンス一個ずつずれた。
>>543
リファレンス一個ずつずれた。
540と541
>>544
敢えてポインタと呼ぶのも一興。
>>544
どうずれた?
>>543 - 545
しかも勘違いしてるのは俺だった。
ごめんなさい >>540,541
ぐだぐだだな
そういえば今は懐かし、TurboC++for Windowsは
VC++と比べて、コンパイルが鬼速だったなぁ。

VC買って同じコード試したとき、あまりの遅さに驚いたっけ…。
いいマシン買え。10万あれば激即PC買えるだろ。
>>550
最適化してないし
553デフォルトの名無しさん:02/05/09 00:06
>>539
STL ヘッダは #include するより、ソースコードをコンパイルするときにテンプレートを
インスタンス化する方が重いだろ。
>>553
わかってないの?
そのインスタンス化の負荷を軽減するためのプリコンパイルヘッダなんだよ?
テンプレートってプリコンパイル出来るの?
>>555
プリコンパイルは直接コードを生成してるんじゃなくて、
parseのフェーズを省略できるように、内部表現を出力してるんじゃないのか?
557550:02/05/09 01:09
>>552
なるほど〜、失念してました。間違いなくそれですねぇ。
558デフォルトの名無しさん:02/05/09 02:40
>>554
とりあえず VC6 で

1. windows.h をプリコンパイルしたものと、そうでないもの
2. STL をプリコンパイルしたものと、そうでないもの

で速度を比較してみたら?
最近のCPUは十分速いから、ソース+ヘッダ->メモリ展開より
巨大なプリコンパイルヘッダをいちいち読み込むほうが
かえって遅くなる罠。
>>559
だからほんとにそう思うならやってみろって。
漏れの作ってるアプリのプリコンパイルヘッダ公開するけど、
プリコンパイルするかしないかで速度が20倍くらい違うぞ?

#ifdef _DEBUG
#define _STLP_DEBUG 1
#endif

#define _WIN32_WINNT 0x400
#define NOMINMAX
#include <windows.h>
#include <windowsx.h>

#include <tchar.h>
#include <process.h>

#include <commctrl.h>
#include <shlobj.h>

#include <cassert>
#include <ctime>

#include <list>
#include <vector>
#include <string>
#include <memory>
#include <algorithm>
#include <iterator>
#include <functional>
ぬぉ、切れた。
以下、続き

#include <exception>
#include <stdexcept>

#include <boost/shared_ptr.hpp>
#include <boost/bind.hpp>
#include <boost/array.hpp>
#include <boost/function.hpp>
#include <boost/functional.hpp>

#include "window.h"
#include "controls.h"
#include "filesystem.h"
#include "utils.h"
562559:02/05/09 03:19
俺のと大してかわらんな。

更にmap/multimapと、
アプリケーション定義のヘッダが20位。

プリコンパイルヘッダ使っても遅いものは遅い。
>>562
どう考えてもプリコンパイルヘッダの使い方が間違ってるとしか思えない
ちなみに、自動的に使用だと効果ないよ?
きっちり手動で設定してやらないと
565559:02/05/09 03:51
ごめんなさい。
自動的に使用ししてますた。

.cpp別にプリコンパイルヘッダの扱いが変更できるようだけど、
どんな感じでやればよいのか教えてください。
>>565
たとえば、上に書いた集約したヘッダをstdafx.hとし、
[stdafx.h]
#include <windows.h>
...
とstdafx.hを#includeするだけのcppを用意する
[stdafx.cpp]
#include "stdafx.h"

で、stdafx.hを右クリック>設定>プリコンパイル済みヘッダ
プリコンパイル済みヘッダの生成に[stdafx.h]を入力

その後、すべてのソースファイルの先頭にstdafx.hを#includeして、
プリコンパイル済みヘッダを使用に[stdafx.h]までと入力
>stdafx.hを右クリック
stdafx.cppを右クリック
568559:02/05/09 03:59
>>566-567
ありがとうございます。
>>568
とりあえず、試したらどれだけ早くなったかレポートするように
570559:02/05/09 11:34
速くなったーヨ
1/20位の時間になったーヨ

VC++6.0はVC++5.0とどこら編が違うの?
>>571
バージョン。
573デフォルトの名無しさん:02/05/10 22:50
すんません、質問です.

SetWindowsHookEx(WH_GETMESSAGE, 〜
(WH_KEYBOARDでナシに)でキーボードをフック(WM_KEYDOWNを検出)した後、そのキーを無効にする(メッセージをキューから破棄する?)にはどうすればいいですか?
(たとえば、[INS]が押されたときに「貼り付け」処理した後挿入/上書きモードを切り替えないようにする、みたいな…)
WM_NULLに置き換える、とか。
CallNext〜を呼ばない・・・
576痴有望:02/05/10 23:24
VC++4.0のアカデミック版を5年前に買って置物と化してるのですが、
最近勉強しようと思うようになりました。
もうVC++6.0(それ以上?)になってると思いますが、4.0とは機能的にめちゃくちゃちがうんでしょうか?
また、初心者がやるには4.0でも十分なんでしょうか?
>>576
VB.NETは現在のVBとは別物です。
>>573
フックプロシージャ内で>>575、且つreturn 0
ただし他のグローバルフック使用アプリに影響の可能性。
MSDNに書いてあるよ。
579デフォルトの名無しさん:02/05/10 23:50
>>574, 575, 578 サンキューです.
それが、>>575がうまくいかないんですわ.
ただ>>574がとりあえずうまく行ってるようです.
しかーし!!
M$ Word (95, 2000)では、これもうまくいかないんですね.
何故でしょう?
とりあえずキーを1回押すだけでWM_KEYDOWNが2〜3回送られてくるあたりが非常に怪しい.
今んとこメッセージ送り主のhwndと送られたptimeを調べて同じだったらはじく様にしてるんですけど、何か方法はありますか?
580 :02/05/10 23:51
ネットからプログラムをコピペして、コンパイルしたら、予期せぬEOFガ検出されました。というのが出てしまいます。どうしたらいいのでしょうか?
>>580
EOFを予期させてください。
>>580
デバッグ
コピペせずに自分でコード書け
584 580:02/05/11 00:03
>>583
そうします。ありがとうございました。
>>576
Win32APIを使っているだけなら4.0でもほとんど問題なし。
俺も未だに4.0使ってる。
C++でSTLが事実上使えないのは痛いなぁ。
587デフォルトの名無しさん:02/05/11 00:25
>>580
プリコンパイルヘッダーを使う設定になっているのに、ソースにそれ用の
ヘッダーのインクルードをしていなかったりしてない?
>>586
ハア?
>>588
ヒイ?
俺も

>>686
ハァ?
ツマラン
592デフォルトの名無しさん:02/05/11 01:06
Visual Cでアーカイブファイルを作るにはどうしたらいいですか?
お好みの形式のアーカイバを書くか、
既存のライブラリを使用するか
既存のツールを操作する
>>592
自分で圧縮アルゴリズム実装するとか。
595デフォルトの名無しさん:02/05/11 01:19
そうじゃなくて、リナックスのarコマンドみたいなことはできますか?
>>595
ぁ?ファイル操作の方法がわからないのか?
それとも、どこから手をつけていいのかもわからない?
597586:02/05/11 01:57
>588
当然、VC++4のはなししだよ。
>595
.libを作りたいってことか?
リンカのオプションいじってできたような気もする。ヘルプで調べれ。
>>598
ありがとうございました。やってみます。ところで何でみんなsage?
プリコンパイル済みヘッダっていつ登場したんだったっけ。
登場当初は確かにwindows.h対策と言われていた記憶がある。
そうかーSTLってそんなにでかいのか、って当然か。
>>599
ム板の伝統…かな。

age:質問をする人、厨房
sage:良識を持った回答をする人、ネタレスをする人

って感じじゃないかと。
ageる時は、必ずしも質問とは限らないけど、何らかの注目を得たい場合だよね。
それ以外は基本的にsageで。
603デフォルトの名無しさん:02/05/12 11:57
スタックはデフォルトで1MB使用できるそうですが
ある時点で使用できる残りのスタックサイズを得る方法ってないですか?
適当にスタックにメモリを確保していると(再帰関数などで)スタックを使いきってしまうのでないか心配で夜もグッスリです。
残りのスタックサイズを取得して一定のサイズ以下になったら警告が出るようにしたいです。(デバッグビルドの場合)
APIが無理ならインラインアセンブラで無理やりでもいいので教えてください。
> 心配で夜もグッスリです。

わけわか
>>603
取りあえずプログラム起動時にspの値取得。
関数を呼ぶたびに現在のspと保存したspのディスタンスを取る。とかはダメ?
606初心人間:02/05/12 12:39
2chのAAでよくある実写画像(宗男とか)みたいなやつをつくるソフトってVC++で作れますか?
もしくはつくった人いますか?
>>606
作ったからあるんだろうと小一時間。。
608初心人間:02/05/12 18:12
ここで答えてくれてる人ってやっぱそんなの簡単につくれちゃう位の人が多いんですか?
あんまりいないだろうが、かき集めればそういうのができるだろう。

形状認識の理論とAAに対する情熱を持ち合わせたプログラマが
いないこともない。
>>606
の言う「AAでよくある実写画像」ってのは、
AAじゃなくて画像を文字で表現しただけのやつのことじゃないの?
そうなら簡単だけど、本気でAAで表現するのは漏れには無理。
611初心人間:02/05/12 20:25
>>610
そうですそうです。>実写画像(みたいなの)
素人考えですが、こういうのって単純にBMPファイルを数ピクセル四方の領域単位に分割して、各領域の平均濃度に対応した文字テーブルを予め用意して云々
って感じでできるものなんですか?
612デフォルトの名無しさん:02/05/12 20:27
test
>>611
いいんじゃない?
::
のように均等な濃度になるものもあれば
~~や,,のように偏るものもあるし、その辺を考慮して。
614デフォルトの名無しさん:02/05/12 22:05
MFCのソースコードを読みたいのですが
VisualC++6.0 Enterprise Editionには
ソースコードは付属していないのでしょうか?
当然付属していますが、何か?
もしかしたら、プリコンパイル済みヘッダを勘違いしてるかもしれないですが、
これって結局、コンパイルの時間を短くするだけですよね?
ね?
そうだよ
618デフォルトの名無しさん:02/05/13 12:52
VC++でゲームとか作りたいんですが
参考になる本とかサイトとかありませんか?
君には無理

>>618
サイト>> googleで検索,海外ポータルを探す
本>> 定番でGameProgramingGem,GameProgramingManazineなど
621デフォルトの名無しさん:02/05/13 15:25
>>618

どんなゲームを作りたいのか知らんが、とりあえずGoogleで
「ゲーム開発 C++ Windows」とでも入れてごらん。
>>621
ダブルバッファリングとかゲーム界の常識を学んでからの方が良いかもね。
623デフォルトの名無しさん:02/05/13 15:28
>>620>>621
ありがとうございましたやってみま酢。
スタティックライブラリやDLLを作るとき、デバッグ版やリリース版、
マルチスレッド版......などを考慮すると数種類のライブラリを作ることになりますよね。
これって1つにまとめることはできないのでしょうか?
WEB等で配布されているライブラリで1つしか配布していないのは
どうやっているのでしょうか?
web上のライブラリはソースが配布されてない限り使わない、と。
systemフォルダに入っているUNLHA32.DLLを参照するようなアプリの場合は?
アプリ側がDLLの設定に合わせるのですか?
dllならリンクしているライブラリは関係なく使える。
ただ、dll側の制限でマルチスレッド不可の場合が多すぎるので気をつけよう
VC6 使ってますが、Alt + F8 でソースの整形ができません。
VC5用の本にはこれで出来ると書いてあるのですが、
別のキーになったのでしょうか?

変わってないとは言い切れないな
630Disca ◆NAfP6znE :02/05/14 01:57
CListCtrl で、レポート形式にしているのですが、
アイコンが表示してくれないのですが、まちがいがあれば
教えていただけないでしょうか、お願いします。
// m_list は、CListCtrlのメンバ変数
// IDI_ICON は、アイコンリソースです。

int i;
CImageList imageList;

  imageList.Create(16, 16, ILC_COLOR4, 1, 1);
  m_list.SetImageList(&imageList, LVSIL_SMALL);
  HICON hicon= ::AfxGetApp()->LoadIcon(IDI_ICON);

  int image= imageList.Add(hicon);
  for (i= 0 ; i < 3 ; i++)
    m_list.InsertColumn(i, "ColTop");

  m_list.InsertItem(LVIF_IMAGE | LVIF_TEXT , 0, "00", 0, 0, image, 0);
  m_list.SetItem(0, 1, LVIF_TEXT, "01", 0,0,0,0);
  m_list.SetItem(0, 2, LVIF_TEXT, "02", 0,0,0,0);
631デフォルトの名無しさん:02/05/14 03:01
>>630
スコープを抜けた後、imageListはどうなってしまうのかと問いたい。
632Disca ◆NAfP6znE :02/05/14 04:11
>>631さん
スコープを抜けたあと…デストラクタが働いて…消えています。
ありがとうございます…。
試したら、解決しました^^/。
>>628 開き括弧と閉じ括弧の数が揃っていないと効かないぞ。
あと範囲選択を忘れているとかいうオチはなしな。
関係ないがVC初心者質問スレが落ちてた。
めでたくここと統合ってことで。
635デフォルトの名無しさん:02/05/14 15:26
new演算子が動的にメモリ領域を確保することは分かりましたが、
その利点って何ですか?普通に宣言するのとどこが違うかわかりませんです
>>653
mallocと同じく実行してみるまで必要なメモリーの量がわからないときに役立つんだろ?
>>635
>>630のようにスコープ抜けても存在してるとか、
スタックよりも領域を多く確保できるとか
>>637
それは普通、staticにするのでは・・・
639デフォルトの名無しさん:02/05/14 16:38
IDEから実行されているかどうかを判定する関数・変数ってありますか?
[F5]から実行ならIsDebuggerPresent()か?
crtl+[F5]は、無理っぽい。
>>639
カレントディレクトリ調べるというのもありかも、
ってかそもそもIDEから起動されてることを知って何になる?
642639:02/05/14 17:04
>>640
IsDebuggerPresent()でよさそうです。ありがとうございます。
でもkernel32.libリンクしているのに
>main.obj : error LNK2001: 外部シンボル "_IsDebuggerPresent" は未解決です
になってしまいます・・・

>>641
>ってかそもそもIDEから起動されてることを知って何になる?
IDEから実行すると終了時に窓が閉じてしまうので、mainの最後に
#ifdef WIN32
if(IsDebuggerPresent()){
char buf[80];
printf("end: ");
gets(buf);
}
#endif
って書きたいだけなんです。
643デフォルトの名無しさん:02/05/14 17:18
WORDとDWORDを比較したら下のような警告がでたんだけど、WORDもDWORDもunsigned
ですよね??
キャストしたらもちろん消えたけど、何故?

warning C4018: '<=' : signed と unsigned の数値を比較しようとしました。
642
コンソールアプリで実行したらwinbase.hがはじかれた。
そもそもコンソールアプリは終了時に<Press Enter Key>がでますが。へん?
>>643
WORDからintに拡張されて比較…になる。たぶん。
>>643
出なかった世?
647本の虫:02/05/14 18:08
追加したダイアログに独自のメニューを付けました。
でも、アクセラレータテーブルの結び付け方が分かりません。
どうかご教授ください。
WH_GETMESSAGEをフックするか、モードレスで作る
649デフォルトの名無しさん:02/05/14 18:22
IMEのユーザーファイルの場所を変える関数知っているいます?
IMEのプロパティを使用しないで
ユーザーファイルの生成、パスの設定をしたいのですけど・・・
ご存知の方ご教授ねがいます。
>>643  先生、うちも出ません
651635:02/05/14 19:10
>>636,>>637,>>638さん
サンクスです。なんか使わなくてもよさそうな感じですね。
652>>628:02/05/14 19:10
>>629 >>633

やっぱり出来ないです。

開き括弧と閉じ括弧の数は揃ってます。範囲選択もしてます。

メニューから実行できないし・・とりあえずコマンド名
教えて頂けないでしょうか?
653643:02/05/14 21:00
あれ?おかしいな
VC++6のワーニングレベル3なんだけど相変わらずでるです・・・
#define WORD int
とか、自力定義してるんでねーの。
ウォーニング?
ワーニング?
656デフォルトの名無しさん:02/05/14 21:21
VC++ で、「正規版」「機能限定版」の両方を同じプロジェクトで管理して、
オプションでコンパイル分けするにはどうすればよいでしょーか?
>655
にふぉんぐぉは おんすぇお すぉのむぁむぁ
ひょーきするむぉのでわ あるぃますぇん
yahooはどうですか?っあ、スレ違い・・・・
659デフォルトの名無しさん:02/05/14 21:22
●●●●●●●( ● ´ ー ` ● )●●●●●●●


もうすぐ「これ」来るぞ・・・・
>>656
同じプロジェクトでビルドの設定
>>655
発音聞いてみたが、
ォワーニン
>>>666>>665のうんこ食べる。
>661
ヲーニン?
>>652
メニューの 編集‐高度な機能 の中にある。
あと、VC6だとキー割り当てはどうにでもなるから、
ヘルプ‐キーボードマップ とか ツール‐カスタマイズ とか見とけ。
ソースの整形はSelectionFormatだったかな。
665628:02/05/15 00:35
>>664

やっとできました。

ツール − オプションの「自動インデント」が「デフォルト」になってたのが原因のようです。

でも思ってたよりも機能が弱い気が・・ソースの整形というより、単にインデントしているだけだし
(範囲選択して TABキー押すのに毛が生えた程度・・)

でも、ありがとうございました。
GNU indentつかえば?
667デフォルトの名無しさん:02/05/15 02:25
すいません質問です。
MFC派生クラス(元:CObject)をアプリに追加して動的に生成したいんですが、
SDIアプリケーションで作成するとうまく行くんですが、
ダイアログアプリの場合はコンストラクタ呼び出した時点でクラス名を
クラスとして認識してくれないようなエラーが起きてコンパイルできないんです。
ダイアログアプリの場合だけ何か設定とか必要なんですか?
それともSDIで作らないとMFC派生クラスは使っちゃダメ?
いいたいことがよくわからないが・・
動的生成させたいならDECLARE_DYNAMICとかつけるんだYO
669デフォルトの名無しさん:02/05/16 01:10
ちょっとスレ違いかもしれませんが、エクセルのマクロを
別のプログラムから動作させることは可能ですか?

コマンドライン引数でエクセル起動と同時にマクロを動作させるとかでも
いいんですが・・・。
>>669
できますよ。
他人がやってるの見ただけで手段はわからないけど。
671669:02/05/16 01:31
おお、出来るんですね!
でもどうやればいいのか全然見当がつきません。
672デフォルトの名無しさん:02/05/16 01:44
VC++7で
  #define _CRTDBG_MAP_ALLOC
  #include <crtdbg.h>
が通らなくなってるんですけど(C2733が大量に出る)・・・
Windowsアプリケーションのファイルの拡張子って.cと.cppとあるけど
どっちがよいの?
>>669
できる。やってる。動いてる。
>>673
C で書いてるなら .c
C++ で書いてるなら .cpp
cc/cxxもアリ
677672:02/05/16 03:36
crtdbg.hの後からatlstr.hをインクルードしていたのが問題だったみたい

勘違い書き込みしてスマソ・・・
678よろしゅぅ:02/05/16 07:26
VC++.NETの
INT_PTR ってintとどう違うんでしょうか。

また、[クラスビューのTOPをClick]-[プロジェクト]-[プロパティ]
を見たのですが、
RTTIのスイッチが見つかりませんが標準でONになってるのでしょうか。

またなんで普通に[プロジェクト]を選ぶと、[プロパティ]がないのか
半家しく問いつめたいのです。
INT_PTRは32bit win>64bit win移行の課程の互換取りのために用意されてる物ですよん
680678:02/05/16 07:58
>>679
なるほど。サンクス。
ポインタぽい型名だったから...。
681678:02/05/16 08:16
RTTIありました。デフォルトでやはり無効でした。
->ランタイム型情報の有効化。
王様ゲーム!
683デフォルトの名無しさん:02/05/16 10:03
例えば三角関数のy=sin(x)をグラフとして出力したいんですけど、
Cの本を参考にして
#include<graphics.h>
とか<gragh.h>って書くとコンパイルでエラー出ます。
c++だとどうすればよいのでしょうか・・
683
extern "C" {
# ・・・
}
でだめなら力技
685デフォルトの名無しさん:02/05/16 10:47
ダイアログとそのリソースをDLL化して
exeから呼び出そうとしているんですが、うまくいきません。
呼び出し元のダイアログのthisポインタをコンストラクタに渡して
DoModalを実行すると即エラーで帰ってきます。

呼び出し元が参照するDLLのヘッダは、DLLでダイアログのクラス作った
ときにできたヘッダファイルのクラス宣言の部分に__declspec(dllexport)
を挿入しただけのものを使ってます。
そのままだと呼び出し元でビルドするとき
//{{AFX_DATA(CChildDlg)
enum { IDD = IDD_DIALOG_CHILD };
の部分がエラーになるので、
DLLのresource.hをIncludeさせてエラー回避してます。
多分これは間違ってると思います。

正しいいやり方を教えてください。
よろしくお願いします。
>>669
COM 使って CreateObject("Excel.Application") して云々、でできそうだけど。
685
.dllのインスタンスからリソースをロードしてDialogをクリエートして
RunModalLoop()使えば吉。
688デフォルトの名無しさん:02/05/16 11:51
strcpy、_mbscpy の違いって何ですか?
マルチバイト文字列のコピーはも strcpy で普通にできますよね?
>>688
_mbscpyはunsigned char
690685:02/05/16 12:50
>>687
回答ありがとうございます。

早速調べてみたんですが...
dllダイアログリソースをロードする方法が分かりません。
bitmapとかIconをロードする関数は見つかったんですが。
もしかして、暗示的なリンクでなく
LoadLibraryを使ってDLLをロードしてハンドルを取得し、
そのハンドルからDLLのダイアログリソースのハンドルか
リソース名を取得(できるのでしょうか?)するということでしょうか?

書いてて余計分からなくなってきた。
とりあえず今までどおり暗示的なリンクで
exeの中の親画面で
CChildDialog Dialog;
Dialog.Create( IDD_DLG_CHILD, this );
とやってみました。IDD_DLG_CHILDはDLL内部のリソースIDです。
当然NGでした(笑。

もうちょっとだけ分かりやすくおしえてください。
(私が初心者なだけなんですが。すみません。)
よろしくお願いします。
>>690
AfxSetResourceHandle()
692688:02/05/16 13:55
>>689
プログラムで扱っている文字列が charなら、文字列のコピーに限っては、
いちいち unsigned char にキャストして、_mbscpyを呼ぶ必要はないわけですよね?
>>692
charなら、まぁTCHARの使用をお勧めするけど
694デフォルト名無しさん:02/05/16 14:23
またまた回答ありがとうございました。

HINSTANCEResourceHandle = AfxLoadLibrary (_T("ChildDlg.dll"));
AfxSetResourceHandle (ResourceHandle);
と、ここまでは何とか分かりました。
ここから、ダイアログのCreate関数に渡すダイアログの
リソース名を取得しないといけないですよね。
これもどうやったらいいか分かりません。
そもそも、リソースIDは分かるんですが、リソース名って何なんでしょう?
よろしくお願いします。
BOOL CDialog::Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );
age忘れ
>>694
リソース名 = MAKEINTRESOURCE(nID);
698669:02/05/16 21:41
>>686
CreateObjectで検索してみたけど、VB関連ばかり引っかかって
Cのは全然見つかりませんでした。
COMもいまいち良くわかってないんで・・・。
どっかにわかりやすく解説したサイトとか無いですかね。
669
モジュールのWorkbook_Open()がVBAのスタートアップルーチンになるから、
そこにVBAを記述してWin32のShellExecuteでxlsを起動してたらいいと思われるが。
(ワークシートのAuto_Open()でも可)

蛇足:アプリケーションフォルダのXLStartフォルダにXLSファイルを入れておくと
Excel.exeを起動するごとにそのファイル開かれるからいろいろ細工ができる。
(Excel2000以降未確認)

最近のレスでは
http://pc.2ch.net/test/read.cgi/tech/981823340/497-
もあったけどマクロを起動するところまではできていない。

ビジネスSOFT板のExcel総合相談所 あたりでもVBAをあつかってるので聞いてみれば。
700:02/05/16 22:59
カチュウシャみたいに、分割するにはどうすればいいの?
リストビューとHTMLと絵描くところの3つに分けたい
701112:02/05/16 23:07
MSDNの
・CSplitterWndのペイン分割
・テクニカルノート29
・ちゅーとりあるの「ビュー機能の強化」
ぐらいかな。
↑ 112 は消し忘れ、意味無し
703669:02/05/16 23:10
ちなみにExcelは95です。
704デフォルトの名無しさん:02/05/16 23:43
こんにちは,
今日本を買ってきてやってるようなペーペーですが,
今,本のとおりにやっているところです.
で,質問なんですが,この本では
ファイルからの入出力にSerialize 関数なるものを使用しているんですが,
これは普通に使うものなのでしょうか?
705デフォルトの名無しさん:02/05/16 23:45

void CtestDlg::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{ // コードの保存
ar << m_wndView.m_nRMax << m_wndView.m_nRPos << m_wndView.m_nCPos;

for(int i = 0; i < RMAX; i++)
for(int j = 0; j < CMAX; j++)
ar << m_wndView.m_text[i][j];
}
else
{ // コードの読み込み
ar >> m_wndView.m_nRMax >> m_wndView.m_nRPos >> m_wndView.m_nCPos;

for(int i = 0; i < RMAX; i++)
for(int j = 0; j < CMAX; j++)
ar >> m_wndView.mtext[i][j];
}}
と,このようなことが書いてあり,意味がわかりません.というか,コンパイルが全くとおりません.ダイアログベースでもこのSerializeというのは使うんですか?
706デフォルトの名無しさん:02/05/16 23:47
m_wndView' : 定義されていない識別子です。
error C2228: '.m_nRMax' : 左側がクラス、構造体、共用体ではありません。
error C2228: '.m_nRPos' : 左側がクラス、構造体、共用体ではありません。
error C2228: '.m_nCPos' : 左側がクラス、構造体、共用体ではありません。
error C2065: 'RMAX' : 定義されていない識別子です。
error C2065: 'CMAX' : 定義されていない識別子です。
・・・
このようなエラーが出ます.
http://pc.2ch.net/test/read.cgi/tech/1014057520/887-
でがいしゅつです。
てかそのコードにはCXXXViewクラスが必要です。
>>707
ありがとうございます.
一応見て見ます.
CXXXViewクラスの意味もよく分かりませんが,がんばります.
...
709陰唇マン:02/05/17 00:13
>>683
値だけ書き出してgnuplotで描くってのは?
>>706
そのエラー内容は直接シリアライズとは関係ないけどな。
711708:02/05/17 00:19
>>710
また一から作り直して,
また同じエラーがでました.今,本を一から見直しているところです.
またわからなければ
またお願いします.
>>699
そっちのスレでの497だけど、問題なくマクロも起動できてるよ。
>>711には、プログラムの勉強の前に日本語の勉強を薦めたい。
http://www.amazon.co.jp/exec/obidos/ASIN/4121006240/uselesspgsnes-22/250-871/250-8714597-7391437
714デフォルトの名無しさん:02/05/17 23:24
C++とJavaではC++の方が汎用性高いですか?
>>714
そらね。
716デフォルトの名無しさん:02/05/18 12:28
Visual C++を使ってると
 
Msdevが原因でMFC42.DLLにエラーが発生しました。
Msdevは終了します。
問題が解決しない場合は、コンピュータを再起動してください。

となります。
再起動したのですがまたこのエラーが発生しました。
どうすればいいのでしょうか?
>>716
プロジェクト→設定→MFCを使用しないを選択
718716:02/05/18 12:46
共有DLLでMFCを使用
となっていてそれを変更できません。
719デフォルトの名無しさん:02/05/18 13:07
フォントのインストールについて質問です。InstallShield 等使わずに独自の
インストーラで処理する必要があるのですが、二つの点でつまっています。

1. フォントを格納すべきディレクトリを示すレジストリエントリの存在
2. フォントはディレクトリにコピーするだけで、インストールされるのか?

ご存じの方おられましたらよろしくお願いします。
>>719
1.%WINDIR%\Fonts
2.copyコマンドか何かで試せばよかろう。
721デフォルトの名無しさん:02/05/18 13:23
MFC初心者です・・・
このMFCの糞さをぶつけられるスレか掲示板を教えてください。
ここでいいじゃん。
賑わってないし
>>719
SHGetFolderPathにCSIDL_FONTSを渡せばFontsフォルダが取得できる
初心者がぶつけるとたいがい糞スレ化するよな・・・
725デフォルトの名無しさん:02/05/18 18:40
char gorua=3000;
CListBox* b=(CListBox*)GetDlgItem(IDC_LIST1);
b->InsertString(-1,&gorua);
これで、リストボックスに3000と表示することができました。
でも
int morua=3000;
〜ここで計算などして〜
CListBox* b=(CListBox*)GetDlgItem(IDC_LIST1);
b->InsertString(-1,&gorua);
これでは3000は表示されませんよね。
なにがいいたいかというと、
数字をピクチャーかリストボックスかに表示させたいのですが、
このInterStringの変わりになにをつかえばいいのでしょうか?
itoaとかを使ってchar型にしてからInterStringをつかうんでしょうか?
>>725
要するに数字を文字列にしたいってことかな?
sprintfとかMFC使ってるならCStringのFormatとか。
727デフォルトの名無しさん:02/05/18 19:04
でっ、できた!!!
>>726
ありがとうございました!そうですsprintf使ってます。

〜余談〜
こないだぐらいから、VC++の本を二冊買ってきたのですが、
中のC++についてはあまり書いてなかったので、さらにC++の本も買ってきたんですが、
なんか、C++の本の中では
cout << 〜〜
とかが多用してあって、でもVC++のほんの中では一回も出てこないんです。
こりはひょっとしてぜんぜん違うものを買っちゃったんでしょうか?
というような厨です。今後ともDQNな質問をするかもしれませんが、よろしくお願いします。ペコリ
cout<<は忘れれ
729デフォルトの名無しさん:02/05/18 19:13
>>728
じゃ、かっちまった本は全体的にワスレレゆうことでちか?(・ρ・)ポケー
cout <<だの
 >> cinだの ・・
730デフォルトの名無しさん:02/05/18 19:16
VC++をやろうと思ったらやっぱりC++の本も必要ですよね?
VC++に役立つC++の本でオススメなのがあれば教えて下さい。
独習C++?

僕適には、決め事がつらつら書いてあるのより、
例文というか、例プログラムがたくさんのってるほうが実用上参考になって手っ取り早いんですが。。ガイシュツ?
sourceforge.net
>>731
http://sourceforge.net/
↑これがなに?
参考プログラムがごろごろ
734730:02/05/18 19:54
>>733
なるほど、ちょっと見てみます。
ありがとです。
735デフォルトの名無しさん:02/05/18 22:38
MFCは.NETとかC#に取って代わられるらしいが。
いったいどれだけ糞を巻き散らかす気ですか?
>>735
.NETってオブジェクトの解放が基本的に必要ない。
精神衛生上よくないっす。

C#から入門してC++に行ったらとんでもないことになりそうっす。
>MFCは.NETとかC#に取って代わられるらしいが。
この一行だけで知ってる単語を並べただけな感じが。
つーか煽りUZEEEEEEEEEE
738デフォルトの名無しさん:02/05/18 22:45
たのみます!1変数のマイナス演算子と2変数の減法演算子との異なる点を挙げよ。
っていう問題を教えてください
単項演算子と2項演算子、いじょ
735
× MFCは.NETとかC#に取って・・・
○ COMは.NETとかに、javaとかVBはC#に取って・・・

カテゴリ違いだ
738
すれ違い
742730:02/05/18 23:01
えーと、厨な質問です。
textファイルを開いて、それを配列に格納→計算ということをしようと思っているのですが、
FILE *testbuff;
int suuji[30];

testbuff = fopen( "test.txt" , "r" ); //test.txtを開いてtestbuffに入れ・・
for (int i = 0; i<10; i++){
fscanf (testbuff , "%d\n" , &suuji[i]); //testbuffかたsuuji[]という配列に格納して計算に使用したい。
}
こういう↑のをいれると、コンパイルは通りますが、実行時にどうしてもfsanfのエラーで強制終了になります。
どうしてですか?
そもそもfscanfは使えないんでしょうか?
>>742
本当に10行あるのか小一時間。
通常はfscanfの返値で判断するっす。
744デフォルトの名無しさん:02/05/18 23:09
テキストファイルの内容をコピペしてくだされ
それよりもfopenでちゃんとエラーのチェックしろよ。
746730厨:02/05/18 23:14
>>743
早速の返答サンクスです。
test.txtのことですか?
それは
691
698
740



このようなのが100行以上続いています。。
返値ですか。。では返値についてもう少し調べてみます。。
ちなみにデバッグの画面では、
int __cdecl fscanf (
FILE *stream,
const char *format,
...
)
/*
* 'F'ile (stream) 'SCAN', 'F'ormatted
*/
{
int retval;
va_list arglist;
va_start(arglist, format);
→ _ASSERTE(stream != NULL);←ここに矢印が。。
_ASSERTE(format != NULL);
・・・
これは、testbuff(仮名)に値が入ってきていないということでしょうか?
それか、callocとか使ってメモリを確保しておく必要があるということでしょうか?(←ぜんぜん関係ないかも)
747730厨:02/05/18 23:16
>>745
そうですね。
そもそもfopenで開けていない可能性が高いですね。
使用しているテキストファイルは
691
698
740
756
756
747
717
774
786


このような感じのものです。。200行くらい延々続きマス。
>>742
・質問の最初のレスはageよう
・testbuffにNULLが入ってないか?fopenのヘルプを見よう。
if ( ( testbuff = fopen() ) != NULL ) {
処理
} else {エラー処理}
ぐらいが普通の書き方。

・fscanfの\nは要らんと思う(単に無視されるだけだが)
749730:02/05/18 23:42
>>748
ご丁寧にありがとうございます!
前回sageにしたままになってました。。
で、
if(( testbuff = fopen("test","r")) != NULL ){
}
else{ c->InsertString(-1,"ダメダコリャ");
}
としたところ、やはりリストボックスcにダメダコリャが。。
ちなみにlongは%dでOKですよねぇ。。どうやらfopenの時点で失敗しているようです。
fopenを見直しながらもうすこし、粘ってみます。。
==NULLにしとけ。
751730:02/05/19 14:17
>750
やってみます。。
ありがとうございます。
752730:02/05/19 15:42
すみません、やっぱりだめです。昨日からずっとやってます。
void CTestDlg::OnOK()
{
CListBox* c=(CListBox*)GetDlgItem(IDC_LIST2);
///////ファイルtestを開く/////////
if((RRdata = fopen("test.txt","r")) == NULL ){
c->InsertString(-1,"OPEN失敗");
}
else{ c->InsertString(-1,"OPEN成功");
}
}これでやはりNULLを返しているようで、OPEN失敗が出ます。( ´Д⊂ヽ
こんな単純なプログラムが動かなくて、というか、ファイルすら開けなくて、もう泣きそうです。しにたいです。
どうすればいいんでしょうか?fopenを使わないほうがいいんでしょうか?またそれはどんな方法がありますでしょうか?
なんでもいいので、アドバイスください。
753730:02/05/19 15:43
↓あ、ちなみにこれは外で宣言しています。
FILE *RRdata;
実はtest.txtが無いとか
755730:02/05/19 15:47
debug
→〜〜.exe
→test.txt
と、exeとおなじフォルダに入れてあります。
リムーバブルディスク(E:)MO上でやってるんですが、それが原因でしょうか?
ちょっと移動させてやってみます。。
test.txtが無いんでないの?
アクセスできる場所にファイルを置いてフルパスで指定することを試してみては。
fopen("C:\\test.txt","r")
みたく。
実はリリースモードになっている罠
絶対パスで指定してみるべし。
758756:02/05/19 15:49
激しくかぶたーよ
>>755
exeと同じフォルダじゃなくて、
ソースファイルとかと同じフォルダにしてみそ。
760730@ティンカス:02/05/19 15:50
あっ!
今朝方、こうなったら一からやり直そうと思って、
あたらしくつくったんですが、そのときにtext.txtを移動させるのをわすれてますた。
で、コピーしてやってみたら
で・き・た!

それにしても、昨日までのプログラムと本質的には変わってないはずなのに、どうしてできなかったんだろ。
しまいには、コメント行にエラーがでるようなパルプンテぶりでした。
ともあれ、もうすこし修行をつみます。厨に付き合っていただき、ありがとうございました!×2
761730@ティンカス:02/05/19 15:52
>>756
フルパスの指定の仕方はこうやるんですね。
後学のためにメモっときます。(ほんとなにもわからんのですハイ)
>>759
これも覚えておきます。

とにかくありがとうございました!
ま、これから・・なんですが。藁
カレントフォルダに期待するのはやめたほうが無難だーね。
763名無しさん@Emacs:02/05/19 23:52
Unix 使いが VC やらさせられとります。どなたか愛の手を・・・

ファイルを新規作成で追加してそれをコンパイルしようとすると
「プリコンパイルヘッダが無い」とか言って「不正なEOFを検出」とか言われるん
ですが、なんとかならんでしょうか。
# 今手元に環境が無いんでメッセージがウロ覚えです。スマソ。
一応今はファイルを追加するたんびにプロジェクトの設定か何かでプリコンパ
イルヘッダは使用しないようにすれば良い事は分かったのですが、追加のたび
にこんな事やらにゃいかんのですか?何か他に解決策があったら教えて下さい。
教えてクンでスマソ
>>763
最初からプリコンパイルヘッダのない空のプロジェクト作成してファイルを付け加えていくか、
cppのファイルすべての先頭に、#include "stdafx.h"を付けるべし。
>>763
プロジェクトごとプリコンパイル済みヘッダーを使用しない設定にすれ。
設定ダイアログの左のツリーで適用範囲を選んでからやってみれ。

それか、ソースファイルの頭に#include"stdafx.h"(デフォルトの場合)
を追加してみるといいことがあるかも。
かぶった・・・
767763:02/05/20 00:39
>>764,765
そーゆー事ですか。ありがとうございます。
stdafx.h をincludeする方で行かせて頂きます。

いやー統合環境って分かんないですわ・・・(汗)。
きっと慣れれば色々自動的にやってくれる便利な環境なんでしょうね。
とにかくありがとうございました。
768デフォルトの名無しさん:02/05/20 01:00
フォルダとかファイルとかのアイコンリソースをWindowsで使われてるやつを
そのままパクリたいんですけど、どこからインポートしたら良いんですか?
探してるんですけど、なかなか見つからない。
適当になんかのショートカットアイコン作ってそのアイコン変更で
見たらええよ
770デフォルトの名無しさん:02/05/20 04:57
最近になってSTLを触りはじめたんですが、
std::auto_ptrや各種コンテナのiteratorでIntelliSenceのメンバ表示機能が働きません。
こういうものですか?
そういうものです
772770:02/05/20 05:23
>>771
ほ・・・本当は何かウマーイ方法があったりするんでしょう・・・?ドキドキ(・∀・)
ありません、あきらめてください。
IntelliSenseにテンプレートを展開してくれる様な便利な機能は備わってません
774770:02/05/20 05:43
ウワァァァァーーン(´Д⊂)











アキラメ マスタヽ(´∀`)ノ
漏れはそれが原因でauto_ptr(やboost)使うのさけてる。
>>775
そいつは本末転倒っぽい気が…

(VC.NET だとできたりするのかなぁ)
>>776
俺もVC++.NETでの対応に期待してたんだけど、やっぱり駄目みたい。
クラスインスタンス生成時の例外によるクリーンアップは、スマートポインタを使わずに、
コンストラクタでヌル初期化、メンバ関数で実初期化って、ごまかしてる・・・。
デストラクタをいちいち書かないといけないのが面倒。
778708:02/05/20 20:16
この間fopenに関する質問をした者です.
あれから,フルパスで指定するなどして,openはエラー無く出来るようになったんですが,その内容を確認するところでまた詰まっています.以下のプログラムで,
FILE *buff;
int RRdata[300];

void CMyadDlg::OnButton6()
{
CListBox* c=(CListBox*)GetDlgItem(IDC_LIST2);

if((dataall = fopen("C:\\test.txt","r")) == NULL)
c->InsertString(-1,"File opne error");

for (int i=0;i<3000;i++){
if (fscanf(buff,"%lf",&data[i]) == EOF )break;

CString datatext;
datatext.Format("%05d",data[i]);
c->InsertString(-1,datatext);
}
【test.txtの内容】{
671
673
638
}
【結果】リストボックスに
00000
00000
00000
と表示されてしまいます.なぜでしょうか.
671
673
638  ←と表示されることを期待しているのですが..
これもいろいろとためしてはみたのですが,
例えばアドレスを表示させようとしてみると,
フフフフ・とかわけのわからん文字が出力されます.これはこんなものですか?
何か書くたびに裏で常にC++のソース解析が入ってるのかと思うと寒気がするぞ。
今の . -> :: 等が入力されるときにメンバーを列挙する仕様だけで十分
780708:02/05/20 20:18
すみません,プログラムに間違いがありました.
FILE *buff;
int RRdata[300];

void CMyadDlg::OnButton6()
{
CListBox* c=(CListBox*)GetDlgItem(IDC_LIST2);

if((buff = fopen("C:\\test.txt","r")) == NULL)
c->InsertString(-1,"File open error");

for (int i=0;i<3000;i++){
if (fscanf(buff,"%lf",&data[i]) == EOF )break;

CString datatext;
datatext.Format("%05d",data[i]);
c->InsertString(-1,datatext);
}
↑これを使っています.
data[i]の型がdoubleならFormat()の%05dが
intならfscan()の%lfが間違ってる。
782708:02/05/20 20:27
FILE *buff;
int data[300];
また間違えてました.
int data[i];
なので,fscanfの%lfをかえてやってみます.
783708:02/05/20 20:29
>>781
できました!
いろんなとこ換えていろんなこと試したのに,どうして気づかなかったんだろう..
ほんと,感謝です!
あっさり解決したので,感動しますた.(´д`)

これさえ出来れば,解析用のソースはあるので,
軌道にのりそうです.ありがとうございます!
>>773
ん? 展開できないのはtempleteではなくてtypedefだと思うが。
まぁどっちにしろ使えないのは一緒だけど。
785デフォルトの名無しさん:02/05/20 21:02
コンソールアプリですが、コンパイル、ビルド、実行しても
結果がうまく表示されません。
というのは、表示されるんですが、一瞬でウィンドウが閉じてしまいます。
なんでですか?
786デフォルトの名無しさん:02/05/20 21:25
実行が終わったらすぐ閉じるのが普通。
出力結果が見たいならDOS窓から実行してあげなさい。
ちなみに、リダイレクトを使えば出力全部も見れるよ。
終了する前にgetch()を呼ぶ
hello worldアプリケーションでプロジェクト作成したら
最後に<Press any key to continue>でるけど、漏れのだけ?
789785:02/05/20 21:39
>>786
学校でやってたんですが、周りの人はウィンドウ表示が継続されてましたよ?
789
先生の言うことはよく聞きましょう。
デバッグ実行は速攻消える
デバッグ無しで実行は消えない
もし消えるならどこか腐ってる
792デフォルトの名無しさん:02/05/20 23:30
c形式の関数の実装に
extern "C"
ってやらなかったらどうなるの?
てめぇ、伝家の宝刀抜くぞ
>>792
C++形式になる。
多分モジュールにしてCから呼ぼうとした時にリンカが困るかと。
795yamamoto:02/05/21 00:21
既出かもしれませんが(突っ込まないで〜)、WindowsXPでVC6入れてる人
いますか?
コンパイルとかは普通に通るんですけど、実行すると固まります。
ウインドウが出るまでF10、F11で、ステップ動作させると、後は
問題なく動くんです。
exeも2000とかで実行すると問題ないんです。
2000マシンでは一度もこういった事なかったんですが、XPプリインストール
マシンに変えてから、こうなってしまいました。
検索したら、やはり他の掲示板でも同じような状況の方いるようなのですが
解決方法がわかりません。
わかる方いましたら、ご伝授ください。

WindowsXP+VisualStudio6エンタ
です
よろしくお願いします。
796紅孔雀さん:02/05/21 05:06
今、日付を管理するクラス(DATE)を作ってい、「 << 」をオーバーロードして、
DATE date("2000/01/01 00:00:00"); //クラス内では年月日などをint型変数に入れている
cout << date;
とすると「 2000/01/01 00:00:00 」と出力されるようにしたいのですが、分からない事があ
るので、分かる方おりましたらお教え下さい。ソースは最小になるように変更しています。

#include <iostream>
using namespace std;
class PIYO {
int hoge;
public :
friend ostream &operator << (ostream &stream,PIYO &piyo);
};
ostream &operator << (ostream &stream,PIYO &piyo) {
stream << piyo.hoge; //←
return stream;
}

こうすると「 //← 」の位置で「privateメンバにアクセスできません」というエラーが
出てしまいます。「 friend 」を付けているのでプライベートメンバにアクセスできるはず
だと思うのですが。また次のようにクラス内で宣言と定義を同時に行ってしまえばなぜかエ
ラーは出ません。

class PIYO {
int hoge;
public :
friend ostream &operator << (ostream &stream,PIYO &piyo) {
stream << piyo.hoge;
return stream;
}
};

使用している開発環境は VisualC++6.0 Standard Edition で、サービスパックは入れてい
ません。質問したい内容をまとめると「最初のソースでなぜフレンドにしているのにプライ
ベートメンバにアクセスできないのか」、「最後のソースのようにするとなぜエラーが出な
くなるのか」ということです。C++については「独習C++」という本を読んだ程度で全
ての機能については知りません。
>サービスパックは入れていません

とりあえずイレロ。話はそれからだ。
サービスパック入れろ
家じゃそのソース通ったぞ
799紅孔雀さん:02/05/21 05:39
>デフォルトの名無しさん方
どうもお騒がせしました。早速サービスパックダウンロードしに行ってきます。
m(__)m
800カミーゆ:02/05/21 07:51
サービスパックってネカフェでダウンロードできるらか?
801808:02/05/21 10:21
Pentiumバグ命令(FIST/FISTP)を使うかどうかを設定できるチェックボックス
がどこかにあったと思うのですが、いくら探しても見つかりません。
どなたか教えてください。

ちなみにSP5をあててます。
802808:02/05/21 10:21
age
803808:02/05/21 10:22
さげちゃった・・・。
MSDNの

Pentium FDIV のチェック
Pentium プロセッサのバグ対策
Pentium FDIV のバグ チェック

を調べると割り算とかTANとかしか出て来ないから、コンパイラはFISTを回避した
コードしか吐かないようになってるんじゃないですか?(多分)
805808:02/05/21 11:30
いや、確かにあったんです。
「Pentium〜なんとか〜を回避する」とかいう名前のチェックボックスでした。
しかし見つからない。思い違いなのかな・・・。
806デフォルトの名無しさん:02/05/21 11:37
すみません。技術力のないPGです。お願いします。

SDIプログラムからもう一つウインドウを開かなければならなくなりました。
ダイアログなら簡単ですが、お客さんの要望で、「ウインドウ」に
しなければなりません。

掲示板に書き込めるほど単純ではないと思うのですが、
流れとか使うAPIとか、あるいは書籍やWebサイトなど、
ヒントだけでも教えていただけないでしょうか?

VC++6.0/MFCを使っていますが、SDK式でもヒントになります。

よろしくお願いいたします。
CreateWindowEx
808デフォルトの名無しさん:02/05/21 11:44
MFCなら、
CCreateContext
LoadFrame
あたりを参照。
もーどれすだいやろーぐ では いかんのか?
810デフォルトの名無しさん:02/05/21 14:44
>>807 >>808
ありがとうございます。がんばって検索中です。

>>809
モードレスダイアログを普通のウインドウっぽく見せられるんでしょうか?
それならその方が...氏にそうす。
810
素直にMDIにするか、もう1個アプリケーションを作った方が楽だと思われ

普通のウインド???
 →クライアント領域とタイトルバーシステム領域がある→CViewかその子分
もう一つのウインドウがそのアプリケーションと同じ物なのか、
それとも、全く別のウインドウなのかによって答えがずいぶん変わる
813708:02/05/21 16:30
コンパイル,ビルドが通り,実行すると
Debug assertion failed!という
エラーが出て,デバッグをしようとすると,
..\VC98\MFC\SRC\STREX.CPP
のウインドウが開き,
・・・
case 'p':
va_arg(argList, void*);
nItemLen = 32;
nItemLen = max(nItemLen, nWidth+nPrecision);
break;

// no output
case 'n':
va_arg(argList, int*);
break;

default:
→ ASSERT(FALSE); // unknown formatting option
}
}

// adjust nMaxLen for output nItemLen
nMaxLen += nItemLen;
default:
・・・
上記の→のところで,エラーを吐いている模様です.
こんなエラーにどなたか心当たりのある方いらっしゃいますか?
自分で書いたコードのどこで発生したか特定しないと
815デフォルトの名無しさん:02/05/21 16:38
>>810
新しくウインドウを開くのは、LoadFrameに適切なパラメータを
与えればすぐできると思うけど、そのまえに仕様を深く考えてみたかい?
新しくウインドウを開くと言う事は、モーダルじゃないって事。新しい
ウインドウとは無関係に、元のウインドウのクローズボタンを押されると
言う事だよ。
一応MFCにはCanCloseFrameとか、色々なサービスは用意されているけど、
この点で矛盾が無いように、コーディングの前によく検討する事をお勧め
するよ。
813
晒すべコードは、ちみの Format();の引数だと思われ。
817デフォルトの名無しさん:02/05/21 17:41
すいません。動的割り当てがうまくいかないので教えてください。
char *a;
if (a != 0) {
delete [] a;
}
a = new char[10];
と書いたのです。(MFC内で書いたのですが)
すると、コンパイルエラーは出ないのですが、deleteの部分で
実行中にエラーが出ます。
教えてください。
char * a;
a = new char[10];
・・・
delete a;

char * b = new char[10];
・・・
delete b;

char (*c)[10] = new char[5][10];
・・・
delete[] c;
のどれかでしょう。
a = NULL;
if(a != NULL)
 delete [] a;
a = new char[10];
820デフォルトの名無しさん:02/05/21 18:15
有難うございます。
821708:02/05/21 18:34
>>816
どうしてわかるんですか!!ありがとうございます.
原因は,
一箇所,
〜〜.Format( %l , double );
となっていました.doubleを%lに格納しようとしたためのようです.
どうもありがとうございました.
>>821
>>816はスーパーハカーだから。
823デフォルトの名無しさん:02/05/21 19:12
はじめまして、今日からVC++6.0を始めたものなのですが
質問させてください

ダイアログ型アプリケーションをAppWizardで作成して、そこに
ボタンを配置しました。
そのボタンをClassWizardでクラスを追加するところまで着ました。

そしてメンバ関数「OnButton1」のコード編集をすると言う状態です。

void CTestDlg::OnButton1()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください

}

ここにボタンが押されたときのコードを追加したいのですが、よくわからないのです

やりたいことは、指定したエクセルなどのファイルをエクセルで開くということです
(ボタン一発でファイルを開きたいです)

c:\hoge\excel.exe \\fileserver\hoge\hoge.xls

このような感じのコマンドをボタン押したら実行できるコードはどのような関数を使
ったらよいのでしょう?

そのほかスマートなやり方などあれば御教授お願いします
ふつー、xlsファイルに対してShellExecute。
全部2chで質問してマスターするつもりなのかな・・・
826823:02/05/21 19:48
>>824
ありがとう!!
ShellExecuteをキーワードにいろいろ探したら見つかりました

HINSTANCE hInst = ShellExecute(NULL,"open",
"ファイルの場所",NULL,NULL,SW_SHOWNORMAL);

感謝してます


>>825
そのつもりは無いんだけど、そう思われても仕方ないですね
これからもっと勉強します
827810:02/05/21 21:09
>>815
ありがとうございます。
新しく開くウインドウそのものは、(今のところ)データ表示だけです。
(だからダイアログでもいいわけですが。;;)

おっしゃるようにCFrameWndオブジェクトをnewで生成し、LoadFrameやって、
ShowWindow、UpdataWindowで表示できました。

>ウインドウとは無関係に、元のウインドウのクローズボタンを押されると 言う事だよ。
ご指摘ありがとうございます。大モトのウインドウの終了時にdeleteしてやろうと思っています。

あんまり聞いてしまって申し訳ないと思ってますが、もし、上の方針がおかしければ、
教えてください。

今日は徹夜のようです。
>>805
コンパイラオプションの /QI0f 、 /QIfdiv
829デフォルトの名無しさん:02/05/22 03:33
すいません、VC++初心者です。
初心者スレが埋もれているので、ここで質問させてください。

Debug版のバイナリはある程度安定して動くのですが、Release版のバイナリは
「不正な処理が」のエラーがでて動きません。

一般論としてどういう風にデバックすればよいでしょうか?

デバッガ上は下のようなメッセージが連発してます。
'xxx.DLL' をロードしました、合致するシンボル情報は見つかりませんでした。

それからDebug版でも
 Warning: skipping non-radio button in group.
というようなエラーメッセージがでてます。

Release版が動かないことと、上の二つのメッセージは直接関係ないと思って
いるのですが、いかがでしょうか?
直接関係はないが、そのうち不具合がでるかもね。

Releaseにしたら動かないのは、ほとんどが未初期化の変数を使っている場合。
コンパイラの警告メッセージで「未初期化の」ってでるはずだから、
それを無視せずにきちんと初期化してから使うようにしなさい。

たまーに、#pragma warningとかでその未初期化の警告を表示しないようにしてたりする
糞コードや、コンパイラの警告レベルをデフォルトよりも低く設定してるケースがあるので、
プロジェクトの共通インクルードファイル(stdafx.hみたいなの)やコンパイラの設定を
確認しなさい。

それでもダメなら、解放したメモリを再度アクセスしてないかとか、
配列のサイズを超えてアクセスしてないかとか見なければいけないが、
その前に、どういうエラーがでて止まるのかをきちんと調べなさい。

レアケースで、コンパイラの最適化バグというのもあるが、
それを疑うのは10年速い。
831デフォルトの名無しさん:02/05/22 10:39
VCでデータベース操作を試みて挫折した者です。
VBのデータコントロールなら分かります。
C#はデータベース操作に向いていますか?
C#買ったらWin98に対応していないことに気づき鬱になりました。
すれ違いですがマジレスしてください。
なんでスレ違いでマジレスせにゃならんの?
831
VC挫折する前にウィザード使わなかったのですか?
(VC6はもしかしてEnterpriseEditionでないと付いてないのかな?)
C#はWin9X不可なんですか。こりゃ使えん。
>>831>>833
根も葉もない噂流すのやめてもらえるか?
VS.NETだけだよ。NT専用は。
Frameworkは98以降すべて対応。
SDKはしらん。
>>834
横からなんだが、833には罪はないぞ
>>834
実行環境、開発環境どっちのハナし?
>>834
831にも罪は無い。よく読まないおまえが悪い。
831はOSを乗り換える事をお勧めする。
838デフォルトの名無しさん:02/05/22 11:33
かなり激しく過激な質問なんですけど、

VC++やってるんですよ今。
そんで秋には基本情報受けるんですよ。

まず基本のソースを覚えないといけないんですけど
Cって2タイプあるじゃん。
<stdio.h>→printf("猫好き");
<iostream.h>→cout<<"猫好き";

どっちをやるべき?、まあ両方やっとかないといけないだろうけど
まずはどっち?おレ的にprintの方だと思うんだけど。
基本情報の午後の試験でCを選らんだ場合、こっちがでるよね。
しかもVCやってると変数の表示とかでprintfは使うけどcoutなんか
使わないしさ。どっちがいいのだろうか?
>>838
日本語か一般常識のどちらかだな
streamを使うのは物好きかalgorithmと組み合わせるときだけ
>>838
まずC入門書を一冊読んでください。
842デフォルトの名無しさん:02/05/22 11:45
>>840
さんきゅー
やっぱprintfだよね。
プログラムの勉強のHPいってもみんなprinfだしさ。

大学でcoutの方なんか教育してるんですよ。まあ一応覚えたけどさ。
もう見てらんない。VCやりだしたら全然使わないし。
>>842
お前の発言が見て欄内。。。
>>842
stream自体は結構使うが?
coutをcout << hogehoge;のように生で使うことがあまり無いだけ。
手で書いていくならprintfの方が体裁を整えやすいから。
とりあえず、<iostream.h>なんてやってるうちは覚えたウチに入らない
>>842
あんたイタすぎるよ
>>845
吉野家コピペの見すぎと思われ(w
847デフォルトの名無しさん:02/05/22 20:37
使用しているとMsdevが原因でMFC42.DLLにエラーが発生しました。
Msdevは終了します。

問題が解決しない場合は、コンピュータを再起動してください。


となりました。再起動してもまたエラーが発生してしまいました。
どうすればいいのですか?
マルチした責任を取って首を吊ればいいと思う
>>847
format c:
850親切な人:02/05/22 20:40

ヤフーオークションで、凄い人気商品、発見!!!

「高性能ビデオスタビライザー」↓
http://user.auctions.yahoo.co.jp/jp/user/NEO_UURONNTYA

ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。
851デフォルトの名無しさん:02/05/22 20:40
>>838

そもそも「C」にstreamなどない。
>>849
氏ね
853デフォルトの名無しさん:02/05/22 21:25
初心者な質問ですみませんが。

エディットボックスや、リストボックスに書き込みできる文字数を
VBのプロパティのマックスレンジのように指定したいのですが、
(指定したケタ以上は入力を受け付けない)

VBのようにコード以外で設定する方法はあるでしょうか?
いまは余剰桁が入力されたら、その直前の状態に戻すやり方で
やっているので、動きの見た目がわるくて・・






@かAのどちらか
@
・クラスウィザード[変数]でダイアログクラスに変数の追加
・エディットボックスをCString 型にして変数名を入力
・最大文字数を指定


A
メンバを追加
CString m_strEdit1;

DoDataExchange()で
DDX_Text(pDX, IDC_EDIT1, m_strEdit1);
DDV_MaxChars(pDX, m_strEdit1, 256);
を実行
855デフォルトの名無しさん:02/05/22 21:57
>>854
御教授ありがとうございます!
どちらも今後に使えそうな知識なので、
参考にさせてもいただきます
856デフォルトの名無しさん:02/05/22 22:02
エディットボックスの行間ピッチを変えるのはどうやったらいいんでしょう?
ディスプレイを斜め上から見ればピッチはちじまるぞ?
行間のあるフォントを選んどきませう
859デフォルトの名無しさん:02/05/23 00:15
>>858 フォントはMS Pゴシック 12ポイントと決定しちゃってるんです・・
試しに聞くけど、なんで行間のピッチを変えたいわけ?
861デフォルトの名無しさん:02/05/23 00:39
>>860 IEのピッチに合わせたいのです
862730:02/05/23 02:54
質問内容はCなんですが、適当な(答えてくれそうな)Cの相談室が見当たらず、なおかつスレ立てるまでもない質問はここでのスレで相手にされなかったので、
こちらでおねがいしようと思います。
23┓
21┃→series一回目
24┃
22┃┓
23┃┃→series二回目
23┃┃  ・
22┃┃  ・


というようなintが改行で仕切られた3万行くらいの長〜いファイルがあり,それをalldataに開いています.
そこから100行くらいのデータを切り取って
itijidataに格納しseries(ポインタ)として解析にぶちこむ.ということをしたいのですが,解析プログラムはわけ分からないのでいじれず,
とにかくポインタで指定したseriesをいれればいいのですが,
どうやら関数の中でseriesをいじっているらしく,上記のように3つずらして次の解析に使用すると前回使用した部分のデータの内容が変ってしまっています.
どのようにする方法があるでしょうか?
いちおう考えてやって見ているのが下記のコードなんですが,

FILE *alldata;
int *series,*data;
int itijidata[200];
alldata = fopen("C:\\test.txt","r");
for(int count = 0 ; count <ファイルの最後まで; count++){
//解析を行うごとにループし・・
data = &alldata[0] + count*3*sizeof(double);
//ここで3つずらして次の解析に必要な頭出しをしてるつもり・・
  for (int i=0 ;i<200 ;i++){
  if (fscanf(data,"%lf",&itijidata[scandata]) == EOF )break;
//ijitidata配列に格納し・・  
}
series = &itijidata[0];
〜ここでseriesを用いた解析をはさむ〜
}
質問は3つです.
◆ファイルからずらして配列に格納するにはどのような方法がありますか?
◆ずらした位置を指定して配列に格納させるようなfscanfに代わるものはありますか?
◆ファイルポインタで指定したものが変更されてしまうのですが,どのようにすればよいでしょう.
なんか混乱してきたので,多分上のプログラムはめちゃめちゃです.鬱
もうわけがわかりません.どなたかアドバイスをおねがいいらします.
>〜ここでseriesを用いた解析をはさむ〜

そこをルーチンとして独立させるのが先かなあ。
>>862が何言ってんだかわかんないのは漏れだけ?
誰かが書いた解析ルーチンがあって、
そこにデータを食わすところを改良するというのをやってるんじゃないかな
866730:02/05/23 03:22
>>864
どこらへんがわけわからんでしょうか?たしかに自分でもわけわからんと思いますが。。
基本的な質問は、
◆intがなn行もつづく長いファイルから100行程度抽出し解析、次に何行かずらして配列に格納し解析、という風にするにはどのような方法がありますか?
◆ずらした位置を指定して配列に格納させる(上述のようなファイルの中の何行目かを指定して抽出する)ようなfscanfに代わるものはありますか?
主にこれら2つというか、似たような質問なんですが。。。
3つめは配列を二つつくって回避します。
867730:02/05/23 03:27
>>865
そうです。そうなんです。
だれかがつくってるだけあって、*seriesを渡す、という以外にはとてもいじれそうになくて、
そこでこっちで解析用のseriesを用意して、毎回送り出してやろう、という寸法なんですが、
で、解析には100行程度のデータが必要なんです。
なおかつ、元ある長〜いファイルの全域に渡って解析を行いたいのですが、
その長いふぁいるから100行程度を抽出→seriesとして解析にまわす。ということができずにいるんです。。これが質問1、2になります。
ちなみにseriesはint *series;で宣言してあります。ので余計やっかい。でもないのかな。。

seriesでポイントさせて渡すと、解析が終わったあとに、seriesの中身は改変されています。なので、エリアがかぶったデータは次の解析にはまわせません。
という問題もあります。これが質問3になります。
868730:02/05/23 03:31
ちなみに>>862のプログラムはめちゃめちゃだと思います。とくに
data = &alldata[0] + count*3*sizeof(double);
//ここで3つずらして次の解析に必要な頭出しをしてるつもり・・から、、
  if (fscanf(data,"%lf",&itijidata[scandata]) == EOF )break;
このへんが(゚Д゚)ハァ?というかんじかと思います。(;^_^A
どんなプログラムか想像つかないから適当に答えるけど、
seriesを解析するAnalyzeSeries(series);があってそれに渡すんでしょ?
解析するには一度に全部のデータが必要なんじゃないのか?
870730:02/05/23 03:36
>>869
はい。
とりあえず、ひとつだけseries(100行程度のデータ)をわたして解析するということは成功したんですけど、
少しずつずらしてseries(100行程度のデータ)を渡し、連続で解析するというのができずにいます。
AnalyzeSeries(series)を
AnalyzeSeries(PartOfSeries)*いくつか
にしたいってことだろ?
そんなもん、AnalyzSerieseがストリーム処理を受け付けないと無理じゃん
宿題スレに近いものがあるな
873730:02/05/23 03:49
  if (fscanf(data,"%lf",&itijidata[scandata]) == EOF )break;

まちがえてました。
  if (fscanf(data,"%lf",&itijidata[i]) == EOF )break;
です。
874730:02/05/23 03:59
PartOf〜〜っていうのが分からないですが、
今、書いてみましたが。これでうごくのかな。今、家なので、ちょっと動作確認できないんですが。。
もっとスマートなやり方はないんだろうか。。
FILE *alldata;
int *series,*data,data[300000],kaisekiyou[100];
alldata = fopen("C:\\test.txt","r");

while(1){
for(int j=0;;j++){
if( fscanf(alldata, "%lf" ,&data[j]) == EOF ) break;
}

for (k=0 ;k<100; K++){
kaisekiyou[k] = data[i+k];
series = &kaisekiyou[0]
//とにかくここまでにseriesに解析用のデータを耳を揃えて提出すれば解析はやってくれる模様
【ここでseriesを使用している】

i++;
}
ちょっと明日これでやってみます。できたかも??
data[300000]
おいおい
一人デスマーチなのか?そうなのか?
877730:02/05/23 04:08
>>875
そのくらいあるのれす。
なので、なんとか軽いコーディングをめざしたいのですが、上のような例だと
わりと重いですよね。

>>876
オナーニです。
デカい配列はスタック上では無くヒープ上に取りませう。
879730:02/05/23 04:24
>>878
・・・。うぅ。
がんばってしらべますです。ありがとうございます。
880829:02/05/23 05:14
レス遅れました。
>>830
どうも親切に産休です。

やはり基本的なメモリの問題ですね。
++初体験なので、どういう初期化がされているのかわからなくて。
文字列代入できるようになってたり、異文化コミュニケーションです。
もらったキーワードを参考につぶしていくです。
881デフォルトの名無しさん:02/05/23 11:45
FILE*  alldata;
int   dammy_data;
int*  data;
int   kaisekiyou[100];
int   data_max;
int   data_num;
int   i;
int   kaisekiyou_num;
int   inc_value;

data_max = 300*1000;             // data の最大登録数 (30万行)
data_num = 0;                 // data に登録した数
data   = malloc(data_max*sizeof(int));   // メモリの確保
alldata  = fopen("C:\\test.txt" , "r");
while(fscanf(alldata , "%d" , &dammy_data) != EOF)
{
   if(data_num < data_max)
   {
      data[ data_num ] = dammy_data;
   }
   data_num++;               // インクリメント
}
fclose(alldata);
if(data_num > data_max)
{
   printf("配列数が足りね〜ぞ! 可及的速やかに %d 個用意しろ!\n" , data_num);
   free(data);               // メモリの破棄
   exit();                 // プログラム終了
   // data_num = data_max;         // exit() を使わずに継続するなら data_num を調整する必要あり
}
kaisekiyou_num = 100;            // 解析に必要な数
inc_value    = 10;            // ずらすサイズ
for(i=0 ; i<=data_num-kaisekiyou_num ; i+=inc_value)
{
   memcpy(kaisekiyou , data+i , sizeof(int)*kaisekiyou_num);     // 解析用メモリにコピー

   // 解析用の関数に kaisekiyou を渡せば計算するんじゃない?
}
free(data);                  // メモリの破棄


---------------------------------------------------------


fscanf あたりは自信無し。
改行って自動的に処理される?
fscanf なんて原始的な関数は学生時代に使ったきりで以降使用していないので良く分からん。
畳み込みか相関か?
fscanfは空白文字(改行)が現れると次の非空白文字まで読み飛ばす。
883初心茶:02/05/23 12:55
VC(SDK)でTABSTOPを実装する場合って、サブクラス化するしかないんですか?
あまりにも面倒だと思うんですけど…

WindowsアプリでTabStopが付いてないソフトなんてあまり見ないですよね。
標準の機能だと思うんだけど、実装するのに面倒なのってどうよ?
もしかしたら簡単に実装する方法ってあるんですか?
IsDialogMessage
885初心茶:02/05/23 13:07
>>884
サンクス。
俺は何を検索してたんだろう。鬱氏。
物理的に逝って来ます。
886デフォルトの名無しさん:02/05/23 13:42
256色のDIBに対して、TextOut使って文字列を描画しています。
その際、パレットの中から最も白に近い色で描画したいのです。
しかし、SetTextColorでRGB(0xFF, 0xFF, 0xFF)を指定しても
文字が黒くなってしまい、
Red*0.30 + Green*0.59 + Blue*0.11 の値が最も大きくなった
パレットの番号を代わりに指定してもやはり文字が黒くなってしまいます。

しかしSetTextColorの色指定に0や1や2などを指定すると別の色が出るんです。
もしかして256色の場合はパレット番号を指定するのかと
有り得ない考えを起こして、
試しにn番目のパレットのRGB値を確認しながら
SetTextColorの色指定にnを当てて文字列を描画、
という作業を暫く試してみたんですが、
当然ながらパレット番号とは無関係なようでした。

どうやったらスマートに思った通りの色(もしくはそれに近い色)で
文字列を描画出来るでしょうか。
御存知の方いらっしゃいましたら御教授御願いします。
> Red*0.30 + Green*0.59 + Blue*0.11 の値が最も大きくなった
> パレットの番号を代わりに指定してもやはり文字が黒くなってしまいます。

> もしかして256色の場合はパレット番号を指定するのかと
> 有り得ない考えを起こして、

な、なんか話の展開がおかしいですね。
分かり難くなってしまってすみません。
RealizePaletteしてる?
>888
はい。しています。
自前で256色のBMPファイルを読み込む処理も入れているんですが、
画像は綺麗に出ているんです。
ソース貼るべし
891886=887=889=自分:02/05/23 13:56
物理パレット変更後は、
以下のようにして最も白に近いRGB値を持つパレット番号を算出しています。

  for (i = 0x00; i <= 0xFF; i++) {
    color =
      hb->lpRGB[i].rgbRed * 0.30 +
      hb->lpRGB[i].rgbGreen * 0.59 +
      hb->lpRGB[i].rgbBlue * 0.11;
    if (color > nwcolor) {
      nearwhite = i;
      nwcolor = color;
    }
  }
  FontColor = nearwhite;

そして文字列描画関数をこのようにして呼び出しています。

  SetTextColor(hb->hdcMem, FontColor);
  TextOut(hb->hdcMem, x, y, str, strlen(str));

hbというのは画像処理に使うデータをまとめている構造体です。
>>891
その操作方法違うぞ。
もっとも輝度が高いパレットが選ばれるだけ
893886:02/05/23 14:05
あ……やっぱ論理パレット見ないで
GetSystemPaletteEntry()で取得してからそれ見ないと駄目なのかな……
SetTextColorはエラーを返してないのか?
GetTextColorで帰ってくる色を確認した?
895886:02/05/23 14:11
>892
ああっ。そうなんでか。よく判らずやっていました。御指摘ありがとうございます。

でも黒になるというのはおかしいですよね。
それに、実際に算出された最も硬度が高いパレットのRGB値を見ると、
0xFF 0xFF 0xFFになっていたんです。

今思い付いたのですが、テキスト用にバッファを用意して、
一度ZeroMemoryか何かでゼロクリアしてから文字列を描画して、
それを自分でメインのバッファに貼り付ける、という手がありますね。
というかこれをやれば済む話ではあるんですが、
やっぱりスマートな方法は無いのかと……。
もしも解決法が判らなければこのバッファを使った方法を採ります。
お世話になった方々、ありがとうございました。
>894
ぐあっ。確認していませんでした。
今大急ぎで調べると、SetTextColorに関しては
エラーを示すCLR_INVALIDは返していませんでした。
GetTextColorの方も試してみます。
>>895
RGB(255, 255, 255)がある時はそうなるが、
127 255 64 < グリーン
127 127 127 < グレー
の2色を比較したときグリーンが選択される。

で、>>894は?
898886:02/05/23 14:23
GetTextColorも試してみました。
エラーは返さず、SetTextColorで指定した値がそのまま帰ってきています。
パレット番号を与えた場合はパレット番号がそのまま戻ってきて、
RGB(0xFF,0xFF,0xFF)を与えた場合は0xFFFFFFが戻ってきました。
パレットの選択手順は?
ウインドウとメモリDCに同じパレットを選択してる?
もしくは、ウインドウに選択した後にCreateCompatibleDCやってる?
900886:02/05/23 14:36
>899
はい。CreateCompatibleDCを行っています。
他のパレット操作はきちんと成功しているのですが、
SetTextColorだけはどうすればいいのかわからなくて……。
色選択はGDIが勝手にやるからRGB指定で良いはずなんだけどね。
902708:02/05/23 15:48
>>881
ありがとうございます!
今,これで入れてやってみようとしているところです.

で,
data   = malloc(data_max*sizeof(int));   // メモリの確保
↑ここで,'=' : 'void *' から 'double *' に変換することはできません。という
エラーを吐くのですが..
>902
data = (double *)malloc(data_max*sizeof(int));
ってキャストしなされ。
904708:02/05/23 16:10
あっ!ありがとうございます!
その*がわかりませんでした。..
905886:02/05/23 18:09
やっぱり>895で言ったテキスト用のバッファを使うやり方で解決しました。
指摘してくれた方々、ありがとうございました。
906デフォルトの名無しさん:02/05/23 20:16
すみません、853の問題の続きなのですが。
クラスウィザードの
CString系で作ったメンバに
文字数を設定して、エディットボックスはうまく文字数制限
出来たのですが、
コンボボックスだけどうしても制限が働いてくれません。
コードでは

DoDataExchange()  

DDX_CBString(pDX, IDC_EDIT1, m_Edit1);
DDV_MaxChars(pDX, m_Edit1, 20);

という形になっているのですが・・
他の周りでの設定なども必要なのでしょうか。
コンボボックスは
DDX_CBString(pDX, IDC_COMBO1, m_combo1);
DDV_MaxChars(pDX, m_combo1, 20);
だけどウィザード使ったほうが楽です。
908906:02/05/23 20:42
あ、すみませんさっき例、エディットのときのとかぶってたw
907さんのとおりコードは
DDX_CBString(pDX, IDC_COMBO1, m_combo1);
DDV_MaxChars(pDX, m_combo1, 20);
になっていて、
ウイザードで設定も試してみたのですが、
なぜか稼動しなくて。

907さんお返事ありがとうございました!

おい、WinXP で CPU 使用率とかちゃんと取れてるか?
なぜかアプリが終了しねーぞ。
910時刻・日付について:02/05/23 21:41
12345678秒などというのを
〜年〜日〜時〜分〜秒または
〜y〜d〜h〜m〜sと変換するようなうまい関数はないでしょうか?
なければ、modでちくちくやるしかないんでしょうかね?
ジョイスティックからの入力クラスを作りました
しかしDirectInputの入力データ取得はその関数が呼び出された時の
キーのデーターを取得するものなので、60fpsの場合に15ms以下の速さで
入力した場合にキーのデーターを取得できないため
とりあえず一度キーのデーターを取得する関数を
別スレッドから呼び出そうとしたのですが
エラーが出ます、別スレッドを作らないで
ゲームループの中で使用した場合はエラーは出ません。
3週間悩んでいるのですが分かりません、どうかお願いします

http://kobe.cool.ne.jp/solo2000/CInput.h
http://kobe.cool.ne.jp/solo2000/CInput.cpp
http://kobe.cool.ne.jp/solo2000/CInputControl.h
http://kobe.cool.ne.jp/solo2000/CInputControl.cpp
DirectInputはスレッドセーフかどうか調べました?
(ゲ制板で聞くほうが・・・)
>910
strftime、ってこと?
914時刻・日付について:02/05/23 23:15
ありがとうございます。
少し調べましたところctime()でできました。
お騒がせしました。もう少し調べてから質問することにします。
915デフォルトの名無しさん:02/05/23 23:16
editボックス内のデフォルト値ってどうやって設定するんですか?
打たなくても最初から書き込んであるやつです。編集しようと思えばできるってかんじの。
SetWindowText使えばぁ
917デフォルトの名無しさん:02/05/23 23:36
CString value = 000;
((CEdit*)GetDlgItem(IDC_EDIT1))->SetWindowText(value);
このようにしたけど、IDC_EDIT1の窓には何にも表示されませんが・・・
なお↓これでもだめでした。
((CEdit*)GetDlgItem(IDC_EDIT1))->SetWindowText(000);
なにがいけないんでほう?
それ以前にコンパイルできた?
919デフォルトの名無しさん:02/05/23 23:42
コンパイルは通りました。
というか、エラーこそ出ませんけど、
警告のアラシです。
intだのcharだのとわめいています。
>>919
エディットボックスの操作はそれで良いが、CStringあるいは charの使い方
が間違い。数字を表示させたかったら、Formatするなり、SetDlgItemInt使う
なりしる!
921デフォルトの名無しさん:02/05/23 23:54
へい。
ではFormat汁ます。
サンクスコです。
CEdit *にキャストするのは不要。
923デフォルトの名無しさん:02/05/24 00:18
CString value;
nenn.Format("%d",200);
(GetDlgItem(IDC_EDIT1))->SetWindowText(value);
できないよう。くすん。
おい、nennってなんだ?
小一時間、いや朝まで問いつめるぞ。
nenn? ねんーーーーーって感じ?
926デフォルトの名無しさん:02/05/24 00:28
CString value;
value.Format("%d",200);
(GetDlgItem(IDC_EDIT1))->SetWindowText(value);
いやん。つっこまないDE
ちなみにこれでも200が表示されません。どぼちて?
927926:02/05/24 00:29
         _
        /::::::\    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       (´∀` )  < ねんねんねんnennVCむかつくねん!
    O--⊂ ×  )   \___________
  (∴) 彡(,,,(,,,(ξ⊃
という感じです。>>925
このスレは
 「1000までに >>915が、エディットボックスに 200という数字を表示させることができるか?」
というスレに変更されました。
929915:02/05/24 00:40
         _
        /::::::\    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       (´∀` )  < ねんねんねんnenn>>928むかつくねん!
    O--⊂ ×  )   \___________
  (∴) 彡(,,,(,,,(ξ⊃
おしえてよ けち。
>>926
それをどこに書いてる?
コンストラクタの中とか言ったら12回ほど死なす。
931915@天才:02/05/24 00:47
いやー、できたできた(^-^;A

なんやメンバ変数とかいうのをいじって、
m_edit2 = _T("");
こんなのができたところで、""内を変更して
m_edit2 = _T(-""-;) {…。
こうしたところ、無事「(・∀・)」が表示されますた。
やったー。
932915@天才:02/05/24 00:48
>>930
コンストラクタってなに?てへっ
933デフォルトの名無しさん:02/05/24 05:07
ダイアログベースのアプリケーションのピクチャでもなんでもないところに、90度傾けた文字を出力したいです。
そこで、あらかじめひょうじしたい個所にピクチャを設け、表示させようとしたんですが、
下記のコードは、hogehogeDlg.cppのどこに配置すればいいんでしょうか?
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
CWnd* hgraph=GetDlgItem(IDC_PICT4);//ピクチャhに関すること
CDC* pgraphDC=hgraph->GetDC();
CRect rgraphpict; //ピクチャの領域サイズをrに取得
hgraph->GetClientRect(&rgraphpict);//ピクチャの領域サイズをrに取得
CFont NewFont;
TEXTMETRIC tm;
CString strText;

NewFont.CreateFont(
24 * 20, //高さ(論理単位)
20, //文字の平均幅(論理単位)
900, //傾斜角度
0, //ベースラインとx軸との角度(0.1度単位)
FW_NORMAL, //文字の太さ(1/1000ピクセル単位)
FALSE, //イタリック指定
FALSE, //下線指定
FALSE, //取消し線
ANSI_CHARSET, //フォントの文字セット
OUT_DEFAULT_PRECIS, //出力精度の指定
CLIP_DEFAULT_PRECIS, //クリッピング精度の指定
DEFAULT_QUALITY, //フォントの出力品質の指定
DEFAULT_PITCH|FF_ROMAN, //フォントのピッチとファミリを指定
"Times New Roman" //フォントのタイプフェイス名
);
CFont* pOldFont = dc.SelectObject(&NewFont);
dc.GetTextMetrics(&tm);
strText.Format("文字文字文字");
pgraphDC->TextOut(rgraphpict.left,rgraphpict.bottom-10,strText);
NewFont.DeleteObject();
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
コード読まずに回答
ピクチャかダイアログのOnPaint
Java Servlet + DBなんですが、

あれは問い合わせ1回ごとにコネクションを開始→問い合わせ→切断、するべきなんでしょうか。
あまちがえた
すまそ
937デフォルトの名無しさん:02/05/24 10:03
サービス名の日本語使用について聞かせてください。

ATL COM AppWizardでサービスを作成します。
文字列リソースの IDS_SERVICENAME の
キャプションに日本語(2バイト文字)を使用します。
WindowsNTだと特に問題ないのですが、
Windows2000だと、作成したサービスの登録
(-Service)後にサービスのプロパティを見ようとすると
「構成マネージャ:一般内部エラーが発生しました」
と言うダイアログが出ます。エラーが出るだけで
ちゃんとプロパティの中身は出ますが、
これの回避方法はあるのでしょうか?

ちなみに、開発環境は
Windows2000 Server(SP2) + VC++6.0 SP5 です。
どなたか情報をご教示下さい。
よろしくお願いします。
938933:02/05/24 17:05
>>933の質問ですが、
持っている本には、デバイスコンテキストに表示させるほうほうしか書いてないんですが、
わざわざピクチャを作って、そこに表示するっていう上のようなコードをOnpaint()内に追加したんですが、表示されないんです。
もっと簡単な方法はないんでしょうか?わざわざピクチャを作って表示っていうわずらわしい方法じゃないスマートな方法はないですか?
939デフォルトの名無しさん:02/05/24 18:42
>> 933

> NewFont.CreateFont(
> 24 * 20, //高さ(論理単位)

の部分のフォントサイズが大きすぎ!!


> pgraphDC->TextOut(rgraphpict.left,rgraphpict.bottom-10,strText);

底辺から10ピクセルの位置に描画してもフォントが大きすぎて余白部分くらいしか画面内に収まらない。(だから表示されない)


> NewFont.CreateFont(
> 20 , //高さ(論理単位)

これくらいのサイズが普通。
940デフォルトの名無しさん:02/05/24 20:26
ラジオボックスを使用して数字のエディットをさせたい(&その逆)のですが
例:
グループA
ラジオボックス1
ラジオボックス2
グループB
ラジオボックス3
ラジオボックス4
グループC
ラジオボックス5
ラジオボックス6
グループD
ラジオボックス7
ラジオボックス8
以下略
ラジオボックスが奇数ならば+0、
偶数ならば+2^(n/2-1)
といった感じです。
 この場合デフォルトではどのラジオボタンも押されていない状態なので
デフォルトでは奇数がONの状態にしたい、
そして数字のエディットボックスでも指定できるようにしたいのですが、その場合はラジオボタンを
ONChangeEdit()などから操作できないといけないと思うのです。
しかし、クラスウィザードではラジオボタンはメンバ変数を持たないようなので困っています。
こういう場合はチェックボックスを使わないとだめなんでしょうか?
941933:02/05/24 21:20
>>939
ありがとうございました!
おかげさまでうまくいきました.
もうひとつの原因として,
OnPaint()内の
if (IsIconic() {
}
else {
}
で,if内に書いていたことが問題だったようです.else内に書くと旨く行きました.
942dis ◆NAfP6znE :02/05/24 22:32
CListCtrl::EditLabel()

を使うと、リストコントロールにEditが出るのですが、
Editを確定した場合、どのようにしてイベントを取ればいいのでしょうか。

おねがいいたします。
943ss:02/05/24 22:41
Visual C++ってフリーソフト?どこにあるの?
否。このネットワークのどこにでも、遍在し、偏在している。
945ss:02/05/24 22:48
コンパイラのVisual C++ってある?
>>945
取りあえずshine。
947dis ◆NAfP6znE :02/05/24 22:55
942 です。
ON_NOTIFY(LVN_ENDLABELEDIT , ***, ***)
で解決しました。
948デフォルトの名無しさん:02/05/25 07:45
再描画する方法について
Invalidate();
でOSに処理を渡すやりかたは解ります.
しかし,ボタンが押されたらON_BOTTON()を実行し
ON_BOTTON(){
 while(){
//何かの計算をする

  //その結果をグラフに書く
 }
}
をしたいんですが,
計算されてる間に再描画などができなくなります.(あたりまえですが)
どうすればいいのでしょうか?
ダイアログベースで作っているのでON_PAINT()でできないでしょうか?
>>948
スレッドを作ってそっちで計算。
950デフォルトの名無しさん:02/05/25 11:01
940 > クラスウィザードではラジオボタンはメンバ変数を持たないようなので困っています。

ラジオボタンのプロパティで「グループ」にチェックを入れてるか?
まあどうしてもだめならCWnd::GetDlgItem(ラジオボタンのID)とかDDX_Checkとかいろいろやってみそ。
951デフォルトの名無しさん:02/05/25 11:47
>>948

ON_BOTTON(){
 while(){
//何かの計算をする

InvalidareRect(hdlg , NULL , FALSE);
UpdateWindow(hdlg);
  //その結果をグラフに書く
 }
}
952951:02/05/25 11:55
訂正

-----------------------------------------------

方法1.

ON_BOTTON(){
 while(){
//何かの計算をする

InvalidareRect(hdlg , NULL , FALSE);
UpdateWindow(hdlg);
 }
}

WM_PAINT:
  //その結果をグラフに書く
 break;


UpdateWindow で WM_PAINT を呼び出し処理する


-------------------------------------------------


方法2.

ON_BOTTON(){
 while(){
//何かの計算をする

hdc = GetDC(hdlg);
  //その結果をグラフに書く
ReleaseDC(hdlg , hdc);
 }
}


GetDC で直接描画

953デフォルトの名無しさん:02/05/25 18:32
>>951,952
ありがとうございます.
今方法2でやってみましたが,できませんでした.
計算中に,そのアプリを移動しようとしても移動ができず,再描画もしてくれませんでした.

方法2しか駄目なのでしょうか?

954950,953です:02/05/25 18:43
On_Button()は一回押したら,10分くらい計算し続けてるんです.
それと同時に線を書く.
つまりwhileで10分くらい居続けます.
ということなのですが.
955デフォルトの名無しさん:02/05/25 19:05
こんばんわ、調べてもわからなかったので
教えてもらえないでしょうか。
リストビューで複数のイメージを使用してるんですが
選択中のアイテムのイメージのインデックス
が知りたいんですけど(LVITTEMを使ってセットした時のiImage)
GetItemStateを使用したらいいとまではわかったのですが
うまく情報取得できません。
ret=GetItemState(index,LVIF_IMAGE);
と書いてるんですがretが常に2になってしまい
困ってます。
なにか根本的に間違ってますか?
初心者的質問ですがよろしくお願いします。
>955
LVIS_STATEIMAGEMASKでなくてはいけないかと思いますが。
957デフォルトの名無しさん:02/05/25 19:36
>>954
つーかスレッド作ったほうが楽だと思ふ・・・・・・・
958955:02/05/25 19:38
>>956
ありがとうございます。
そうも思ったんですが
ret=GetItemState(index,LVIS_STATEIMAGEMASK);
とするとretがすべて0になっちゃいましたので。。
ret=GetItemState(index,LVIS_STATEIMAGEMASK);
イメージのインデックス取得するのに
この文のどこがおかしいんでしょうか。
>958
GetItemの方でやってみるとかはダメかな?
MFCのその部分のソースも見てみるといいかも知れず。
960955:02/05/25 20:02
>>959
実は始めそれも調べたのですが
ぜんぜんわからなくて挫折してしまいました。
MSDNでは
「リスト ビュー アイテムの属性のすべてまたは一部を取得します。」
って解説されてるんですが今回の選択中のアイテムの
indexをもとに情報を取得したい場合
どうしたらいいんでしょうか。
定義がBOOL GetItem(LVITEM* pItem) const;
なので引数がひとつしかないので
正直ぜんぜんこの関数の使い方がわからなかったです。
GetItemStateとGetItemどちらもうまく使えてませんが
今回みたいなアイテムのインデックスから
イメージのインデックスを得る場合
どちらを使えばいいでしょうか。
>960
LVITEM構造体調べてくれ…てかそこら辺の説明はSDK使った事無いと
わからんかもw
猫でもわかる〜のサイトでも行ってお勉強してくださいな。
962951:02/05/25 20:13
>今方法2でやってみましたが,できませんでした.

マジで?
ループ中に PeekMessage , TranslateMessage , DispatchMessage でメッセージループを作ればいけるかも。

>計算中に,そのアプリを移動しようとしても移動ができず,再描画もしてくれませんでした.

移動なども行いたいならマルチスレッドの方が良いかも。
移動を頻繁に行うならパフォーマンス的にもマルチスレッドが有利

いずれにしろ計算中にボタンを押されると多重に実行される可能性があるのでボタンの有効無効の切り替えが必要
963教えてほしいです!:02/05/25 20:15
HTMLのことなんですけど、
ページを開くと他にも次々にページがでるようにしたいんですけど
どうやるかわかる人いますか?
いたらおしえてほしいです!お願いします☆
>>963
頭悪いなら氏ね。
965955:02/05/25 20:17
GetItemStateを使うのだとしたら
LVITEM構造体のstateメンバとstateMask
あたりだと思って昨日調べてたんですが
結局挫折してしまいました。
ずばりret=GetItemState(index,LVIS_STATEIMAGEMASK);
のあとretからイメージのインデックスを
取得するにはどういった文が必要なんですか?
もしくはやはりGetItem()でしょうか。。
966デフォルトの名無しさん:02/05/25 20:19
967いまいましいチビの女の子達:02/05/25 22:04
テンプレートを使ったライブラリを作りたいのですが
ヘッダとソースファイルの分割はどうすればいいのでしょうか。

VC++はexportをサポートしていないので
リンクエラーがでてしまいました。
VC++.NETを買えばよいのではないでしょうか。
969いまいましいチビの女の子達:02/05/25 22:17
↑.NETはexportあるんですか?
>>968-969
確か.NETにも無いと思ったけど。
971950,953,954です:02/05/25 22:39
>>949 >>957 >>962

スレッドってマルチスレッドのことだったんですね(^^A
質問一つのためにスレを立てて,糞スレ立てんなって言われちゃうじゃん!!
って思ってました〜!
やってみます!ありがとうございました!
>>971
> スレッドってマルチスレッドのことだったんですね(^^A
も、盲点だった!
君以外はみんなスレッド=マルチスレッドだと思って
このスレ見てたと思うよ・・・
973デフォルトの名無しさん:02/05/25 23:02
ご教授願お願いします。
リストボックスの一行ごとに複数の変数(Char)を表示しているのですが

VBでいう   Tab(30) ; name ; Tab(50) ; year

といったようにそれぞれの始まる場所を指定したいのです。
どうしてもやり方が見つからなく、今はムリヤリ
スペースを調整して表示しているのですが、きれいにまとまりません、
Tabに近いような命令はあるのでしょうか?
974デフォルトの名無しさん:02/05/25 23:27
>>973
sprintf( buf, "%d\t%d", name, year );
とかでは駄目ですか?
973
CListBox::SetTabStopsとLBS_USETABSTOPS
MSDN読もう・・・
976973:02/05/26 00:49
>974,975
ありがとうございます、そのあたりを確認して
また挑戦してみます。
977デフォルトの名無しさん:02/05/26 01:32
VC++.NETにはC++言語リファレンスの日本語ヘルプって付いてないんでしょうか?
>>955
iImageとStateImageは別物だよ。(GetItemStateで取れるのは
チェックボックスとか表示するのに使うやつ)
アイコンの方を調べるには、GetItemしてiImage見なくちゃダメ。
セットする時にLVITEM使ってるなら、同じ要領でできると思うがどうか。
979いまいましいチビの女の子達:02/05/26 05:51
>>970
マイクロソフトの怠慢ですね.

素直にテンプレートをやめて書き直します.
うう、面倒くさい.
980デフォルトの名無しさん:02/05/26 21:39
卒論のためにVC++でプログラムを組むことになりました。
学校でCの演習はやってましたけど、初歩的なことしか
やってないしC++はやったことないです。
最初に読むのにお勧めの書籍教えてください。
マニュアル
982デフォルトの名無しさん:02/05/26 22:10
>>980
MFCで組むなら林晴比古のVC++スーパービギナー編でも読んでみたら?
それでサパーリなら諦めなさい(w
983955:02/05/26 22:33
>>978
ありがとうございます。
お蔭様でGetItemの使い方もわかり、
無事目的のアイテムのイメージのインデックスの取得
に成功しました。
感謝してます。
みなさん、アドバイスありがとうございました。
>>982
レスありがとうございます。
でも、その人の本>>177-179
すごく不評なんですが大丈夫なんでしょうか?
また、なんで不評なんでしょうか?
長年の経験と勘でが投げ捨てろと言っている。
長年の経験と勘でが投げ捨てろと言っている。
長年の経験と勘でが投げ捨てろと言っている。
986955:02/05/27 08:52
982>>
私自身勉強中で参考になるかわかりませんが
その本自体は読んだことないですけど
その本の二巻(シニア編)はド忘れした時の辞書代わりになってます。
VCまったくやったことなくてC解るなら
山本信雄って人の書いた
「プログラミング学習シリーズ VisualC++」てのがいいと
思いますよ。
というか私はこれでした。
三巻構成で少々高くつきますがVC1からやるには
かなりよかったです。
1巻ではMFCよりAPIから入ってるのである程度仕組みが
理解できると思います。
2巻は、クラスの利用方法など、(C++やってないならいいかな
3巻がMFC全般。
上級の方からはどう思われるかわからないですけど
勉強中の身の私としてはかなり解りやすい本だと思いました。
参考までに。
>>985
経験と勘ですか
確かに推薦図書スレでも不評でした。

>>986
レスどうもです。
ほんとにVC何もわからないので
わかりやすい本がいいです。
とりあえず>>982>>986さんが薦めてくれたのを
立ち読みしてみようと思います。
988デフォルトの名無しさん:02/05/27 14:27
次スレたてないの?
終わりで良いじゃん
990デフォルトの名無しさん:02/05/27 14:53
>>989
終わりかよ!!
だって必要ないじゃん
992デフォルトの名無しさん:02/05/27 14:58
>>984
今これのビギナー編でVC6.0の勉強中です。
内容は文字通り「VC++6.0」の使い方で
ウィザード使うとこういうことが出来ますよって感じ。
この本読んでプログラムが出来るようにはならないと思うけど
DOS窓しか開けなくて詰まってた私にはちょうど良かったかなとおもう。

でもこれ買った後、友達に>986のやつ薦められました。
スーパービギナー編=
結論を再確認する。「投げ捨てろ」
ビギナー編=
開発環境操作本。これを見ながら勉強すれば、
2chへの「わかりません」系マルチポストを防止できる。
シニア編=
基本的なコントロールの使用法を、それなりにまとめてある。
これを見ながら勉強すれば、
2chへの「できません」系マルチポストを防止できる。
このスレは教えて君の隔離に丁度いいと思う。
あと、まともな質問も結構ある訳だし、次スレ建ててもいいと思うよ。

でも俺はビビりなので自分では建てない罠。
漏れは立てすぎ
996
262 名前:いさましいおsageの女の子 [sage] 投稿日:02/05/27 20:31
ごめんね ++が付かなかったよ。

どうやるの?
http://pc.2ch.net/test/read.cgi/tech/1022499000/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。