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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
Visual C++入門者・初心者からの質問を、
お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

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

  質問の仕方については次のページが大変参考になります。
  http://www.hyuki.com/writing/techask.html
  http://www.geocities.co.jp/Beautycare/4965/public/template.html

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

満員電車で携帯なんか使うなよ
2デフォルトの名無しさん:04/02/28 19:48

>満員電車で携帯なんか使うなよ

???

3
4デフォルトの名無しさん:04/02/28 22:25
繰り返しのforの文ですが1ずつ増やす場合はfor(i=0;i<=10;i++)
って感じで書きますが5ずつ増やしたりするばあいはどうやってかいたらいいんでしょうか?
おしえてください。
for(i=0; i<=10; i+=5)
6デフォルトの名無しさん:04/02/28 22:32
for(i=0;i<=10;i=i+5)
for (i=0;i<=10;i+5)
>>1
優先座席以外ではいくらでも使っていいんだよ
>>8
電波脳に屁こかれて鼻詰まりながら氏ね
10デフォルトの名無しさん:04/02/28 22:46
せんきゅーです
本にはのってないのでわかりませんでした。

もうひとつあるんですけど論理演算子の
左辺と右辺がtrueの場合にtrueになる縦棒2本
みたいなやつってどうやって出したらいいんでしょうか?
ちなみにC++です。
>>10
シフト押しながら|
間違った
シフト押しながら\を押す
バックスペースの1個右
13デフォルトの名無しさん:04/02/28 22:52
キーボード次第では、¥もありえるかも。
>>8>>9
どちらも偏ってるしスレ違いだからいい加減にしとき。
CImageList クラスで、

BOOL GetImageInfo( int nImage, IMAGEINFO* pImageInfo ) const;

 nImage :イメージの 0 から始まるインデックス。

を用いて、たとえばリストの3番目のIMAGEINFOを得ようと、 nImage に2といれても、
イメージリスト全体の情報が取られるようで、
そこから得られた HBITMAPを描画すると、イメージリストの全体の画像が表示されます、
リストの特定の番目の IMAGEINFO が得られるような雰囲気がある関数なんですが、
そうなってくれません。
任意の IMAGEINFO が欲しいときはどうしたらいいでしょうか?
エディタ画面でフォントを大阪にするにはどうすればいいんでしょう?
vs2003です。
フォントエディタで、タイプセットー大阪でんねんとやればよろし。
>>16
WM_SETFONTでしょ
19デフォルトの名無しさん:04/02/29 00:06
STLのlistで前から5番目の要素にアクセスしたいときって
順番にたどっていくしかないのでしょうか?
for(i=0;i<=10;)
{ i+=5; }
もあり
21デフォルトの名無しさん:04/02/29 00:41
>>20
とりあえずこんなこと(※)してみたら怒られました。

ite += 5;

※↑こんなこと。
22デフォルトの名無しさん:04/02/29 00:43

*(ite+5)

これでアクセスできんじゃないの?
駄目なん?
23デフォルトの名無しさん:04/02/29 00:52
>12
せんきゅーです。
よく見たらありますね。
使ったことないんでわかりませんでした。
24デフォルトの名無しさん:04/02/29 00:54
>>22
error C2678: 二項演算子 '+' : 型 'std::list<_Ty,_Ax>::iterator' の左オペランドを扱う演算子が見つかりません
というエラーがでてしまいます。
25デフォルトの名無しさん:04/02/29 01:05
>>24
ポインタと同じには使えないのか。

for(int i=0; i<5 ; i++) ite++;
*ite;

これはどーだ?
>>22
これもオペレータオーバーロードで
簡単に実装できるんだから、STLで実装してくれれば
いいのになぁ。

27デフォルトの名無しさん:04/02/29 01:11
>>25
それならいけます。
ただちょっと面倒なのでなんとかならないものかと考えていました。
やはりみんなfor文書いて苦労しているのでしょうか?
それがリスト
>>27
For eachでひとつの文でできる言語もあるよ。
>>29
何か勘違いしてないか?
31名無し@沢村:04/02/29 13:04
>>19-28
ヌヒ等は、std::advance()も知らんのか
32デフォルトの名無しさん:04/02/29 13:18
template<class InIt, class Dist>
void advance(InIt& it, Dist n);

このテンプレート関数は、it を n 回インクリメントして前に進めます。
InIt がランダム アクセス反復子型である場合は、式 it += n を評価
します。それ以外の場合は、各インクリメントを実行するのに ++it を
評価します。InIt が入力反復子型または前方反復子型である場合、
n は負でないものとします。


なるほど。
33デフォルトの名無しさん:04/02/29 14:39
オーナードローでリストボックスのアイテムをカラフルに描画(テキストあり)してみたのですが、
フォーカス位置にオーナードローしなかったときに出てくる
点線枠(みたいなのでちょっと色が変)も出てきやがるんです。
そしてもう一度フォーカスを当てるとその枠は消えるんですけど、
それまではずっと描画されたまま・・・

VC++6.0 sp5 MEでコンパイルしたものは上の現象が起きます。
でも、VC++6.0 XPでコンパイルしたものは正常です。

コンパイル環境というより、実行するときのOS依存かな?

どこをどうしたら出なくなるのかさっぱりわけ分からんです。
心当たりのほどをお伝えください。
隣にいる友人に伝えました。
3533:04/02/29 15:47
WM_DRAWITEM の処理をすべてコメントアウトしても点線枠が出てきます。

WM_SETFOCUS あたりでなにかすればいいのかと思って調べましたが、
HideCaret() とかでは消えないし、
かといって WM_SET(KILL)FOCUS で return すると、
点線枠は消えるけど WM_DRAWITEM も親ウィンドウに届かないみたいだし。

>>34 僕にも伝えてください(泣
>>33=35
その枠はFocusRectかな?
DrawFocusRectで無理やり消すとかはどうでしょ。
2回目の描画でXORされるはずだが。
37デフォルトの名無しさん:04/02/29 16:02
>>31-32
おお!ありがとうございます。
でもなんで戻り値ないんでしょうねw
advance(ite,5);
*ite;
これじゃ
for(int i=0;i<5;i++)ite++;
*ite;
と変わらない気が・・・
STL作った人センス悪いんですかね。
3833:04/02/29 17:35
>>36
ブラボー!!

消せました。
逆にXPの方で出てきたりしないのかが心配・・・ですが
ありがとうございます。
advance(ite,5);

for(int i=0;i<5;i++)ite++;
が変わらないと思うセンスが信じられん
質問です。配列の要素数の大きさを大きくすると
例外 unknown software exception 〜とでてしますのですが、配列の大きさは限度があるのでしょうか?
メモリは1Gが積んでいて、メモリ以内の大きさにはしてあるのですが。
まぁVC++特有ではない、STLの質問をするような奴ですから
>>40
限度があります。
>>40
で、いくらにしたのよ?
>>42-43
とりあえず20000あたりでエラーが発生しました、希望としては100000ぐらいまでとりたいのですが
callocで出来ない物かとやってみてはいるのですが使い方がさっぱりと・・・
30過ぎたらC言語
40過ぎたらD言語!
>>44
その動かないコード晒してみ
>>40
オブジェクトのサイズも言ってみよう
4840:04/02/29 21:01
>>46-47
#include <stdio.h>
#include <math.h>

#define NUM 20000

int main()
{
int i;
double x[NUM], y[NUM], z[NUM];

for(i = 0; i < NUM; i++){
x[i] = i;
y[i] = i*i;
z[i] = sqrt(i);
}
for(i = 0; i < NUM; i++){
y[i] = y[i]/x[i];
y[i] = y[i]/z[i];
printf("%f %f\n", y[i], z[i]);
}

return 0;
}
これは実験的に作ってみた奴だけどこんな感じで
実際にはメンバにdouble型を10個ほどもってる構造体配列使いたいんだけど。
y[i] = y[i]/x[i];
で0除算してる
>実際にはメンバにdouble型を10個ほどもってる構造体配列使いたいんだけど。
配列をグローバル変数にするとかstatic付きで宣言するしか。
51デフォルトの名無しさん:04/02/29 21:20
>>49
double型だったらエラーにならんだろ。
52デフォルトの名無しさん:04/02/29 21:21
>>51
0.0で割れば0除算になるぞ。
つーかスタックに2万個も確保すんじゃねぇ。
ヒープにしろ。
54デフォルトの名無しさん:04/02/29 21:23
>>53
6万個だろ
5540:04/02/29 21:25
>>50
現在プログラム出来ないので後ほどやってみます。
ありがとうございます
56デフォルトの名無しさん:04/02/29 21:33
Visual C++やりたいけどあのクラスと膨大なメンバー関数。
とても覚えきれないよ。やってる人って全部正確な関数名
まで覚えているの?
それとMFCからととベタ書き?みんなどっちでアプリ開発している
の。よかったら聞かせて。
>>56
MSDNライブラリを参照したり、ここの連中を活用したり。
MSDNライブラリを地道に見たり直撃ワードでググったり。
何が何から派生してるか覚えるだけで覚えること減ると思う。
59デフォルトの名無しさん:04/02/29 21:42
>>56
API使ってWinアプリを書くよりも、ウイザードとMFCを
使ったほうが楽だよ。良書はいっぱい出てるから、まず
そこから始めるのがいいと思う。
60デフォルトの名無しさん:04/02/29 21:49
c++のことで質問させてください。
デストラクタ自体は明示的に呼び出すことができるわけですが
明示的に呼び出す必要がある、または呼び出した方が効率的にプログラムを組めるときってどんなときですか?
>>52
値が変になるだけで、エラーにはならんだろ。
>>56
C/C++の基礎があれば、AppWizardから簡単にアプリが組めるのがVCの良いところ。
MFCはWindowsのインタフェースに沿ってクラスが整理されてるし、どのコントロール
使ったらどのクラスなのかってことはすぐ分かる。後はリファレンス本かヘルプでその
クラスにどんなメンバがあるかをつらつら見ていって、使える関数(使いたい関数)から
覚えていけば良い。
63デフォルトの名無しさん:04/02/29 22:00
>>61
あらほんとだ
>>60
虚構への逃げ
それはプログラマが絶対にしてはいけないことで
プログラマは常に現実を見なければならない。
その分ストレスも溜まるだろうし、もうプログラムを
書くのは止めようなんて思ったりすることもある。
だけど、それを乗り越えて一日一日、精進していけば
いつか、一流プログラマになれるからガンバレ!
要するに、できるけれどするな馬鹿ってことだ。
>>61
正しくNaNにならないか?
6756:04/02/29 22:13
みなさんご意見ありがとう。参考になりました。
>60
placement new の後始末
69デフォルトの名無しさん:04/02/29 23:42

C++でよく使う関数をまとめてクラスライブラリを
作ろうかと思っています。提供方法の選択肢としては

1) ソースコード
2) LIB
3) DLL

の3つがあると思うのですが、ユーザーがクラスの
継承をすることを考えると、選択肢としては 1) or 2)
ということになるでしょうか?

Cでの利用は考えていないのですが、それでも
DLLでクラスを使うのは難しいですか?
現在想定しているのは小規模のライブラリなので
スタティックリンクでもいいかとは思っているのですが、
今後のことを考えるとダイナミックリンクでの作成方法
があるのであれば知っておきたいもので。

この辺に詳しい本ないですかね? あればご紹介
いただけるとありがたいです。
大人しくCOMにしとけよ。
ライブラリの使用者が、
ライブラリのクラスを継承する必要があるのなら無理と思った方がいい。

純粋仮想関数のみのインターフェイスクラスを作るのが、
DLLでクラスを使うときのたしなみですから。
72デフォルトの名無しさん:04/03/01 00:18

うーむ。難しいんですね。
COMもちょっと見たんですが、めちゃくちゃ面倒で
とても手軽に使える/作れる印象ではないので。

Longhorn になるとAPIがクラスライブラリになると
別スレで読みましたが、DLL関係も改善され
るんでしょうか?

とりあえず、*.LIBかソースコードで提供することにしまふ。
>>48
そのソースだと動くと思うが・・・

他の人も言ってるようにスタックにデカい配列を作るなよ。
デフォルトだと1MBが上限だ。

static 変数かグローバル変数か malloc() だろ?
>>72
藻まえの作ったクラスライブラリなんか危なくて使えないだろうから
ソースコードにしとけ。
75デフォルトの名無しさん:04/03/01 04:43

MFCってデバイス独立ビットマップ(DIB)を扱うクラスって
あります? API使うしかないのかな?
76デフォルトの名無しさん:04/03/01 21:50
質問させてください。
印刷を行うプログラムを作っています。
GetDeviceCaps()関数の引数にPHYSICALOFFSETXとPHYSICALOFFSETY を
指定すれば、紙の上辺と左辺からの印刷不能領域の長さが
取得できますが、下辺と右辺からの印刷不能領域の長さは、
どのようにすれば取得できるのでしょうか?
上辺=下辺、右辺=左辺なのかとも思ったのですが、
自分のプリンタでは、上辺と下辺の印刷不能領域の長さが
違っているようで、悩んでおります。
>>76
あんたが質問しているドライバはMSで認定されているか?
もし認定されているなら、ガンガン文句言ってやれ。
>>76
PHYSICALWIDTHからPHYSICALOFFSETXと
HORZRESを引いた残りが右余白でないの?
79デフォルトの名無しさん:04/03/02 02:49
アホらしい質問ですいません。

Visual C++.net 2003はVisual C++ 6.0の後継なんでしょうか?
Visual C++ 6.0以降でコンパイルしなさいと書いてある場合、
Visual C++.net 2003でコンパイルするのはその条件を満たしてますか?
>>79
>Visual C++.net 2003はVisual C++ 6.0の後継なんでしょうか?

yes

>Visual C++ 6.0以降でコンパイルしなさいと書いてある場合、
>Visual C++.net 2003でコンパイルするのはその条件を満たしてますか?

たぶんだいたいはyes。

>>80
ありがとうございます。
これで買う決心が付きました。
>>81
あんま試してないんだけど、
ペゾルド本のVC6向けのサンプルコードは
VC.NET2003でもそのままコンパイル&実行
できました。

これからはC#とかも使う時代だから、
ちょっと奮発してVS.NET2003アップグレード
買った方がいいかも。今なら4万円くらいで
買えるし。


8379:04/03/02 03:59
>>82
ありがたいアドバイスですが、貧乏学生なもので・・・
できるだけ費用は最小限に抑えようかと。
今のところC/C++で事足りるソースしか書けないので、
C#も必要になったら検討します。
そのときにはバージョンも上がってるだろうし。
84デフォルトの名無しさん:04/03/02 04:42
ワークススペースのDialogで挿入を押すとIDD_FORMVIEWって言うのが
あるじゃないですか、あれってメインのダイアログに貼り付けられるんですか?
またできるなら参考になるサイト教えてください。
おねがいします
85デフォルトの名無しさん:04/03/02 05:01
VC++2003.NET(アカデミック)でシェアウェアはOKですか?

>>83
貧乏学生なら、アカデミック版買うチャンスだぞ。
めちゃ安いからw
>>83
学生なら2万円でVS.NET買えるぞ!

【太っ腹?】VSもらえるStudent Day【囲い込み?】
http://pc2.2ch.net/test/read.cgi/tech/1076512706/

MSはタダで配る計画まで持ってるらしい。
>>85
アカデミックは商用もOKだけど、
アクティベーションがあるようです。
>>88
ウゲゲゲゲ
イラネー
>>89
でも2万だし。正規品の1/5の価格です。
>>88
クラック出来ねーの?
ウプグレードならベクタで33,990円で売ってるな。
http://shop.vector.co.jp/service/campaign/lib/
でも俺は(゚听)イラネ。
ダイアログでESCやら一部キー入力を制限するには
MFCならPreTranslateMessageで何とか出来ますが
MFCを使わないでやるにはどうしたら良いでしょうか。
MFCのソース覗いた所メッセージループ内でPreTranslateMessageを
TranslateMessageの前に呼び出して実現していることが分かりましたが
DialogBoxで作成したダイアログでは自前のメッセージループでは無いので
実装することができませんでした。

VC6.0+MFCで開発したプロジェクトが
.NET2003でビルドできませんでした。
単純には移行できないらしい。

>>93
メッセージループで TranslateMessageを
呼び出す前に自前のPreTranslateMessage関数を
呼び出したらどう?
96デフォルトの名無しさん:04/03/02 10:31

このコード、GCCだとコンパイル通るのですが、
VC++6.0だとコンパイルできないのです。
通したいのですがなにか技ないですか?

#include <iostream>
class A { public: int a1; char *p; int a2;};
class B {public: int b1; int b2;};
union C { A aa; B bb;};
C c = { aa:{ 1, "hoge", 2 } };
C d = { bb:{ 3, 4 } };
int main(){ std::cout<< c.bb.b2 << "\n"; return 0;}

>>96
何だそのコード。gccで通るのか確かめたくもないな。
コンパイル通すだけなら、
C c;
で切っといてmain内で
c.aa.a1 = 1;
とかをそれぞれやれば?
9893:04/03/02 13:04
>>95
ですからDialogBoxで作成したダイアログでは自前のメッセージループでは無いので
それが出来ないんですよ。


MFCみたくCreateDialogで作成後自前のメッセージループ回すか
システムフック使えば何とかなるかとも思いますがどちらもスマートでない・・・。
>>98
APIオンリーでダイアログ使ってるの?
10093:04/03/02 16:17
>>99
そうです。
>>100
APIで記述してもWinMain()のメッセージループはあるのですよね?

子ウインドウ作った場合も、メッセージはWinMain()のメッセージループ
で取得されて、目的のウインドウ目掛けてディスパッチされると思うんですが。
MSGにターゲットのhWndが含まれているから、こういうことができる。

これじゃ回答になってない?
>>101
おまえWin32APIでモーダルダイアログ作ったこと無いだろ。

>>100
スマートな方法は無い。
10393:04/03/02 17:00
>>101
一応、メッセージループは存在しますがその前で
DialogBoxを使用しダイアログを作成しているので
そのメッセージループは基本的には使われることは有りません。

最初、そこに飛ばされるものだと思ってコード組んでたのですが
どうもうまく行ないので調べてみたら件の事に気が付いた次第です。
ですのでMainのメッセージループでは取得出来ません。
>>103
CreateDialogだっけ?
そっちじゃダメなん?
10593:04/03/02 22:05
>>104
ですからMFCみたくCreateDialogで作成後自前のメッセージループ回すか
システムフック使えば何とかなるかとも思いますがどちらもスマートでないので
何か良い方法は無いかなぁとお知恵を拝借しに参った次第です。
106 :04/03/02 22:25
一例ですがクラスで"->"を押した瞬間にずらっと
変数がでてきたりするときと出てこないときが
あるんですがどうやって切り替えてるんでしょうか?
>>106
VC6だけど、APIレベルで定義されてる大文字の構造体
(WNDCLASSとか)だと表示されない気がする。
なんとかならんのかな。
学校で聞けやガキどもが
そういえば、自分で作ったライブラリを登録したときに、
前は"->"みたいな時に候補がずるっと出てきたけど、
ある日OS再インストールした後からは出てこなくなっちゃったなぁ…。
これもなんか設定とかあるのかな…。
一通り探したつもりなんだけど結局よくわからなくて諦めたんだ。
再インストール前も後も同じVC6なのに挙動が違うから、最初は気持ち悪かった。
過去スレで何度も出るけど
*.ncbファイルを削除してプロジェクトを立ち上げる
と、出てくるかも知れぬ。

あと、メンバじゃ無くて関数になるけど、
VC6だと日本語で終わるコメントの後は出てこないような気がする。

// ぬるぽ
::MessageBox( <- ヒント出ない

/* ぬるり */
::MessageBox( <- ヒント出る
俺も初心者だけど参考にはなるかも。
>>93

ダイアログプロシージャで、IDCANCEL、でESCはつかまる。
あと、WM_DLGCODE WM_*DOWN UP とかで、
どのキーもなんとかなるような気がするけど、
実はもちっと細かいところで俺も苦戦中。
>>97
つまない答えありがとう
サウンドレコーダを作りたいのですが、
まったく手の付けようがなくて困っています。
どこかに、そういったサンプルソースはないでしょうか?
114デフォルトの名無しさん:04/03/03 18:06
timeGetTimeを使おうと思ってwinmm.libをリンクさせたんですけど、
なぜか「定義されていない識別子です」ってエラーが出ます。
なにかこの関数特有の問題にぶつかっているのか、他に根本的な問題を見落としているのか
ド素人なのでちょっと見当がつかないのですが、
こういった場合どんな問題が考えられるでしょうか。
どなたか助けてください。お願いします。
>>114
mmsystem.hがインクルードされてないからだろ。
WIN32_LEAN_AND_MEANか何かが定義されてるとこのヘッダはインクルード
されなかったような気がする。
すげー!簡単なチャットを作ってるんで、
まさにWIN32_LEAN_AND_MEAN定義をしてあります。
他のプロジェクトでは特にヘッダファイルもいらないのに
何でこのプロジェクトだけエラーがでるのかなぁと思って悩んでたんですが、
おかげさまで解決しました。
ありがとうございました。
>>113
簡単に済ませたいなら「MCI 録音」あたり、
とことんやるなら「waveInOpen 録音」あたりでぐぐれ。
118 :04/03/03 21:24
>110 サンクス。
>>117
ありがとう。
120デフォルトの名無しさん:04/03/06 20:03
よろしくお願いいたします。
プロジェクトの設定で「MFCを使用しない」にすると
リンクタブのオブジェクトライブラリモジュールに
システムライブラリ(user32.libとか)が出てきますが
「MFCを使用する」にすると出てきません。
これは一体どういうことでしょうか?
MFCのDLL中にあるということでしょうか?
Visual C++.net 2002を持っているのですが、
Visual C++.net 2003を手に入れるには、買いなおす
しかないのでしょうか?
>>121
そのとおり。
123121:04/03/07 14:32
>>122
ガーン
・・情報ありがとうございまうす。
・・と思っていたら、私の質問に誤りがありました!
私が使っているのはもっぱらVisual C++なのですが、
パッケージは、VisualStudio.net 2002でした。
買い換えるとますます高いわけですが、やはり無償アップデート
等はありませんか?
>>123
あるわけねーだろ。
あった気がするけど。
…っとそれっぽいのが。
ttp://pcweb.mycom.co.jp/news/2003/04/22/25.html
今はどうなってるか知らんけどな。
ただ、アカデミックは無理とか言う話だった気がする……

うちは、2003から入った人だからよく覚えとらんなぁ…
アカデミック以外は無償で送られてくるんじゃなかったっけ?
>>125
無償アップデートは終了してるよ。
>>123
VSならステップアップグレードに汁。
4万円くらい。
130121:04/03/07 16:47
124-128
情報ありがとうございます。
期間終了とのことですが、しかし私が持っているのは
アカデミックだったので、どちらにしろ無意味でした・・。

それにちなんで、もう一つ質問があるので、宜しくお願します。
私がVC++しか使わないのにStdioを買っていたのはC++の最適化コンパイラ
が欲しかったからなのですが、2003でもVC++の方には最適化コンパイラが
搭載されていないのでしょうか?
>>130
VCにはつーか、Standardにはない。
そしてProfessional版以上はVSしかないという現実。
132121:04/03/07 17:55
>>131
よくわかりました。
ありがとうございました。
VCでできてVBでできないことってあるんですか?
>>133
実行速度。
バイナリエディタでひらくと
12 34
なるファイルがある場合

このファイルを読み込んで
12 34 と

ウインドウに表示する、表示するサンプルプログラムを
教えてください。
>>135
if ((strcmp(txt, "12 34") == 0)
  printf("12 34\n");
>>136
すいません。質問が悪かったです。

バイナリモードでファイルを読み込んで
その内容をウインドウに表示プログラム

です。
CFile cf;
CString cs;
char uc;
unsigned char ucc;
int a;
if(cf.Open("ファイルのあるばしょ",CFile::modeRead)==0)
return;
cf.Read(&uc,1);
ucc=(unsigned char)uc;
a=atoi(&uc);
cs.Format("%x",ucc);
MessageBox(cs,MB_OK);
cf.Close();

これで一応表示されるとみた デモなんか無駄なことばかりしてると思う
初心者だもの
139138:04/03/07 21:15
あ、 aとか関係ないでした いろいろ試してたからその残骸
>>137
char *buf;//ここにデータを受けておく
char DumpBuf[8];
//以下をループ
wsprintf(DumpBuf, "%02x", (UCHAR)buf[i]);

スペースや改行を適当な場所に入れること
141140:04/03/07 21:46
補足だが
CString DumpStr = "";
にしておいて
DumpStr += DumpBuf;
とかして出力文字列を集めていくんだよ
>>140
なんで DumpBuf[8] なのだ? 3だろ?
143140:04/03/07 22:36
>>142
UCHARキャストしてるのであり得ないんだけど、万一化けたことを考えて
いちおう32bit分取ってみたが。部分的に書き換えてキャストし忘れとかも
あるかもしれないし。

こういうのはダメ?
9じゃないとダメっつーことか
>>143
bufはchar型へのポインタなんで1byteを超える事は無いと思われ。
それに "%02x" も1byte以上は処理しないだろうし。

char DumpBuf[2] なんてプログラムを書いて
たまたま動いていた漏れが言うのもなんだが。w

char DumpBuf[sizeof("FF")]; と宣言するのが良いかも。
>>145
つーかUCHARキャストしないとunsignedで処理されるので0x80以上は
頭にFFFFFFが付いて8字になるよ。"%02x"は「最低2字」だからオーバー
するなら無視されて2字を超えるものが入る。
147137:04/03/08 07:23
>>140-141
たびたび、すいません。わかりません・・・
コピペしてそのまま使えるくらいのサンプル
を教えていただけないでしょうか。
宜しくお願いします。
>>147
宿題なら宿題スレへ。
そうでないなら、ちっとはその使えない頭を使ってみようと言う努力くらいはして見せろ。
>>146
>UCHARキャストしないとunsignedで処理されるので
「signedで処理されるので」だな
%xが32bit幅だからということで
CString GetDumpStr(char * buf, DWORD size)
{
  char TempBuf[9];
  CString DumpStr = "";
  for(UINT i = 0; i < size; i++){
    ZeroMemory(TempBuf, 9);
    wsprintf(TempBuf, "%02x", (UCHAR)buf[i]);
    DumpStr += TempBuf;
    if((i + 1) % 8 == 0){
      if((i + 1) % 16 == 0)
      DumpStr += "\r\n";
    else
      DumpStr += " ";
  }
  else
    DumpStr += " ";
  }
  return DumpStr;
}
これでダメって言ったらネタだねもう
っつーか、プログラムとしてダメダメだろw
153デフォルトの名無しさん:04/03/08 10:37
VCでゲームを作っているんですけど、
現在時間の表示の仕方教えてください。
現在時間の取得の仕方が分かりません
155デフォルトの名無しさん:04/03/08 10:47
>154
そこは一応書き込む前に見ました。
でもよく分からなくて…
マルチ死ねよ
158デフォルトの名無しさん:04/03/08 11:02
>>157
どうもです、これなら分かりそうです。
159デフォルトの名無しさん:04/03/08 11:04
cl.exeでコンパイルするとき、なぜあそこまで大量にエラーが出てくるのかな?
その割にはちゃんとコンパイルできてるし。

#include <iostream>
using namespace std;

int main()
{
  cout << "aaaaa\n";
  return 0;
}

これだけでも死ぬほどエラー吐くし。
STLの中の人が原因?
>>159
エラー出ないよ
161159:04/03/08 11:22
ごめん、errorじゃなくてwarningだった。うーむ。
コマンドラインでコンパイルしてるってことか?
それならincludeにパスが通ってないんじゃないか?

QuickCのころは警告度最大でコンパイルしてたけど、
VCだと最大にするとwarning出まくりで気持ち悪いから
デフォルトの警告度にしてる。

以下の現象が起きてしまうんですがなぜでしょうか?

親ダイアログ作成

子ダイアログを親ダイアログAを親にしてDialogBoxで作成。

子ダイアログの子ウィンドウスタティックテキストをサブクラス化。

子ダイアログを閉じる。

すると親ダイアログも自動的に閉じてしまう。
子供の気持ちもわからん親が親になれるかっ!
カメラとマイクからの入力をキャプチャして、動画保存するアプリケーションを作りたいと思っています。
いろいろ検索してみましたが、有力な情報を得ることができませんでした。
そこで質問があります。
MFCで、そういったアプリケーションは作れるのでしょうか?
作れるのであれば、詳細な情報をいたたけると幸いです。
>>159
#pragma warning(disable:4786)
>>166
無理と思う。
MFCではビットマップすらロクに扱えない。
DirectX とか .net になるのでは?
正しくは、MFCには
>カメラとマイクからの入力をキャプチャして、
このような機能はないので、MFCを使ってもその部分で楽はできない、だろ
>>166は基礎的なプログラミング能力から欠けていると思われ。
>>168
わかりました。
DirectXでがんばります。
なんでプログラミングはこんなに複雑なんだ?
int aとかchar *aとかオブジェクト指向とか16進数とか

もっと単純にしる!
というスレ違いな叫び
>>172
1.開式の辞
2.卒業証書授与
3.式辞 校長
4.祝辞 理事長
5.祝辞 来賓
6.送辞
7.答辞
8.閉式の辞
>>172
複雑でない(かもしれない)プログラミング言語
http://www2.airnet.ne.jp/sardine/complang/ABCintro.html
176159:04/03/08 19:01
原因わかりました。こういうことだったようです。
http://support.microsoft.com/default.aspx?scid=kb;ja;154419

Q10 : コンパイラ警告 "C4530: C++ 例外処理を使っていますが、アンワインド セマンティクスは有効にはなりません。-GX を指定してください。" が発生します。この意味を教えてください。

A10 : 標準 C++ ライブラリを使用するプログラムは、C++ の例外処理を有効にしてコンパイルする必要があります。C++ の例外処理は、次の方法で有効にできます。
[プロジェクトの設定] ダイアログ ボックスで、[C/C++] タブの [C++ 言語] カテゴリにある [例外処理を有効にする] (Visual Studio .NET 以降では [C/C++] タブの [コード生成] カテゴリにある [C++ の例外処理を有効にする]) をオンにします。

または


/GX コンパイラ スイッチを使用します (Visual Studio .NET 以降では /EHsc です) 。
177デフォルトの名無しさん:04/03/08 19:21
引数をポインタにするのと参照にするのではどうちがうのでしょうか?
>>172
複雑なコードを単純にするために必要なのさ坊や
179147:04/03/08 20:10
宿題スレにいきます
お手数おかけしました。
180デフォルトの名無しさん:04/03/08 20:23
>>177

1.
リファレンスは初期化時以外に参照先を変更できない。
関数から返ってきたら、引数を渡した時とは別の変数を指していたり、
はたまたNULLが入っているというポインタのような技法が使えない。
リファレンスはポインタを制限強化したものといえる。

2.
リファレンスではオーバーロードできない事がある。
例えば、
 void func1(int a);
 void func2(int& a);
はどちらも同じ呼び出しになるので区別できない。

3.
リファレンスだと再帰的な処理が一貫して同じ形式で呼び出せる。
(a = b = c = d ; とか)
181180:04/03/08 20:25
>>180

自己訂正。2の関数名はどっちもfuncということで。
182デフォルトの名無しさん:04/03/08 22:05
以前前スレで質問したのですが、

std::time_t systime = std::time(0);
std::tm *cur = std::localtime(&systime);

を実行して得られたsystimeの値を hh:mm:ssのようにするにはどうすればいいのでしょう?
初心者ですいません。
自作アプリ起動してタスクマネージャを見てると
そのアプリからダイアログを表示したりすると1回目だけ
16k〜32k程使用メモリが増えたりするんですけど
こういうものなんでしょうか?MDIのアプリを作って
ウィンドウを切り替えたりした時とかも同じ様に
使用メモリが微妙に増えていくんですが・・・。
メモリリークやらオブジェクトの解放漏れやらが心配です(´Д`;)
184182:04/03/08 22:13
>>183
質問するついでに漏れの質問にも答えてくれ!
>184
http://pc2.2ch.net/test/read.cgi/tech/1077985164/173
マルチのくせに生意気な
186デフォルトの名無しさん:04/03/09 07:03
>>168
> MFCではビットマップすらロクに扱えない。
LoadImage()とCBitmapを組み合わせれば、それなりにできますがね。
あと、あなたはCImageを知らないようですね。
>>182
算数の世界
188デフォルトの名無しさん:04/03/09 11:01
VBはランタイムが必要だからヘボい
とかよく言われますが、例えばVCでも
Cのランタイムdll(MSVCRT.dll)が
必要なので一緒だと思うのですが、
なぜなんでしょうか?
vcrtは最初からシステムに入ってるし、バージョンも問題にならない。
vbvmはバージョンごとに自分で用意しないといけないから
「ランタイムが必要」という認識が生じる。
つーか、スタティックライブラリ使えばMFCとかCのランタイムのDLLはいらない
191188:04/03/09 12:46
>>189-199
レスありがとうございます。そういうことなんですね。
ところでMFCにはスタティックライブラリを使用するのを
プロジェクトの設定で出来ますがCのランタイムについては
どうすればできるのでしょうか?
192デフォルトの名無しさん:04/03/09 13:35
エクスプローラからdwsを起動すると、既存のdevenvがあるとき
それが閉じられてしまって起動するのですが、これって
どうにかならないのでしょうか?オプションを見ても
それらしき設定がないのですが...
>>192
vc6?
194192:04/03/09 14:06
はい
>>191
>プロジェクトの設定で出来ますがCのランタイムについては
msvcr71.dllとかのバージョン番号つきはMFCのDLLの設定と同じみたいだが
msvcrt.dllは設定できないみたい。
>>192
フォルダオプションの関連付けのアクションでDDEを使用しないように汁。
197192:04/03/09 16:04
>>196
すごい!!長年の悩みが解決しますたTT
198188=191:04/03/09 16:41
>>195
レス遅れてすみません。
どうもありがとうございます。
VS6.0しかないのですが、VS.net
だとMFCの設定に合わせてCランタイム
もスタティック、ダイナミックリンクされる
んですね。
でもMSVCRTってMSのうえにVCってもろに
ついているのにシステムライブラリ扱いなんですね。
他のC++処理系(BCBとか)はどうやってるんだろう。
(.netのMSCOR LIB.dllみたいな感じで、どのコンパイラ
メーカーもウィンドウズだとこれを使うんですかね。
それにしてもVCってついているのはちょっと...)
>>198
>プロジェクトの設定で出来ますがCのランタイムについては
プロジェクトの設定 -> C++ -> コード生成 -> 使用するランタイムライブラリ
じゃないのか?
200デフォルトの名無しさん:04/03/09 22:20
SDK→MFCの順で勉強をしようと思うのですが、
MFCでSDKのテクニックは全て使えるのでしょうか?
MFCであえてSDK流にAPIをダイレクトに呼び出す様な・・・
(SDK + α = MFC ?)
つーか、MFCメインでやってても
APIをダイレクトに使わねばならないことは
多い。
つーか、APIぬきでMFCのみってのは、ほとんど無理。
203200:04/03/09 22:48
MFCに移行後も、SDKで得た知識は無駄にはならない
と言うことでよろしいでしょうか?
むしろ、SDK抜きでMFCだけってのは、最初できてもすぐいきづまるって事で、やっぱSDK必須。
さぁ...
>>203
そのとおり。
無駄にならないどころかAPIの知識が必須です。
207200:04/03/09 22:59
ありがとうございました。
これで、心置きなく勉強できます!
SDKマスターするとMFCはどうでも良くなる罠。
アセンブラマスターするとCはどうでも良くなる見たいな?
SDKマスターなんてありえないからMFCに手を出す機会を一生失うだけ
VC入門者はMFC中心にやっていけば良いと思う。
ほとんどそれで間に合うし下手なコード書くより出来上がってるクラスとメンバ関数
組み合わせた方が間違いも少ないだろうし。win32APIは必要に応じてちょこっと
使う程度で良いんだし。
APIをC++で使っているとラッパクラスが欲しくなる。

MFCを見るとそこに(使いにくいなりに)ある。

なので、MFCを使わない理由がない限りMFC中心と言う>211の意見に賛成。
MFC使い込んでいくと、自分でクラスを自作するようになったとき、どういうクラスを
作ってどういうメンバを置いたら良いかが何となく分かるようになっていく。プロが
作ったクラスの設計として手本にするのも良いと思う。
あー、いい反面教師になるね。
まだまだC++勉強中の私は
引数にchar*を取るWin32APIを見ると思わず std::stringを使うようにラップする関数を作ってしまうのですが
いい加減面倒になってきました。
他の皆さんはcharでちゃんとbufを確保して渡す等をその場で行っているんでしょうか?
バリバリのC職人の方はともかく、C++から入った人とかは。
216デフォルトの名無しさん:04/03/10 14:25

STLの string は使わないからよく分からないんだけど、
APIに文字列を渡すときはCStringのインスタンスを
strBuf.GetBuffer() / strBuf.ReleaseBuffer 使ってるな。
Cの文字列と互換性を持たせるやつ。
そんな頻繁には使わないから関数にはしないケド。

MFCやってて、FromHandleとか、一時的なオブジェクトを
返すのがあるけど、あれ、背後で確保したリソースをどういう
風に解放してるのかと思ってソースを追ったら、結構複雑な
ことやってんのね。やっぱガベコレないと面倒なんだなぁと
思った次第。

217デフォルトの名無しさん:04/03/10 15:18
ttp://tmp.2chan.net/guro-gazou/src/1078899406315.jpg
こんな感じでSDIで作りたいのですが、
ダイアログみたいなのはどうやって貼り付けたらいいんですけ?
おねがいします。
218217:04/03/10 15:19
アドレスにguro-gazouって入っていますが
グロ画像のUPする場所にアップしたんで決してグロ画像じゃないです。
CFormView使え
>>218
そんなやつには教えたくない
>グロ画像のUPする場所にアップしたんで決してグロ画像じゃないです。
222デフォルトの名無しさん:04/03/10 16:32
>>219
参考になるサイトありませんか?
224デフォルトの名無しさん:04/03/10 17:01
>>223
ありがとうございます
doc/viewでアプリケーション作るの一般的!?
オープンソースのソフトのソースをいくつか見てみたんです、が!
なんかCViewとかそんなん全然でてこんですよ
ダイアログベースだったんじゃないか?
227デフォルトの名無しさん:04/03/10 21:05
Visual C++6.0を使ってるんですが、これって常時行番号を表示させる事はできないんでしょうか?
マニュアル見てもそれらしい事が書いてある場所が見つけられなかったんで・・・良かったら教えて下さい。
VC6.0でMFCベースのアプリケーションを作成しているのですが、
exe(アイコンの状態)にファイルをドラッグ&ドロップすると起動し、
ファイルが開かれている状態にしたいのですが、
その場合のドラッグしたファイルを受け取る方法が分かりません。
どうか教えてください。
確かInitInstanceの中でコマンドライン引数、
つまりドロップしたファイル名とかね、を
渡すんだよ。
>>228
コマンドライン引数(文字列)を取得なら下記二つのいずれかが簡単
* GetCommandLine()
* __argv[i]

あるいは
MFC CCommandLineInfo
231228:04/03/10 22:14
>>229さん>>230さん
試してみます。
ありがとうございました。

232デフォルトの名無しさん:04/03/11 16:04
VC++6.0SP4で、Ctrl + S でプロジェクトを保存するときに

'C:\XXX\XXX.cpp'
ファイルを保存できません。ファイルが他のアプリケーションで使用されている可能性があります。

というメッセージが頻繁に表示されます。
他のアプリケーションでファイルを開いてもいません。
正常に保存される場合もあります。

VSなどの開発環境をインストールするときに、やってはいけないことをやったがために、
こういう状態になったと思われます。解決方法をご存知の方教えていただけないでしょうか?
233デフォルトの名無しさん:04/03/11 16:04
VC++6.0SP4で、Ctrl + S でプロジェクトを保存するときに

'C:\XXX\XXX.cpp'
ファイルを保存できません。ファイルが他のアプリケーションで使用されている可能性があります。

というメッセージが頻繁に表示されます。
他のアプリケーションでファイルを開いてもいません。
正常に保存される場合もあります。

VSなどの開発環境をインストールするときに、やってはいけないことをやったがために、
こういう状態になったと思われます。解決方法をご存知の方教えていただけないでしょうか?
タスクマネージャを起動してVC++のプロセスがもう一つ起動して
いないか確認。VC++がクラッシュしたりすると画面には出てなくても
プロセスがそのまま残っていたりして、知らずにもう一回VC++を
立ち上げて使っているとそういうようなエラーが出ることがある。
教えてください。
--------------------------------------------------------------
A * a; // 抽象クラス
AA * aa = new AA(); // A の派生クラスその1
AB * ab = new AB(); // A の派生クラスその2

(中略)

void func(A * arg)
{
  // ここで arg が AA を指すのか AB を指すのかを知りたい!
}
--------------------------------------------------------------
上記のように抽象クラスのポインタを引数にとる関数の中で、
そのポインタが派生クラスのどのオブジェクトを指すのかを
知りたいのですが、さっぱりわかりません。
ご存知の方教えていただけないでしょうか?よろしくお願いします。
具体的にやりたいことは、
------------------------
if ( arg == AA型 )
  // 処理1
else if ( arg == AB型 )
  // 処理2
------------------------
こんな感じです。
ヘルプでRTTIでも調べてみれば?
Javaだと気軽にリフレクション使っちまうけど、
C++だと設計から見直す。RTTI使わなくても何とかならないか?
>if ( arg == AA型 )
>  // 処理1
>else if ( arg == AB型 )
>  // 処理2
普通はこーゆーことをするために仮想関数がある
はぁ?
お前は何でもかんでも仮想関数でやるのか。
すごいな。
>>240
オレは>>239じゃないがそれも一つの方法じゃないの?
他人を批判するならおまいの正しいと思う方法を書けよ

いずれにせよクラス設計の問題になると思うけど
242239:04/03/11 18:00
>>240
ここは初心者スレなのでC++初心者を考慮してヒントを書いただけ
>お前は何でもかんでも仮想関数でやるのか。
「普通は」と書いてある。実際に仮想関数にするのであれば
>>238,241 が指摘しているように設計の問題になると思う。

自分の場合、時間がない場合はRTTIを使うか、クラスを判別する仮想関数を追加する。
しかし、基本的には設計を見直して仮想関数内で処理するほうが正しいと思う(個人的には)。
まぁもしかしたら仮想関数を使った方がいい場所なのかもしれないけど
>>236だけだと「普通は仮想関数使う」と言えるほどの情報では無いかと。
244デフォルトの名無しさん:04/03/11 18:05
釣られたかな、よく考えたら >>240 はC++使えなさそうだな。
245235:04/03/11 18:17
RTTI を調べて次のようにしてみました。
------------------------
if ( dynamic_cast<AA *>(arg) )
  // 処理1
else if ( dynamic_cast<AB *>(arg) )
  // 処理2
------------------------
とりあえずは期待した動作をしているようです。
回答してくださった方、ありがとうございました。
246デフォルトの名無しさん:04/03/11 18:33
typeid でぐぐれ
247235:04/03/11 20:02
typeid でぐぐって次のようにしてみました。
------------------------
#include <typeinfo>

if ( typeid(*arg) == typeid(AA) )
  // 処理1
else if ( typeid(*arg) == typeid(AB) )
  // 処理2
------------------------
この方法でも >245 と同じ動作をしてくれました。
どちらの方法が正しいやり方なんでしょうか?
>>242
「普通は」というやつは、質問者を馬鹿にしてる。
質問者は他の言語で仮想化くらい知っているかもしれないだろう。
自分のしきたりを押し付けるなよ。
おまえ、押し売りに向いているかも。
なるほど、こうして質問と関係ないところで煽りあいが始まるのか
250デフォルトの名無しさん:04/03/11 20:29
あげてみよう
>247
意味の解りやすさから言えば247か? ただ、
239じゃないけど、やっぱりC++としては仮想関数でなんとかするのが普通だとおもう。

class A;が更新できないとか言うのなら、しかたないけど。
252デフォルトの名無しさん:04/03/11 22:48
OO厨、ウザイ
>>251
お前の考え方は一人でやる分には十分だよ。
でも、普通、多人数でやる分にはオブジェクト指向は、あんたみたいな奴が
100%ならいいが。ぷ。
>>252
「それは詭弁です。」っと。
大方の、プロジェクトは、下っ端にフィールド作らさせない。よ。
作らさせない
257デフォルトの名無しさん:04/03/11 23:15
学校のデータ変換用ソフトがC++なんで今日久しぶりにソースといふモノを
見たんだけど、プログラム苦手&はっきり言って嫌いな俺にとってはもう
頭グチャグチャになっちゃいましたYO

しかもあと2,3個プログラムが残ってる・・あああ・・

短いからまだいいものの、長いプログラムなんてソース読んで
どうやって中身を知るんでしょうネェ。不思議でなりませぬよ。

えーっと、質問は、随分前にC++のプログラムが〜って話をしたら
えらく馬鹿にされてC++に未来なんてねーなんて言うことを低脳野郎に
言われたんですが、プログラムとしてはどうなんでしょう。未来なくても
使えるなら使いますがね(使いたくないよ・・。
「そーかやっぱり未来はLISPだよな。」とか
いってLisperにでもなりなさい(w
>>257
スレ違いな予感。
>>257
給食喰えるなら、幾らでもプログラム作るぞ。はぁはぁ。
261257:04/03/11 23:20
>>259
スレ汚してごめんなさい。ホントは質問もないんです。

ちょっと書きたかっただけなんですよ。ではッ ノシ
>>257
C++はまともなライブラリがないから、
短期で開発したい企業はC#やJavaでやるんじゃないかな。
すまそ、プログラマーは貴重な人材難だったな
。はぁはぁ
なるほど、こうしてマ板向けの話になっていくんだな。
265デフォルトの名無しさん:04/03/11 23:25
質問させてください。
プリンタで印刷を行うプログラムを作っています。
「MS Pゴシック」「9ポイント」を指定し、
TEXTMETRIC 構造体の tmAveCharWidth を確認すると
15 となっているのですが、実際に20文字を横一列に
印刷すると、30mmではなく約31mm の長さがあります。

tmAveCharWidth ×(文字数) で、印刷される文字の長さが
取得できると思っていたのですが、間違っているのでしょうか?
ご存知の方は、ご教授ください。お願いします。
266257:04/03/11 23:30
>>258
LISP ってなんでしょう。

>>260
あは〜っ、素晴らしい人ですね、あなた。憧れますよ。
1000個以上の2次元配列データを隣り合わせに次々外積計算するプログラム書けッ
っと言われて挫折した不肖ワタクシ、配列にデータを入れるのが精一杯でした・・。

>>262
ライブラリの話はなんか聞いた記憶があります。
でもないことが不満になるような経験がないっす。
そんなに悪いという印象はないんですがネェ。知らないだけですが(w

プログラマの頭は宇宙 と思った一日でした。
TT構造体でお前は、市ね。タイプセットは、仕様書見れば明らか。
貧乏人をイジメルナヨ。
>265
MS PゴシックでなくMS ゴシックの方を使ってください。あるいは、
「P」持つ、「プロポーショナル」の意味や。AveCharWidthのAve(rage)の
意味を噛みしめませう。
TextOut関数で変数(int)の内容を出力するにはどうしたらよいのでしょう
>>269
ロケーるを読んで、今は、右カキかとか読んで、結局、日本語縦書き、
と、朝鮮語の横書きは嫌だな。ぷ。
271269:04/03/11 23:54
やぁ、自己解決しました。
>>270は海超えのカキコですかい?
>>271
へへ、まあがんばれよ。あと、後ろを以下略。ぷ。
273デフォルトの名無しさん:04/03/12 00:21
VC7.1でMFCなんですが、プロジェクトにlibファイルを
追加するのはどこで指定すればいいんでしょうか?
vc6の頃には設定画面にkernel32.lib user32.lib...なんて書いてあるところが有って、
そこに付け足せば良かったような気がするんですが。
274デフォルトの名無しさん:04/03/12 00:22
ロケールで思ったんですが、localeって辞書には
ローカルっていう読み方しかないのですが
ホントにアメリカ人とかはそう呼んでいるのですか?
275デフォルトの名無しさん:04/03/12 00:25
ダイアログボックスのIDを"MYDLG"の様に文字列で
定義したかったんですが、間違えて MYDLG としてしまいました・・・
気を取り直して"MYDLG"と入れなおしたところ、
「この名前のシンボルは既に存在します」というエラーで弾かれていまいます。
この辺のシンボル情報を削除したいのですが、
どこを弄ればよろしいのでしょうか?

ちなみにIDを"MYDLG2"と全く別のものにすると、
コンパイルもプログラムも正常に動きます。
モービル、モバイル、どっちが正しい?
俺はモビールだな、で、いいのだ。
277デフォルトの名無しさん:04/03/12 00:30
表を作りたい場合どうすればいいですかね?
テキストファイルから名前、日にちなどchar型とかint型とか違うのを読み込まなきゃいけないんですが。
2次元配列とかかなと思うんですけど、出来ますかね?
>>274
おそらくロカイルかもな。ぷ。
279デフォルトの名無しさん:04/03/12 00:32
>268
ご指摘ありがとうございます。
それで、申し訳ないのですが、265 は書き込みミスで、元々MS ゴシックを
使っていました。(等幅フォントでないと計算できないですよね)

それでも、計算上で30mm のはずが、実際は31mm になります。
自分としては、tmAveCharWidth がLONG型で表現されているが、
実は小数点レベルが丸められてしまっている or 文字と文字の
間の長さ(tmInternalLeading?取得すると0なのですが)を
計算に加味する必要があるのか、などと原因を考えてみています。
日本語はアセンドしかないから大変だ
外国見るならで鮮度+アセンド=日本のアセンド
で何なんだ。いまいち日本語タイプセットは嫌だ。
おまえらよくスレ違いな質問にレスする気になるよな
MM_LOMETRICかよ
>>273
プロジェクトのプロパティの「リンカ」の「コマンドライン」って所に
入れればいいんちゃうかな。

もしくは
#pragma comment(lib, "*.lib")
>>273
プロジェクトのプロパティのリンカの入力の一番上だろ?
resource.h
local:ローカル、locale:ロケール
financial:フィナンシャル、finance:ファイナンス
mobil:モービル、mobile:モバイル
product:プロダクト、produce:プロデュース
俺の頭の中

administrator : アドミニストラトー
orange : オランゲ
alt : graph
288デフォルトの名無しさん:04/03/12 10:43
STLのmapとか使ってコンパイルかけると警告が大量に出るんですが、出ないようにできませんか?
それともただたんにソースが悪いだけなんでしょうか…
>>288
VC7.1の導入。
それがいなやら
#pragma warning(disable : 4786)
290289:04/03/12 12:25
VC7.0でもいいけど。
291288:04/03/12 13:45
>>289
ありがとうございます!
292やは。あ〜るくんだよ。:04/03/12 16:50
質問だうぞ。
何でMSのSDKとかの各種ファイルっていまだに8.3形式を
かたくなに守り通しているんでしょうか?
294デフォルトの名無しさん:04/03/12 23:36
283,284さま。
ありがとうございました。
無事リンクされました。m(_ _)m
295デフォルトの名無しさん:04/03/12 23:48
これからCを学ぶことになりました。
学校だけでなく自宅でも学ぼうと思いましてVCを購入しようと思うのですが
まだ何の知識もないのでどれを購入すべきか迷っています。
スタンダードかプロフェッショナルか…

よろしかったらアドバイスお願いいたします!
296デフォルトの名無しさん:04/03/12 23:54
ものすごく不思議な質問かもしれんが、
仕様の公開されてないDLLからヘッダーファイルを
生成するとなるとどうすればいいんかね…?
何とかきばってLIBファイルは生成したんだがそこで行き止まり…。

よろしくおながいします…。
>>295
VC単品ならスタンダードしか選択肢がないよ
>>295
アカデミックでVisual Studio.NET 2003 (2万3千円円)を買うか、
アップグレード版の VS.NET2003 (3万5千円)を買うべし。

前者はアクティベーションあり。
後者はアクティベーションなし&インスコに元バージョンも不要。

これから勉強するならC#とかも視野に入れておいたほうがいいから、
VSをオススメしますよ。
>>295
学習用途ならVC何ぞ要らん。
BCCやGCCでタダでやれ。そのほうが勉強にもなるし。
300!
>>295
学割でVS
>>295
学校と同じものを買う
303デフォルトの名無しさん:04/03/13 15:14
>296
そんなことできんのか?
>>293
<algorithm>というヘッダーファイルがあるけど
質問です。
VC6.0でMFCベースのDoc/View形式SDIアプリケーションを作成しています。
ダイアログに付けたボタンにリソースのビットマップをデバイスコンテキストで
貼り付けているのですが、CDialogメンバ関数の役割分担がいまひとつ分からず、
ダイアログを開いた初期状態でそのビットマップが描画されません。
とりあえずOnCtlColorの中に書いて、同じダイアログ内のスクロールバーを
動かしたときには描画されているので、デバイスコンテキストの使い方は
間違っていないと思います。
OnInitDialogに書くと落ちてしまいますし、どうか初期化を行う正しい関数をご教授ください。
ボタンにビットマップを表示させる、という機能でいいなら
CBitmapButtonを使えばいいのでは?
今はCButtonから別のクラス作ってオーナードローで書いてる?
>>306さん
ピクチャボックスにビットマップを描画するのと同じ要領で、
BitBlt等使って描画していました。
CBitmapButtonもオーナードローも知りませんでした。勉強しなおします。
ありがとうございました。
308295:04/03/14 00:22
みなさんレスありがとうございます。

>>297>>302
学校ではVisualC++のプロフェッショナルを使うらしいのですが…
スタンダードのほうが安いので支障なければそっちで、と思ったんです。

>>299
検索してみます!情報ありがとうございます。

>>298>>301
VisualStudioですか。その方が後々役に立ちそうですね。

と、まだ迷っている感じです。
何の学習も始まってないのにちょっと先走ってしまったのかな、と
反省しております。

アドバイスを参考にさせていただきます。ありがとうございました!
309デフォルトの名無しさん:04/03/14 01:45
お前らは Time=Dateだな
わかっていたよそんなことは。フフフフ
>>309
いやいや、 Time == Money だよ
APIのアプリケーションでTRACE()を使うにはどうしたらいいんですの?
作る
>>312
用意されてないんですか、、、。TRACE()はMFCのみなのかな、、
_RPT0(_CRT_WARN, "ウンコー\n");
_RPT1(_CRT_WARN, "%s", "ウンコー\n");
>>307
CButtonクラスにSetBitMap()というのがあるよ
(CBitmapButtonはひとつのボタンに4つのビットマップを割り当てるのに使う)
CString型の変数を、LPCWSTRに変換する方法がわかりません。
どうしたらいいのでしょう?
MultiByteToWideChar
>>316
俺はいつもこうやってる。

CString csData = "TEST";
LPTSTR lpszData = new TCHAR[csData.GetLength() + 1];
_tcscpy(lpszData, csData);

もっと効率いい方法があったら誰か教えてくれると嬉しい。
なんだかヤレヤレって感じ
汎用変換マクロ

汎用変換マクロは基盤となる機構を形成します。上のマクロの例で示した A2W はこうした "汎用" マクロの一例です。これは OLE とは特に関係はありません。汎用マクロの一覧を以下に示します。

A2CW (LPCSTR) -> (LPCWSTR)
A2W (LPCSTR) -> (LPWSTR)
W2CA (LPCWSTR) -> (LPCSTR)
W2A (LPCWSTR) -> (LPSTR)

321質問です!:04/03/15 22:33
「プロジェクトにwinmm.libを参加させる・・・」
とはどのようにすれば宜しいのでしょうか?
322321:04/03/15 22:40
あ、環境はVS.NET 2003です・・・
winmm.libの居場所は突き止めました。
>>321
#pragma comment(lib,"winmm.lib")
>>323
どうもです。
やってみます!
>>318
CString csData = "TEST";
CString lpszData;
lpszData = csData;
>>317 >>318
どうもありがとう、できました。
CStringとLPCWSTRは互換性があるので、
そもそも変換の必要すらないはずなのだが・・・
328デフォルトの名無しさん:04/03/17 00:54
>>327 (°Д°)ハァ?

LPCWSTR unko = L"ウンコー";
CString string = unko;// OK
LPCWSTR unko2 = string;// NG
>>316
UNICODEビルドにする
>>328-329みたいな奴はまだ回答するレベルに達して無いので書き込みを控えて欲しい。
>>331
CStringにoperator LPCWSTR なんてもうありませんが、何か?
333332:04/03/17 01:45
もちろん、UNICODEビルドじゃないときね
>>333
何勝手に条件つけてんだ
>>334
で、>>328-329の何が間違ってるの?
つまらん質問ですまそ。

VisualC++.net 、 Windowsフォームアプリ(C++マネージ拡張)で
複数のフォームをもったアプリを書こうかとおもうんだけど、
自分以外のフォームを閉じようとするにはどうすればいいんだろ?
一行で煽るのも良いが、初心者スレなんだから質問者に分かるように自分の
思ってることちゃんと説明しろよ。傍で見てても誰がどっち向いて言ってんのか
よくわからんよ。
最初の質問者が悪い。
間違いない。
MFCを使って開発しています。
ソフトをバージョンアップしたのですが、シリアライズしたいデータが増えてしま
いました。ファイルの読み込み・保存はMFC標準のC<ソフト名>Docクラスの
Serialize関数で行っています。そこで、以前のバージョンとファイルの互換性
を持たせるにはどのように実装するのが一般的なのでしょうか?互換性に関し
ては、古いバージョンのファイルが最新のバージョンで読み込めて、最新のバー
ジョンで保存したファイルと同じ形式のファイルで保存できればいいです。
調べてみたところ、GetObjectSchema関数を使ってオブジェクトのバージョンを
取得し、Serialize関数内でオブジェクトのバージョンごとに分岐させて処理すれ
ばうまくいきそうですが、これが一般的なのでしょうか?
一般的です。
>>340
レスありがとうございます。
ゲーム作ってます。
ソースファイルが500を超えてきて、
ソリュージョンエクスプローラで該当のソースコードを探し出すのに時間がかかってしまいます。

フォルダを作る以外に何か良い方法はありませんか?
>>342
VCのバージョンは?
344r:04/03/17 22:24
>>342
プロジェクト分けれ。
VC++ で使える商用利用可能な正規表現ライブラリはありませんか?
>>342
一度に全部のソースが必要なのかー?
プロジェクトを分けて lib に汁。
>>346
たぶんアレだ。ゲームだから、

class CEnemy{};
 class CEnemySURAIMU public CEnemy{};
 class CEnemyBESU_SURAIMU public CEnemy{};
 class CEnemyHOIMI_SURAIMU public CEnemy{};

class CPartner{};
 class CPartnerSENSI public CPartner{};
 class CPartnerSOURYO public CPartner{};

みたいに派生させてて、さらに1クラス1ソースファイルになってるんじゃないかな?
>>345
boost::regexは商用利用可だと思うけど、自信ないのでちゃんとライセンス読んで。
>>348
Template ですね。VC++ 6.0 で動くかな。。
バージョンはvs.net 2003です。



現状では、LIBがすでに3つに分かれていまして、
汎用ライブラリ、ポリゴンエンジン、ネットワークエンジン。 
exeプロジェクトは2つ、クライアント、サーバーです。
ネットワークエンジンとポリゴンエンジンは共用しています。

この環境において、
たとえばゲームのメインを編集している時に、
ちょっと爆発エフェクト増やしたいなって思ったら、エフェクト用のクラスBombEffect.cppをファイル一覧から探して開いて編集開始、
BombEffect編集中にポリゴンエンジンの機能不足を感じたら、さらにポリゴンエンジンまで戻り、ポリゴンエンジンで行列演算の間違いに
気がついたら、こんどはジオメトリライブラリまでさかのぼる事になります(極端な例ですが・・)。
一度この修正に入ると、Try&Errがしばらく続くので、その間は複数のクラスを同時に編集する機会が発生します。
ファイル数が少ないうちは良いのですが、ファイル数が増えてきたために、ファイル間移動自体に時間がかかるようになってきました。
みなさまは、こういった問題をどのように解決してるのか、参考意見をいただければと思いました。

私は、最終呼び出し順に並んでくれるようなブックマーク(できればメソッド名まで)や、自分でランドマークが付けられる機能があれば、
5〜6箇所前後の修正を同時にしなきゃいけないケースでも、メインルーチンとサブルーチンの行き来がスマートだなぁとおもうのですが、
こういう機能は無いんですかね?

今は、クラスのメソッドを右クリック>定義位置にジャンプ といった方式で行ったり来たりしていますが、深いと結構手間です・・。

>>347

そうそう、1クラス1ファイルです。ひょっとして皆さんは数クラス1ファイルなんでしょうか?
>>351
VS2003なら、必要なファイル以外のタブは表示しないというのはどうすか?
かいといてなんですが、ソースファイルにブックマークを付ける・・・ってのが希望の機能っぽい・・。
>>353

始めはそれでやっていたんですが、すぐに一覧から外れちゃうんですよね。イチイチ閉じるのもめんどくさくて。

>>355
マクロで何か出来ませんかねー。
ブックマーク上手く設定できないなぁ。。
関連ソースごとにxyzzyを起動する。
まぁ、xyzzyじゃなくてもいいんだが。
要は、エフェクトクラスのソースを一つの(マルチバッファな)エディタで開き、
ポリゴンエンジンのソースを一つのエディタで開き、
ってな具合にやると結構捗る。

で、基本は1クラス1ファイルだが、場合によっては複数入れてるなぁ。
>>358

なるほどー。別エディタも平行して考えて見ます。

ところで、マニュアルを検索したところ、
>ブックマーク, ソース ファイル内の行にブックマークを付ける
という物が、俺が求めていたものに近いらしい。

しかし、名前なしのブックマークしか出来ない・・。ひょっとしてprofessionalだから?(涙)
引き続き調べ中・・。
解決。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vsintro7/html/vxtsknavigatingtext.asp

>タスク一覧のショートカット ("名前付きブックマーク") を追加するには

を使う事にしました。生産性アガッタ。


361デフォルトの名無しさん:04/03/18 21:14
CPtrList aaa::bbb(10)の意味を教えてください
CPtrList aaaのメンバー関数bbbで引き数10
363デフォルトの名無しさん:04/03/19 10:19
クラスaaaにCPtrList型のbbbを宣言しているのでは?と思ったのですが
(10)は配列ではないですよね?
>>363
おまいなあ
配列だったら[x]だろ・・・
365デフォルトの名無しさん:04/03/19 13:39
bbbはstaticでないとだめでした。
コンパイル時にCPtrListのコンストラクタが呼び出される?
ああ、何かと思えば
class aaa
{
static CPtrList bbb;
}
の初期化か。

>365
プログラムが生まれてもいないのに呼べる訳ないだろ。
367デフォルトの名無しさん:04/03/19 16:43
(10)の意味は?
>>367
bbb=10;
369デフォルトの名無しさん:04/03/19 17:40
bbbはCPtrListクラスのコンストラクタだと思うのですが?
>>369
CPtrListのコンストラクタはCPtrList()だと思うのですが?

そのソース、コピペできる?
そのソース、コンパイルできる?
そのソース、実行できる?
そのソースの実行結果、検証できる?
371デフォルトの名無しさん:04/03/19 18:58
元からは弄ってあります。

class aaa {
int gvaaa ;

public:
aaa() {}
aaa( int i ) {
gvaaa = i ;
this->p() ;
}

void p( void ) {
printf( "gvaaa=%d\n", gvaaa ) ;
}
} ;

つづく
372デフォルトの名無しさん:04/03/19 18:59
つづき

class bbb {

public:
bbb() {}
static aaa a ;
} ;

aaa bbb::a(10) ;

main() {
bbb *b ;
b = new bbb ;
b->a.p() ;
}

以上
bbbクラス内のスタティックメンバ変数a(aaaクラス型)を10で初期化。
ユーザーが動かせないウィンドウってどうやって作るんですか?
ウィンドウプロシージャのWM_MOVEで(ウィンドウが動かされたら)もとの位置にMoveWindowすることでも一応できるのですが
「動かす→戻す」の間のブレがちょっと見苦しいんです。
>>374
時計のアプリケーションとかで、ウィンドウ自体にリージョン設定して、
どこを押してもドラッグできるアプリケーションってあるけど、
アレの逆をすればいいんじゃないかなと思うんだけど…どうかな?
たしか、クライアント領域でマウス左ボタンを押下しても、
バーの部分で押されたとみなして処理する…とかそんな処理だったと思うけど…。
それのやり方を解説してるサイトは結構あると思う。
…ここまで書いてナンだけど、もっとスマートなやり方ありそうだ…。
>>374
1. タイトルバーをなくす
試して無いから分からんがPreTranslateMessage辺りは?
>>374
pSysMenu->DeleteMenu(SC_MOVE,MF_BYCOMMAND);
WM_MOVEが思いついて、何故WM_MOVINGも思い出せない。
>>378
お見事!
猫でもできるプログラミングの
Windows SDK編 第1部のイントロダクションのことで質問です。
コピーしてプロジェクトに挿入して実行してみたんですが、エラーが起きます。
エラーメッセージは、
「error C2440: '=' : 'void *' から 'struct HBRUSH__ *' に変換することはできません。(新しい動作 ; ヘルプを参照)
'void*' から非 'void' 型への変換には明示的なキャストが必要です。」
てな感じです。どこが悪いのか教えてください。
宜しくお願いします。
... = (HBRUSH)GetStockObject(WHITE_BRUSH);
既出のトップですね
俺も始めたころ同じ問題で悩んだなぁ。
結局解決できずSDKやめて別サイトのMFC解説に走った覚えが。
385381:04/03/21 14:40
>>382
できました。
ありがとうございます。

>>383
既出でしたか、すいませんでした。

これって猫でもできるプログラミングのミスなんですか?
>>385
ttp://www.kumei.jp/c_lang/setvc.htm
↑の下の方にある蛇足を見れ
>>385
それを書いた当時(VC++4.2)だとコンパイルエラーにはならなかったんじゃ無かったっけ?
あと純粋にCだとエラーにならない(VC6)。拡張子を.cにしてコンパイルしてみそ。
>>387
>あと純粋にCだとエラーにならない(VC6)。拡張子を.cにしてコンパイルしてみそ。
( ゚д゚)ポカーン
389381:04/03/21 17:07
>>386-388
このページ初めて知りました。
ありがとうございました。
>>388
ん ? 何か間違ってるか ?
391388:04/03/21 19:24
>>390
C++コードの拡張子を.cにしちゃだめだろうと言いたかったんですが、
じつはこっちだったんですね。
ttp://www.kumei.jp/c_lang/sdk/sdk_00.htm

失礼しました。m(_ _)m
ダイアログボックスにエディットコントロールを貼り付けたわけですが、
コレにファイルをドロップしたら、
エディットコントロールにファイルのフルパスを入れたいわけなんです。
ちょっといろいろ探しているのですが、ダイアログボックスに張ったコントロールに
ドロップされたファイル名の拾い方がわかりません。
やり方とかしってる方がいたら教えてもらえるとありがたいです。
>>392
COleDropTarget
394392:04/03/22 00:45
>>393
ありがとう。
MFC使ってないからそのまま使うのは無理そうだけど、
とりあえずいろいろやってみるです。
C言語のCGIを作ろうと思ってるんですがコンパイルの仕方がわかりません。
exeファイルをcgiにリネームしてもダメでした。
VC++を持ってるんですけどこれでできるのですか?
>>395
鯖環境を書け。まずはそれからだ。
>>392
EDITをサブクラス化してWM_DROPFILESを拾うっていうのはダメか?
>>396
AAA!CAFEです。
コンパイル済みのファイルをアップロードするそうなのですが。
>>398
winじゃないだろ
BSD!BSD!(AA略
MFCで作ったアプリケーションを、
開発したマシンではないマシンで動かすと、
MFC71.dllがないとかいわれてしまいます。
どうしたらエラーを解決できますか?
>>401
足りないdllを入れる
>>401
スタティックリンクする。
MFCをやめる。
>>401
今時、「MFC共有DLLの使用」なんていう貧乏くさいことはおやめなさいってことよ。
HDDの容量も腐るほどあるんだし。
>>401
そのアプリケーションを窓から投げ捨てる
それを>>405が拾う
>>401-406
ラジャー。
復旧記念age
質問です。
class hogehoge{
  bool flag;
  HANDLE hHoge;
public:
  hogehoge(){
    flag = 0;
  }
  ~hogehoge(){
    CloseHandle(hHoge);
  }
DWORD WINAPI KuSoSuRe(){
    while(flag){Sleep(1000);}
  }
  hogestart(){
    flag = 1;
    hHoge = CreateThread(NULL,0,KuSoSuRe,0,0,NULL);
  }
  hogestop(){
    flag = 0;
  }
}
'CreateThread' : 3 番目の引数を 'DWORD (LPVOID)' から 'LPTHREAD_START_ROUTINE' に変換できません。 (新しい機能 ; ヘルプを参照)
スコープ内でこの名前を持つ関数でターゲット型に一致するものはありません。
どうすればいいんですか?
メンバ関数は渡せない。
static にして、第4引数にthisを渡しましょう。
>>410
ariko
412デフォルトの名無しさん:04/03/29 22:37
すみません、若干スレ違いかも知れませんがどなたかお教えください。

DLL 中で malloc() して文字列を返す場合、この領域はいつまで保たれるのでしょうか?
呼び出し元のアプリが終了した時点で開放されるのか、あるいは自分で開放する必要があるのか。
DLL の関数が終了した時点で失われるということはないですよね?

環境は次の通りです。
Windows XP
Visual C++ 7.0
Delphi 5

VC で DLL を作って Delphi のアプリから呼び出すことを考えています。
よろしくお願いします。
413デフォルトの名無しさん:04/03/29 22:44
>>412
>DLL 中で malloc() して文字列を返す場合、この領域はいつまで保たれるのでしょうか?

死ぬまで。
死ねば記憶(記憶領域の管理)は失われます。

これはDLL内の関数だろうが、アプリ本体だろうが同じ。

>呼び出し元のアプリが終了した時点で開放されるのか、あるいは自分で開放する必要があるのか。

あなたのプログラミングスタイルが「アプリが終了した
時点で解放されるなら、自分で解放する必要はない」と
いうものなら、自分で解放する必要はありません。
414412:04/03/29 22:51
>>413
早いお答えありがとうございます。安心しました。
415デフォルトの名無しさん:04/03/29 23:26
C言語の学習用にVisual C++.net standardを購入してインストールしたんですが
Cのプログラムを書く場合はどのアイコンをクリックすればよいのでしょうか?
本当にしょーもない質問ですいません
>>415
1.スタートメニューからMSVS.NETを起動(横8の字のアイコン)
2.スタートページで「新しいプロジェクト」
3.win32プロジェクト
4.名前を付けてOK
5.アプリケーションの設定で何を作るのか決める
417415:04/03/30 00:41
>>416
本当にすいません。ありがとうございます。
418デフォルトの名無しさん:04/03/30 11:22
Visual Studio 6.0 Service Pack 6 正式リリース
http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp6/default.aspx
419デフォルトの名無しさん:04/03/30 12:12
助けてください。先輩に
「おまえ今日このVBコード C++に張り替えておいてくれ
5時までな!!といって客先に出ていってしまいました。」
20ラインくらいなのですが変換てつだってください。
おねがいします。動作環境で不具合が出たらしくいそいでいるのです
ソース貼れ。
>>419
とりあえず閉じかぎかっこの位置が変だな
422419:04/03/30 13:48
お願いします。VCコンパイルすらわかりません
'備考呼び出しCall StrReplace(OutputLine(StrInt), vbLf, vbCrLf)
’LFをvbCrLfに置換する処理
Public Function StrReplace(ByRef strExp As String, _
ByRef strFind As String, _
ByRef strRep As String, _
Optional ByVal lngStart As Long = 1, _
Optional ByVal lngCount As Long = -1, _
Optional ByVal lngComp As Long = vbBinaryCompare) As String

Dim strBuffer As String '置き換え結果一時格納バッファ
Dim lngPos2 As Long 'InStr 関数用文字検出位置
Dim lngMidSize As Long 'Mid$ 関数で抜き出される文字数
Dim lngTotalSize As Long '置き換え開始ポインタ
Dim lngExpLen As Long '置き換えの対象となる文字列のサイズ
Dim lngFindLen As Long '検索される文字列のサイズ
Dim lngRepLen As Long '置き換えされる文字列のサイズ
Dim lngBufSize As Long '予約された文字列のサイズ
Dim lngMargin As Long '予約バッファサイズと置換サイズの差
Dim lngRepCnt As Long '置き換えを行った回数


lngExpLen = Len(strExp) 'strExp のサイズを得る
lngFindLen = Len(strFind) 'strFind のサイズを得る
lngRepLen = Len(strRep) 'strRep のサイズを得る
If lngExpLen = 0 Or lngFindLen = 0 Then 'strExp または strFind がサイズ 0 だった場合
StrReplace = strExp '何も置換せずに関数を抜ける
Exit Function
End If
423419:04/03/30 13:49
If lngFindLen < lngRepLen Then 'strRep の文字数が strFind より大きい場合
lngBufSize = lngExpLen + ADD_SIZE 'バッファサイズを strExp より ADD_SIZE 多く確保
Else
lngBufSize = lngExpLen
End If
strBuffer = String$(lngBufSize, vbNullChar) 'strBuffer を NULL 文字で埋める

If lngStart <= lngExpLen Then '正しい検索開始点が設定されている場合
If lngStart <> 1 Then
Mid(strBuffer, 1, lngStart - 1) = Left$(strExp, lngStart - 1) '検索開始点より前の文字列をバッファにコピー
End If
lngTotalSize = lngStart
Else '正しい検索開始点が設定されていない場合
StrReplace = strExp '何も置換せずに関数を抜ける
Exit Function
End If
424419:04/03/30 13:50
Do
lngPos2 = InStr(lngStart, strExp, strFind, lngComp) '文字を検索し、その位置を返す
If lngRepCnt = lngCount Then lngPos2 = 0 '置換回数が設定回数に達した場合、見つからなかったことにする
If lngPos2 Then '文字が見つかった場合
lngMidSize = lngPos2 - lngStart '見つかった文字までのサイズを得る
If (lngTotalSize + lngMidSize + lngRepLen) > lngBufSize Then '次回置換時に予約サイズを超えてしまう場合
lngMargin = (lngTotalSize + lngMidSize + lngRepLen) - (lngBufSize + ADD_SIZE) '次回置換時に必要なサイズとバッファサイズの差分を得る
If lngMargin <= 0 Then 'ADD_SIZE 増加するだけで事足りる場合
strBuffer = strBuffer + String$(ADD_SIZE, vbNullChar) 'ADD_SIZE の数だけ NULL を増やす
lngBufSize = lngBufSize + ADD_SIZE
Else 'ADD_SIZE 増加するだけではサイズが足りない場合
strBuffer = strBuffer + String$(lngMargin, vbNullChar) 'lngMargin の数だけ NULL を増やす
lngBufSize = lngBufSize + lngMargin
End If
End If
425419:04/03/30 13:52
Else
lngMidSize = lngExpLen - lngStart + 1
If (lngTotalSize + lngMidSize + lngRepLen) > lngBufSize Then '次回置換時に予約サイズを超えてしまう場合
lngMargin = (lngTotalSize + lngMidSize + lngRepLen) - (lngBufSize + ADD_SIZE) '次回置換時に必要なサイズとバッファサイズの差分を得る
If lngMargin <= 0 Then 'ADD_SIZE 増加するだけで事足りる場合
strBuffer = strBuffer + String$(ADD_SIZE, vbNullChar) 'ADD_SIZE の数だけ NULL を増やす
lngBufSize = lngBufSize + ADD_SIZE
Else 'ADD_SIZE 増加するだけではサイズが足りない場合
strBuffer = strBuffer + String$(lngMargin, vbNullChar) 'lngMargin の数だけ NULL を増やす
lngBufSize = lngBufSize + lngMargin
End If
End If
Mid(strBuffer, lngTotalSize, lngMidSize) = Right$(strExp, lngMidSize) '対象文字列の最後までを抜き出す
lngTotalSize = lngTotalSize + lngMidSize - 1
End If
426419:04/03/30 13:52
Loop Until lngPos2 = 0 '検索文字列が見つからなくなるまでループ

StrReplace = Left$(strBuffer, lngTotalSize) '置き換え結果を返す

End Function

長文すみません以上です
CString StrReplace(CString str)
{
int i = 0;
while(true) {
i = str.Find("\n", i + 1);
if(i == -1) break;
str.Delete(i);
str.Insert(i, "\r\n");
}
return str;
}
TDL::String StrReplace(TDL::String str)
{
return str.Replace("\n", "\r\n");
}
VCで、シリアル通信(送信と受信)ってできますか?
できるとしたらどうすればいいですか?
よろしくお願いします。
comポートを開け
>>418
SP6 キタァァァァァーーーー!!
待ち望んでたぜ……


…でも、VC7.1で慣れちゃったけどな。
432デフォルトの名無しさん:04/03/31 00:26
はじめまして、質問です。

vc++6.0使っているのですが、
クラス内でvectorを使うにはどうしたらいいですか?

普通に#include<vector>して、

using namespace std;
vector<hoge> a;

しているのですが、どうですか?





433APIで:04/03/31 00:34
>>429
CreateFileでCOMを開き
GetCommStateで設定
WriteFileで送信 ReadFileで受信
あとは、ポート閉じるのなんだか忘れた
どうですか?っていうのはナニが聞きたいのだ?
435432:04/03/31 00:47
#include<vector>
#include "hoge.h"
using namespace std;

vector<hoge> a;

と、記述して、ビルドすると、

'hoge' : 定義されていない識別子です。
'vector' : クラスのテンプレート名で仮引数リストの指定がありません。

と、エラーが出るのですが、どこが間違っていますか?
>>435
hoge.hの内容が分からないのに答えられないよ。
437432:04/03/31 01:41
>>436

hoge.hはただのクラス定義なのですが。。
クラスの内容も関わってきますか?
>>432
(ここに何かかいてあるんじゃねーの?) 'hoge' : 定義されていない識別子です。
(ここに何かかいてあるんじゃねーの?) 'vector' : クラスのテンプレート名で仮引数リストの指定がありません。

情報の小出しうぜぇ。つか、hogeの定義が間違ってるんだよ。ヴォケ。
一番たちの悪い質問の仕方だな
440432:04/03/31 03:35
>>438
情報の小出しですいません。質問に慣れていないので。

(ここに何かかいてあるんじゃねーの?)
のところには、

クラスファイルのパスとエラー箇所の行数、
とエラー番号(error C2065 <= こんなんでした)が書いてあるだけです。

mainやメンバ関数無いにvectorを宣言した時はビルドが通るのですが、
メンバ変数として、クラスのヘッダに記述した時だけ
上記のエラーがでます。

441デフォルトの名無しさん:04/03/31 05:20
SP6 DL しました!
相変わらず VBだけは 起動時に SP6 と 起動画面に 入るのですが
VC には、入りませんね。。 ちゃんと入っているか不安です(笑)

いったい何が変わったのでしょう?
>>432
> クラスファイルのパスとエラー箇所の行数、
> とエラー番号(error C2065 <= こんなんでした)が書いてあるだけです。
この辺が重要なわけで。

とりあえず、>>1でも読んで出直してきた方が良いと思われます。
>>442
だまっておしえれ
>>443
教わりたかったら情報提供しろ。それができないなら来るんじゃね。
>>444
俺は教える側。
>>442の位置に書くなら、
前方宣言と一言書けばすむことだろ。
SP4を手に入れた少し後にSP5が出てナンダヨーと思いつつ
また直ぐにSP6が出るだろうと思いそのままにする事2年ぐらいたつか・・・
でもつい最近、好い加減もう出ないだろうと諦めSDKを入れた序にSP5も導入。
そしたらまた直ぐにSP6ですか。全くナンダヨー。
SP5とSDKセットのバックアップCDまで作ったのにさぁ。
>>446
449デフォルトの名無しさん:04/03/31 17:22
Windowsのアプリケーションを作る時に
printfでデバッグ情報を吐かせたいんですが、
この場合標準出力はどこになっているんでしょうか。
>>449
なんでそういう無理なことするの?
もっと自然なやり方があるんじゃない?
>>449
自分で開かなければ、どこでもないです。
ふつうは、OutputDebugStringを使ってVSの出力ウインドウに
表示させます。
>>447
負け組乙w
トレースマクロでもいいんじゃない
と言ってみるでつ
>>453
いいですね。
455デフォルトの名無しさん:04/03/31 20:25
ここで質問するのが適当でないかもしれないですか、
疑問に思ったので質問させてください。
ウインドウを表示するプログラムを作成し、そのプログラムのデバック中に
表示されているウインドウにフォーカスがある状態でF12を押すと、

test.exe の 0x77fa144b でハンドルされていない例外が発生しました : ユーザー設定のブレークポイント。

と言われ停止するのですが、これは仕様なのでしょうか?
調べてもF12に何か割り当てられている様子がないです。
それとも自分の環境がおかしいだけなのでしょうか?
ちなみに環境はVS2003 + Win2000です。
VC6.0でも出るよ。例外にはならないけどブレークする。
なんか、SP6ってプロセッサーパックが使えなくなるって書いてあるんだが
SP6入れた後、CPU命令とか使える?
458455:04/04/01 01:09
>>456
他の環境でも同じ症状がでると言うことが分かっただけでも有難いです。
例外と言ってはいるもののcatch出来ません。
DebugBreak呼んでるのと同じ動作をするようです。
F12を押したら何かアクションを起こすようにしたかったのですが・・・
意外と問題になってないのが不思議です。
回避策が見つからないのでひとまず諦めます。
どうもありがとうございました。
459デフォルトの名無しさん:04/04/01 01:44
mfc を使わないとき、OutputDebugString 使わなくても

#include <dprintf.h>
すれば dprintf で printf 見たく使えるから そっちが楽でしょう。。


P.S.
VC6 で STL 標準の使えるんですか? 今日から使おうと思って。。 STLport を入れました。ライブラリ無しで。
>>459
ほんなら vsprintf()とOutputDebugString()を組み合わせた関数を
自分で作りなさい。
461デフォルトの名無しさん:04/04/01 01:57
>>460 ?????

#include <dprintf.h>
すれば dprintf で printf 見たく使えるから そっちが楽でしょう。。
>>461
なんのこっちゃ・・・
463デフォルトの名無しさん:04/04/01 02:13
OutputDebugString じゃなく

dprintf 使えば ってこと。。 案外知らない人が多いんだね。。。
464デフォルトの名無しさん:04/04/01 02:18
>>460
馬鹿は書き込むな
465デフォルトの名無しさん:04/04/01 02:19
>>463
で、dprintfはVCに標準で入ってるわけ?
466デフォルトの名無しさん:04/04/01 02:20
>>465
入っています!

#include <dprintf.h>

してね!
>>466
あら、本当だ。
MSDNライブラリに書いてないのにね。
DEBUGが定義されていないとコンパイルエラーになるから微妙だな。
外したい時は逆に面倒になる悪寒。
<marquee direction="down">
>>468
結局、デバッグ版とリリース版で切り替える処理を自分で入れなきゃいけないんだな。
そう便利でもないな。
crtdbg.hに_VERIFYがあればいいのに。
473デフォルトの名無しさん:04/04/01 23:19
Outlookのタイプライブラリを使おうとしたんですが、コンパイルが通りません。
何かインクルードする必要でもあるのでしょうか?

環境
Visual C++6.0
Windows XP
Microsoft Outlook2002

a.cpp
<<<<<<< ここから
#import "C:\Program Files\Microsoft Office\Office10\MSOUTL.OLB" \
no_namespace exclude("_IRecipientControl", "_DRecipientControl")

int main()
{
return 0;
}
<<<<<< ここまで
474473:04/04/01 23:19
続き
エラー内容は下記のとおりです。

コンパイル中...
a.cpp
c:\program files\microsoft visual studio\myprojects\test\debug\msoutl.tlh(971) : error C2146: 構文エラー : ';' が、識別子 'Assistant' の前に必要です。
c:\program files\microsoft visual studio\myprojects\test\debug\msoutl.tlh(971) : error C2501: 'AssistantPtr' : 識別名を宣言するのに、型が指定されていません。
c:\program files\microsoft visual studio\myprojects\test\debug\msoutl.tlh(971) : error C2501: 'Assistant' : 識別名を宣言するのに、型が指定されていません。
c:\program files\microsoft visual studio\myprojects\test\debug\msoutl.tlh(975) : error C2146: 構文エラー : ';' が、識別子 'COMAddIns' の前に必要です。
c:\program files\microsoft visual studio\myprojects\test\debug\msoutl.tlh(975) : error C2501: 'COMAddInsPtr' : 識別名を宣言するのに、型が指定されていません。
c:\program files\microsoft visual studio\myprojects\test\debug\msoutl.tlh(975) : error C2501: 'COMAddIns' : 識別名を宣言するのに、型が指定されていません。
c:\program files\microsoft visual studio\myprojects\test\debug\msoutl.tlh(981) : error C2146: 構文エラー : ';' が、識別子 'LanguageSettings' の前に必要です。
c:\program files\microsoft visual studio\myprojects\test\debug\msoutl.tlh(981) : error C2501: 'LanguageSettingsPtr' : 識別名を宣言するのに、型が指定されていません。
c:\program files\microsoft visual studio\myprojects\test\debug\msoutl.tlh(981) : error C2501: 'LanguageSettings' : 識別名を宣言するのに、型が指定されていません。
c:\program files\microsoft visual studio\myprojects\test\debug\msoutl.tlh(985) : error C2146: 構文エラー : ';' が、識別子 'AnswerWizard' の前に必要です。
c:\program files\microsoft visual studio\myprojects\test\debug\msoutl.tlh(985) : error C2501: 'AnswerWizardPtr' : 識別名を宣言するのに、型が指定されていません。
以降省略。
""の中の\は\\とするのに100朝鮮人
476473:04/04/01 23:50
残念。\\にしてみたけど変わりませんでした。
477デフォルトの名無しさん:04/04/01 23:58
プログラムを始めようと思っているのですが、C言語かC++言語にしようか
迷っています。ですが、友達からC++のソフトMicrosoft Visual C++ 6.0を
貰って、それをインストールしました。
これでも、C++のソフトでもC言語はできるのでしょうか?
あと、他にイイ言語があれば教えてください。
よろしくお願いします
>>477
できます。
479デフォルトの名無しさん:04/04/02 00:04
ありがとうございます☆⌒(*^▽^*)⌒☆
それと、勉強するのにココのサイトがわかりやすぞ!っていうサイトが
あったら教えてもらえませんか?C++でも、Cでもいいので・・・
いくつも質問してすみません。
>>479
ここ。<判りやすいぞ
482デフォルトの名無しさん:04/04/02 00:15
ありがとうございます(*^▽^*)
本当にありがとうございました☆
>>480
変な癖がつきそうだし、ansi違反のサンプルだし…
>>484
もうちょっとましなのあったら教えてあげて。
残念ながら自分は知らないです。
よろしくお願いします。
>>484
具体的にどこらへんが悪い?

特に良いと思うわけでもないが、そんなに問題があるようにも見えないので。
>>484
まぁ、printf()如きに「しょうがないなぁ〜」とか言われたくないよな。
(*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*)
(*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*)
(*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*)
(*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*)
(*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*)
(*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*)
(*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*)
(*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*)
(*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*)
(*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*)
(*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*)
(*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*) (*^▽^*)

>>486
void main()
>>486
gets()
空白の入れ方が変。
口調が丁寧に見えて実は独り善がり。
(asciiコードで書くべき)サンプルに2バイト文字を使用している。
自ら指摘しているミスをサンプルで犯している。

ざっと見ただけでこんなに出てくるんだからお郷が知れるよ。
まあまあ。この手のサイトはほとんどオナニーで作ってるようなもんだから。
俺がちゃんとしたテキストとして読んで勉強になったのは、
http://www.asahi-net.or.jp/~yf8k-kbys/
ここと猫だけ。
>>491
そこは少なくとも丁寧には書かれているね。
疑問点はないではないんだけどまぁいいか。
>>473
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\Office10\\MSO.DLL" named_guids
#import "C:\\Program Files\\Microsoft Office\\Office10\\MSOUTL.OLB" \
no_namespace exclude("_IRecipientControl", "_DRecipientControl")

後、不必要なファイルをインクルードしていると同様なエラーが出る事がある。
ゴミファイルが影響する事もあるので、
Debugフォルダ内のすべてのファイルを削除してから、
再コンパイルする事。
494493:04/04/02 10:45
ついでにこれも貼っておく。
ttp://www.codeproject.com/com/outlookcontacts.asp
495DLLのデバッグ:04/04/02 16:04
DLLのデバッグを行おうとしていますが、デバッグモードに入りません。
環境はWindows2000でのVisualC++6.0です。

IISのエクステンションを作ってそれをデバッガーでデバッグしたいと
思っています。VC++から新規作成でISAPI Extension Wizardを使って
サーバー拡張オブジェクトを作成し、デバッグモードでビルドします。
ビルドされたDLLはIISによりアクセスできるInetPub/wwwroot/以下の
ディレクトリに置き、アクセス権限も与えます。
dllは正常に作動し、ブラウザで起動するとDefault()の中で指定され
ているメッセージが返ってきます。

ここで、デバッグの為にプロジェクトの設定の中のデバッグタブにある
デバッグセッションの実行可能ファイルをC:\Winnt\system32\dllhost.exe
に設定し、Default()中にブレークポイントをつけて、ブラウザでDLLを
呼び起動させてみました。DLLは正常に動作しますが、デバッグモードには
入りません。デバッグセッションの実行可能ファイルをC:\Winnt\system32\
inetsrv\inetinfo.exeにしてやってみたりしましたが、うまく行きません。

MSDNにあるDLLのデバッグに関するページを参考にしているのですが、
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vsdebug/html/_core_debugging_dlls.asp
うまく行きません。Inetinfo.exeのバージョンは5.0.2195.6620
dllhost.exeのバージョンは5.0.2195.6692です。
どなたかよくご存知の方、教えていただけますでしょうか。
よろしくお願いします。
質問させていただきます。

VCでコードを編集中にキーボードのどこかに手があたって、タブのところに ^ がスペースのところに ` が表示されるようになったのですが、どこを触ったらこうなるのでしょうか。
>>496
[編集] -> [高度な操作] -> [空白の表示]
>495
DLLから適当な時期にDebugBreakを呼んで、
そこおからデバッグかければいいんでないか?
499DLLのデバッグ:04/04/02 19:24
>498 さん、メッセージありがとうございます。

DebugBreak() 入れてやってみましたが、うまく行きませんでした。
通常のEXEプログラムに DebugBreak() 入れますとその場所でデバッガー
が起動しますが、DLLの中途に入れてもデバッガーは起動せず、また
DLL自身も動作しませんでした。

なにか、他に設定しなければいけないところとかあるのでしょうか。
>>499
ビルド
 +-- アクティブな構成の設定

がReleaseになってるとか。
501473:04/04/03 00:12
>>493
ありがとうございます。
でもうまく動きませんでした。
自分も紹介して頂いたページを参考にしてやっていたのですが
最小限のコードにしてもうまくいかずどうしたものか困っていたところです。
ダウンロードしたソースも同じエラーが出てしまっています。
502473:04/04/03 13:05
'AssistantPtr' この型を定義しているところがわかれば
解決できるような気がするんですが、どこで定義しているのでしょう。
知っている方いませんか?
複素数使いたいのに
<complex.h>が#includeできません。
フォルダ検索したら無かったです。
代わり(?)にcomplex(拡張子無し)があったんですが、
これはどうやって使うんですか?
>>503
お使いの処理系のマニュアルをご参照ください。
ま、complex.hなんて過去のものを使っているような資料は捨てろってこった。
>>502
検索したい文字列を右クリックして
「定義位置を表示」とか「定義へ移動」とか
506473:04/04/03 17:32
>>505
定義されているものを参照したいわけではなくて、
>>474
のエラーがでて困っているのです。
>>473
>493の指摘した行はちゃんと追加したのか?
質問です.
printf("%.100lf",a);
としてdouble型変数を表示しているのですが,
少数点以下17桁までしか表示されません.あとは0です.
Cライブラリの%lf変換が切っているのだと思うのですが,
ccなどと同じように少数点以下63桁まで表示したい場合,
どこの設定を変更すればいいのかどなたか教えていただけませんか?
doubleの精度は、float.hで定義されている、DBL_DIGである。
VC6では15なので、doubleはそもそも、63桁も有効精度がない。
だから、doubleを使うのは止めろ。
http://www.google.com/search?num=50&hl=ja&ie=Shift_JIS&c2coff=1&q=%91%BD%94%7B%92%B7+%95%82%93%AE%8F%AC%90%94%93_&lr=lang_ja
510508:04/04/04 00:23
お返事ありがとうございます.
ご忠告いただいたことを心掛けたいのですが,
OS,マシン毎のprintf()表示によるdoubleの誤差を調べることをやろうとしているのです.
とりあえず,doubleのビットをポインタ参照で調べて,
それを手計算で正規化して,printf()で表示された値と比較したいので,
とりあえず63桁の出力がほしいのです.とりあえず,DBL_DIGの値を変更してみようと思います.
>>510
>OS,マシン毎のprintf()表示によるdoubleの誤差を調べることをやろうとしているのです.
OSやマシンで計算誤差が出るのか・・・・
513508:04/04/04 02:39
>>509 >>511
勉強不足ですいません.結局ヒントをいただいたのにわかりませんでした.
crtのoutput.cやfptrapあたりを見てますが
変換ルーチンはintel\*lib\conv.libの中にあるみたいでソースがないです.
とりあえず,どこか変換ルーチンの中のループを多くするようにどこか書き換えることになりそうです.
あきらめるしかないのでしょうか.0.1の表示さえ見れればいいのですが…
>>512
x86なんか特にOS毎に違った値になると聞いたのですが,BSDとLINUXは今のところ同じですねぇ.
>>502
MSO.DLLだと思う。
つーか自分でやったところではそれで行けてるんだが・・・
新しくプロジェクト作ってやってみた?
515514:04/04/04 09:22
>>502
デバッグフォルダを一度削除してやって見れ。
それでもムリならこれコンパイルして見ろ。
ttp://www.42ch.net/UploaderSmall/source/1081038116.zip
>>513
ちょっとだけ判ってきたけど、もっと明確に説明してくれないか?
どこの誤差を比べたいのかね?
>>513
_control87, _controlfp あたりで調べるとなにか判るかも。
このあたりになると数値演算コプロセッサに依存してくるので、そのあたりは自分で調べてください。
大昔、数値演算コプロセッサが付いてないCPU用に数値演算エミュレータみたいなのがあって、コ
ンパイル時にどっち使うか選択できたんだけど今はどうかわからん。
518473:04/04/04 14:16
>>514
ありがとうございました。解決することができました。
>>473
混乱させた罰として、どう考えてどう解決したのか報告することを要求する。
520473:04/04/04 16:35
いや
521473:04/04/04 20:58
お世話にはなりましたが、そこまでの要求には対応出来ません。
522473:04/04/04 21:56
愚民どもの腐った脳みそで、せいぜいがんばって考えるこったな。
ネットワークプログラミングの勉強してるんだけど
ここ↓のhttp-client.cをダウンロードして、VisualC++で動かすと・・・・
ttp://x68000.startshop.co.jp/~68user/net/c-http-1.html




  7: #include <sys/socket.h>
8: #include <netdb.h>
9: #include <netinet/in.h>
10: #include <sys/param.h>
11: #include <sys/uio.h>
12: #include <unistd.h>

これらが、開けないぞとエラーがでます。
これらをぐぐって拾ってしまえと思ったら、なかなか見つからず「これはC言語のインクルードファイルじゃなくて
本当にUNIX系OSだけのものなのか」と疑問を抱き、質問レス投稿した所存でございます。

こいつら、拾うもんなの?それともVisualC++では名前が違うだけで機能が同じようなインクルードファイルがあるの?
優しくてエロイ人、回答して。
>>523
それはUNIX向けソース。win環境ではwinsockを使ったソースに書き換えないと
ダメ。ネットワーク・プログラミングは機種依存が色々あるから、winでやりたい
ならwin向けのソースから勉強を始めるべき。基本は似ているので、どっちかを
ちゃんとやれば追々移行についても理解できるようになるかと思う。
524様は優しくてエロい人認定です。
526523:04/04/05 22:14
回答ありがとう!エロイ人
画像を読み込んで、それをマウスカーソルの位置に描画したいのですが、
なぜか残像(前回描画された画像)が残ってしまいます。
事前にバックバッファを白で塗りつぶしているので残らないはずだと思うのですが、
何か勘違いしているでしょうか。。。どなたか教えてください。よろしくお願いします。
以下ソースです。

GetCursorPos (&mpos);
ScreenToClient(hWnd,&mpos);

hdc=GetDC(hWnd);//表バッファ
hdcmem = CreateCompatibleDC(hdc);//裏バッファ
hBmp = (HBITMAP)LoadImage(hInst,"map.bmp",IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_LOADFROMFILE);

BitBlt(hdcmem,0,0,300,300,NULL,NULL,NULL,WHITENESS);
SelectObject(hdcmem, hBmp);
BitBlt(hdc,mpos.x,mpos.y,32,32,hdcmem,0,0,SRCCOPY);

DeleteObject(hBmp);
DeleteDC(hdcmem);
DeleteDC(hdc);
528デフォルトの名無しさん:04/04/06 05:57
画像を読み込んで、それをマウスカーソルの位置に描画したいのですが、
なぜか残像(前回描画された画像)が残ってしまいます。
事前にバックバッファを白で塗りつぶしているので残らないはずだと思うのですが、
何か勘違いしているでしょうか。。。どなたか教えてください。よろしくお願いします。
以下ソースです。

GetCursorPos (&mpos);
ScreenToClient(hWnd,&mpos);

hdc=GetDC(hWnd);//表バッファ
hdcmem = CreateCompatibleDC(hdc);//裏バッファ
hBmp = (HBITMAP)LoadImage(hInst,"map.bmp",IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_LOADFROMFILE);

BitBlt(hdcmem,0,0,300,300,NULL,NULL,NULL,WHITENESS);
SelectObject(hdcmem, hBmp);
BitBlt(hdc,mpos.x,mpos.y,32,32,hdcmem,0,0,SRCCOPY);

DeleteObject(hBmp);
DeleteDC(hdcmem);
DeleteDC(hdc);
529528:04/04/06 05:59
あれ、、、二重投稿すいません。
>>528
その状況とは直接関係ないと思うが、
最後のDeleteDCはReleaseDCでないか?
531デフォルトの名無しさん:04/04/06 11:57
VC++6にあったClassWizardの関数の追加はVC++7ではどこにあるんでしょう?
追加クラスはMFCクラスです。
>>531
リソース・ビューから該当コントロールのプロパティを出して
「イベントコントロール」や「メッセージ」のページを開いてみる
533デフォルトの名無しさん:04/04/06 21:42
VC++でM$AccessにADO(MDAC)で操作したいのですがどれもVBのサンプルばかりです
VC++ではデータベースあんまり使わないのですか?
サンプルリンクおながいします。
>>528
BitBlt(hdcmem,0,0,300,300,NULL,NULL,NULL,WHITENESS);
SelectObject(hdcmem, hBmp);
BitBlt(hdc,mpos.x,mpos.y,32,32,hdcmem,0,0,SRCCOPY);

この辺をもうちょっと考えた方がいいかも。
メモリDCに対して必要な大きさのビットマップをSelectObjectで選択しておいて
それを白で塗り潰して、そのメモリDCに対して別のメモリDCに展開したmap.bmpを
マウスカーソルの位置へBitBltして最終的にDCに全体をBitBltしてあげるみたいな。
>>533
VBと全く同じように使える。
ただし参照設定の代わりにimport文を使用する。
>>493のようにADOのDLLを指定する。
あとはMSDNのヘルプにのっている。
キーワード→ADO→Visual C++でのコードの例
536533:04/04/06 23:32
>>535
わかった!
ありがd
VisualC++6.0を使用しております。
リンク時にエラーが出るのですがエラー内容が表示されず困っております
main.obj : LNK2001:
Debug/Hoge.exe : LNK1120:

と表示されて、外部シンボルの未定義エラーだと思うのですが具体的に何が
エラーだかが表示してくれません。
設定で外部シンボル未定義エラーの非表示設定のようなものがあるのでしょうか。

知っております方がおりましたらお願いします。
538デフォルトの名無しさん:04/04/07 17:33
すいません高度な技だということから
社内で誰も修正に協力してくれないので 途方モードです。
もし簡単に実現するなら方法を教えてください。
MFCで作成したデカイEXEがあるのですが 起動すると
メモ帳のようなメイン画面が表示されます。
このEXEをてっとり早くDLL化しないといけなくなったのですが
安全にDLLに移行するのはどうすればいいでしょう?
DEFファイルとヘッダーファイルに外部宣言して
画面を呼び出す処理をEXPORT宣言にすればいいのでしょうか?
>>532
禿しく使いづらいんですが
機能も落ちてるし
どういうdllか分からないですが、MFCで安全に簡単にというのであれば、
ウィザードでMFCを使うdllのスケルトンを作って、そこにexeのコード
を一生懸命コピー。公開したい変数、関数、クラスを_declspec(dlllexport)
とか、AFX_EXT_CLASSを使ってエクスポートする。DEFファイルでもいいですが。
という手順だと思います。高度というよりは面倒ですね。exeとdllは
エントリーポイントが違うので基本的には作り直しが必要です。
「デカイ」って時点で簡単には行かないんじゃないか?
どういう方法取るにしろかなり手間がかかると思う。

「簡単に」っていう方法があるならオレも知りたい。
542デフォルトの名無しさん:04/04/07 22:26
引数に参照かポインタを指定するときの違いがわかりません。
どういった場合に参照とポインタを使い分けるのですか?
気分で
VC++StudioのMSDNを買ったらOSのXPとかも付いてくるの?
>>542
NULL等無効な値を取りたい場合はポインタ
それ以外は参照
って俺はしてる。
>>544
付いてくるが開発用途以外には使えないので
そのXPで2chとかには書き込めない。
2chブラウザの開発ということでひとつ
>>542
参照でことが足りるときは参照。
参照でもNULLなどの無効な値は表現できるので無問題。
>>548
class CTest{};
void func(CTest& test){}

int APIENTRY _tWinMain(/*略*/)
{
func(NULL); // error C2664:
return 0;
}

漏れなんか勘違いしてる?
>>549
キャストすれば?
>>546
俺は2chしながら自作ソフトが動作するかの長期テストをしている最中だよ。
俺も自作ソフトがシステムに及ぼす影響を
あらゆる視点から検証している最中だよ。
553デフォルトの名無しさん:04/04/08 11:20
おしえてください
VCの設定でMFCスタテイックライブラリ使用と
共有DLLでMFC使用
のふたつってどういう違いがあるんでしょうか?
前者だとデバッグモードでかなりサイズが大きいファイルができますが
後者だと小さいサイズのファイルができあがりますよね?
>>553
前者は使用しているMFCライブラリがexeに組み込まれている(単独で完結)。
後者はクライアントにMFCのDLLファイルが存在する事を前提にexeが出来る。
(DLLが無いと動かない)
ある時刻からの経過時間を、
WriteFileメソッドを用いて、ファイルに書き込みたいのですが、
よくわかりません。
time_t temp;
time(&temp);
temp = temp - start; //経過時間(startには、ある処理を開始した時刻を保持)
これで、経過時間を計測しています。
このtempをWriteFileで書き込むためにはどうすればよいでしょうか?
よろしくお願いします。
HANDLE hFile;
DWORD dwBuf;


WriteFile(hFile, &temp, sizeof(temp), &dwBuf, NULL);
>>556
ありがとう。できました。
558デフォルトの名無しさん:04/04/08 14:56
>>554
ありがとうございます。他環境で使う事を予測して
スタティックで設定しました。

あともう一つ教えてください。
TestApp:InitInstance()内で
m_pMainWnd = new TestWindow();
という具合でメニューウインドウのインスタンスを作ろうとしているんですが
デバッグ時(実行時にも)
ここのステップで応答が返ってこなくなります。

ヘッダには
class TestWindow : public CFrameWnd
{
public:
TestWindow();

};

のように定義しています
559558 :04/04/08 15:54
すいません聞き流してください
他の処理で永久ループしていただけでした
>>546
開発用途以外使えないの?
・・・ネタでしょ?
>>560
2.1 一般的なライセンスの許諾
お客様が個人の場合、お客様のみが
本ソフトウェアを使用することを条件として、
マイクロソフトは、お客様のソフトウェア製品の設計、
開発、テストおよびデモンストレーションを行う目的に限り、
本ソフトウェアの使用、および本ソフトウェアのコピーを
作成および使用する属人的かつ非独占的な権利をお客様 1 名のみに許諾します。
  <_葱看>
/ i レノノ))) \
 (人il.゚ ヮ゚ノ人   これからもミナツキ サヤ ◆SAYAC2HJWEを
   ヽ Yi/            宜しくお願いしますね〜。みるまら〜♪
   く_ :|〉
    し'ノ
>>560
何か困るのか?
564538:04/04/08 18:39
レスありがとうございます
>>540で教えていただいたように とりあえずDLLに移行して
コンパイルまでは通るようになりました。

デバッグをおこなうと

CmdShow = AfxGetApp()->m_nCmdShow;
という部分で本来EXEだった時に正常に取得できていた値【1】が
取得できず。0が返ってきます。これにより処理に不具合が出ているのですが
問題を解決する方法があれば助言ください。
思うところインスタンス取得時にEXEの場合とDLLの場合で
呼び出されるMFCソースが異なってきますよね?

DLL→ DLLMODUKE.CPP
EXE→WINMAIN.CPP
この違いによりなんらかの不具合がでてるように思うのですが
対処方法がわからないのです。。。
565538:04/04/08 18:41
○ DLL→ DLLMODULE.CPP
× DLL→ DLLMODUKE.CPP

すみません。。。
横槍スマソ。

DLLって何かと制約多かったですよねぇ。。。
1つの完結したアプリケーションをDLLにするメリットが
サッパリわからんですな。

漏れなら、2つ起動してプロセス間通信するよ。
ほとんど、それで事足りるんじゃね?
567538:04/04/08 19:04
TelNetでUNIXに接続するEXEなのですが
今までは接続ダイアログに手入力で情報を入力していたのですが
パラメタをもった関数としてコールするように作り替えないといけなくなったのです
セキュリティ上の問題からアカウントやユーザー名の漏洩防止に
もとから起動する側のメニューより該当サーバへ
定数でもたせた情報をもとにDLL内の関数間でやりとりを行う仕様になります
m_nCmdShowって初期状態でウィンドウをどう表示するかを指定する
パラメータですよね?それならそこに明示的にCmdShow=SW_SHOWNORMAL
とか書いておけばいいのではないでしょうか。MSDNではアプリケーションは
一度m_nCmdShowを呼び出さなくてはならないと書いてますが、dllなら
おそらくそこまですることは不要で、最初から直接指定出来るのでは
ないかと。かな?
569538:04/04/08 20:11
>>568 ありがとうございます!!無事通過しました

とおもいきや次の不具合が
EXEだった頃のビュー表示に関する処理で不具合が発生してしまいました
デバッグで見るとWINCORE.CPPの(AfxCallWndProc)に切り替わった直後
混合モードに切り替わり77E42267 Call で処理が停止してしまいます。
EXEの場合は混合モードに切り替わったあと正常にこの番地をクリアし
次の処理を継続しているようです。

混合モード上での追跡しかできないのでどこが悪いかわからず
途方にくれています。
よろしければ助言いただきたいと思います。
追跡の方法等でもうれしいです。
とりあえずwincore.cppを開いてAfxCallWndProcの中身を
見てみれば?try-catchがあるからそこに
ひっかかるんじゃないかな。メッセージ処理に関するものだね。

571538:04/04/08 21:00
>>570
ありがとうございます
確かにメッセージ系のような気がします
コールバック使っているのでこの辺りの画面の再描画でなんらかの
不具合になってるんでしょうかね
「ファイルを開くダイアログ」のコンボボックスとリストボックスと同じまたは同等のもの
を作りたいのですが、手順もしくは参考になるサイトなどを教えていただけないでしょ
うか?
>>538
今さらながらだけど、exeにCOMインタフェースを付けた方が早かったんだけどね。
574538:04/04/08 23:19
>>573
確かにそうおもいます。今となっては1.2Kくらいあるので
だれも触りたがりません。運わるく今回の開発でわたくしが
担当することに
作り替えるわけにいかず そのままソースのみ代用で
関数のコールにより接続後のビューまで表示しないといけないのです
どうやら コールバック宣言部分に間違いないようです
この部分ってどうしてもデバッグで動きみれないんでしょうかねえ
直前までのパラメタ値やウインドウハンドル取得問題なさそげなんですが
>>574
いやいや、作り替えるんじゃなくて、今あるソースに追加できるんだよ。
やり方はCodeProjectとかにあるけどね。
独習C++のP32のサンプルで質問があるのですが、

#include <iostream>
using namespace std;

int myabs( int n );

int main()
{
cout << "-10の絶対値:" << myabs(-10) << "\n\n";
return 0;
}

int myabs( int n )
{
  cout << "整数用のmyabs()\n";
  return n<0 ? -n : n;
}

どうして出力が
整数用のmyabs()
-10の絶対値:10
となるのでしょうか?↓のように、左側の引数から順番に処理すると思ってたのですが
-10の絶対値:整数用のmyabs()
10


教えてください、お願いします。
三つの引数のうち、関数がある引数を優先的に処理をするから
2番目、1番目、3番目の引数の順に処理をするということで良いのでしょうか?
579538:04/04/09 14:21
>>575
ありがとうございます。一度参考に見てみます。
駄目元でいろいろ解析していくうちに致命的な不具合個所があったようです
外部からコールされた関数に直接Window::Window()
をコールしていたためにどこかでインスタンスの作成がぬけており
コールバック関数から呼び戻しして画面の再描画時にエラーになってるみたいです

もともとEXEだった頃の起動時の一番最初の処理って
どの部分をコールすればいいんでしょうかね?
そこを呼べば正常に動くような気がします
580デフォルトの名無しさん:04/04/09 22:24
質問です。

モードレスのダイアログで開発をしています。
ダイアログの破棄をOnCloseでDestroyWindowで行っています。
これで行けると思ったんですが、Escキーを押した場合のみ、OnCloseイベントが発生しません。
その為、2回目にCreateした時に例外で死んでしまいます。
Escキーをフックして、そこでOnCloseを呼ぶようにしたらちゃんと動くようにはなりました。
これって、他の方法で回避できるんでしょうか?
モードレスの正しい実装がちょっとよくわかっていないもので。
OnDestroyで処理したら?
>>580
ESCキーはOnCancelあたりが来てるんじゃねーか?
OnDestroyはDestroyWindowのあと。
ESCキーはWM_COMMAND wp=ID_CANCELが受信できなかったっけ?
ここでOnCloseを呼ぶなり、WM_SYSCOMMAND wp=SC_CLOSEを発行するなり。
イラレみたいなドロー系のオペレーションをするプログラムを作りたいんですが、
そういう用途のクラスライブラリって存在しますか?
>>585
している。
少なくともその手のアプリを作っている会社の社内には。
587580:04/04/10 13:21
>>581-584
レスサンクスです。

色々調べたところ、OnOK、OnCancelをオーバーライドして、
その中でDestroyWindowを呼ぶのがスマートな方式らしいですね。
Escキーをわざわざフックしなくても、OnCancelが発生するので。
とりあえず解決しました。どーもです。

588デフォルトの名無しさん:04/04/10 19:43
CString型 strに"aaaaaa,ieiei,12345"という文字列が設定されています
これを","(カンマ)区切りで配列data[3]にそれぞれ
data[0] = "aaaaaaa"
data[1] = "ieiei"
data[2] = "12345"
となるようにしたいのですがどうすればいいでしょうか?
589デフォルトの名無しさん:04/04/10 20:21
data[3]はCStringの配列で良いのか?
カンマのある位置をFindしたらそこまでの
文字列をMidで抽出してdata[0]に代入
みたいな操作を行う
>>589
………
591588:04/04/10 20:37
ありがとうございました。
なんとか出来ました。
592588:04/04/10 20:39
>>589
ありがとうございました。

>>591
どちらさま?
未来から来たあなた
http://www.kumei.ne.jp/c_lang/intro/no_31.htm
今ここをやっていたのですが、このとおりに書くと正常に動くのに下のように
long data[5]の上に関数を書くと「構文エラー : ';' が 'type' の前に必要です。」というエラーが発生します。まわりのセミコロンも半角で書いてあるのになぜこのようなエラーが起こるのでしょうか?
初歩的な質問ですみません。

int main(void)
{
printf("");

  long data[5];
input_data(data);//データ入力関数
sort_data(data);//並べ替え関数
show_result(data);//結果表示関数
return 0;
}
Cの変数宣言は関数の先頭に書かないと駄目
C++なら途中でもオケー
ありがとうございました。
そのようにやってみます。
ISOなんとかいう新しい仕様ではCでも
途中OKになったとか聞いたが、
本当なの?
598デフォルトの名無しさん:04/04/11 05:25
はじめまして、私はC初心者です。
すみませんが教えてください。
C++5.5のコンパイラでC言語を打ちコンパイルすることは
できますでしょうか?
>>598
タダで使えるBorland C++ Part3
http://pc5.2ch.net/test/read.cgi/tech/1054390397/
>>598
な…なんか自信なくなってきちゃったけど出来るんじゃないかな。
うん。きっとできるような気がするよ…。

帰ったらパスタにしよう。うん。パスタ。
601デフォルトの名無しさん:04/04/11 10:26
VC++6.0 です。

1.ウイザードで新規作成からプロジェクト->Win32Application を選び
空のプロジェクトを作成。
2.そのプロジェクトにC++ソースファイル を、拡張子.cで追加
3.そのソースファイルに、
#include <stdio.h>

int main(){

printf("hello");
return 0;

}

と書いて、ビルドすると、

test.c
リンク中...
LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です
Debug/test.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー

上記のエラーが出ます。文法的にはさほど間違っていないと思うのですが、
どの辺が引っかかっているのでしょうか?
拡張子をcppに変えたらどう?
603デフォルトの名無しさん:04/04/11 10:49
602>>
ありがとうございます。試してみましたが、やはり下記のような
エラーが出てしまいました。

リンク中...
LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です
Debug/test.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー

test.exe - エラー 2、警告 1
ウィンドウズアプリケーションはWinMain()が必要だにょ。
int main()ならコンソールアプリにしる。
>>604
Σ( ̄ロ ̄|||)!! ありがとうございます。
ビルドできるようになりました。
質問ですが、よろしくお願いします。
 下記のように、適当なファイルをバイナリ指定でオープンしてデータ書き出しをしているのですが、
メモ帳でのぞいてみると、文字がそのまま表示されてしまい、バイナリになっていません。
 書式のどこかに勘違いがあるのだと思いますが、どうしても確認できなくて困っております。
 開発環境はVB.NET2003でMFCアプリケーションで作成しています。
 何か気がつく点がありましたら教えてください。

//変数宣言
CStdioFile fout;
CString csNewData;

//ファイルオープン
if(!fout.Open(DEF_FILE_NAME,CFile::modeCreate | CFile::modeWrite | CFile::typeBinary)){
return;
}

//データ書き出し
csNewData = "TestData";
fout.Write(csNewData,csNewData.GetLength());

//ファイルクローズ
fout.Close();


 ちなみに、fopenでwbオプションでファイルを開いてfwriteでデータを書き出しても
バイナリ出力にならず、アスキーでした。orz
>>606
VB.NETでMFCアプリケーションとは謎だな。

それはさておき、どちらのモードでもアスキー文字を書き込んだらアスキー文字なのは当たり前。
バイナリモードとテキストモードの違いが理解できていないようだね。
>>606
「メモ帳」でなくバイナリ・エディタで開いたら?

つーかこのレベルでプログラムが書けるっていうのが不思議なんだが
>>607
もう一度、お復習いしてきます。
言葉意味も間違っているかもしれないです。

>>608
三日前に始めたばかりなので、書けるなどとても言えませんが。
バイナリエディタとやらを探してきます。
610デフォルトの名無しさん:04/04/11 17:16
CString⇒int二変換する方法おしえてください
atoi
>>610
a_to_系
str_to_系

atoi
strtol
613デフォルトの名無しさん:04/04/12 10:33
エミュレーションツールを作成してるのですが
画面の再描画と文字列の送受信をOnIdleで行いたいのですが
ブレークかけてもこのイベントが全く発生していません。
メッセージキューが空いている時に呼び出されるとの事ですが
そもそも
どの状態がメッセージキューが空いているといえるのかも理解していません
この初心者にどうかおたすけを
発見された方 マルチをお許しください。
MFCのDLLを作成しているのですが
OnIdleイベントが発生しないんです。このメンバ関数って
もしかしてEXE(アプリケーション)のみ有効なメッセージ制御なのでしょうか?
DLLの場合 これに変わる処理ってどれにあたるかご存知ありませんか?
要はInitInstanceで構築したビューにメッセージキューがない場合
(ユーザーが何も命令を送らない間)
常に発生させたいです
VisualC++ 6.0を使いはじめたんだけど
ビルドするとかなりの確率で戻ってこなくなります。
ビルドの中止を選んでも反応なしで結局タスクマネージャで
MSDEV.EXEをいったん殺してから再起動すると一応ビルドは
できてる。

何ですかこれは(つД`)
おんなじ様な人いない?

OS:WindowsXP メモリ:512MB CPU:Celeron2GHz
>>615
サービスパックは?
>>616
入れてなかったので今から入れてみます。
618デフォルトの名無しさん:04/04/13 16:52
リソースに追加したtxtからデータを読むにはどうすればいいですか?
テキストファイルを読むロジックを組め
ウィンドウがアクティブか否かを確かめるにはどうしたらいいでしょうか。
>>620
GetFocus() → 調べたい窓と比較。
>>621
できました、ありがとうございます!
623デフォルトの名無しさん:04/04/14 00:55
大変です。質問です。VC6です
ある瞬間を境に、何度プログラムの実行をしても、
LINK : fatal error LNK1168: 書き込みモードで Debug/****.exe を開けません
と出るようになりました

ググってみたところ、まだ****.exeが実行中なんじゃないかなとのことですが、
既にもう2回も再起動しました。直りません
Debugフォルダの****.exeをリネームしてみたらどう?とも書いてありませんが、
やってみたところ、ムダでした。また****.exeを作って、同じように書き込みモードで開けませんと出ます
これは一体、いかがなものでしょうか
実行モジュールが読み込み専用になっているとか、
プロジェクトの設定で実行モジュール名を既存のファイルと同じにしてしまったとか、
じぶんのやったことをよく見詰め直すんだね。
625623:04/04/14 01:26
ありがとうございます
しかし、見詰め直したところで、別段心当たりはありません。これはたぶん自分の知識不足が原因でしょうけど
あえて言うとすれば、for文の無限ループにひっかかって、****.exeを強制終了した後、そのままパソを再起動したくらいです
なんだかものすごい関係ありそうではありますが、再起動後に1回は普通に実行できてたと思います・・・たぶん
ちなみに再起動前は何十回も実行してました。これは確かです

新たなプロジェクトを作って、ソースファイルだけコピペと言う形を取ってみましたが、また同じfatal errorが出ました
ああ、今ものすごい中途半端位置でプログラムが止まってます
すみません、質問です。
コールバック関数からグローバル変数呼ぶと
グローバル変数が0になるようで、
「なんちゃらが0x00000000を参照しますた。"read"出来るかヴォケ」
と怒られてしまいます。

具体的には
LPDIRECTDRAW7 lpDDraw7;
をグローバル変数として、
WM_PAINTがきたら描画用関数を呼び、
その描画用関数内でlpDDraw7->CreateSurface()
とやりたいのですが、lpDDraw7が0なんでエラー、ということになります。

ループ直前までは、グローバル変数は意図した数値を保持しているようなのですが
(if文で「0ならダイアログ吐かせる」としたもののなんともなし)。

コールバック関数内でグローバル変数を使うにはどうすりゃいいんでしょう。
誠に申し訳ありませんが、何卒ご教授願いたく申し上げます。

構成はXP SP1、VC++6、DirectX9、Celeron1.2A、
Radeon9000、512Mメインメモリ、となっております。

627626:04/04/14 02:49
追記としては、

LPDIRECTDRAW7 lpDDraw7;

は、予め初期化用の関数に通しており、
GetMessage()直前までは数値が入ってます。

上の書き方だと「初期化忘れてるんじゃねえか」と
勘違いされかねない書き方だったので、一応。
脳内説明は(ry
ぬるぽ
>>626
きっと君があれこれ説明するよりソースを提示した方が早いよ。

>>625
ちょっと待て、毎回再起動後は一回は起動できるのか?
それなら、ターゲットプロセスをタスクマネージャで終了しろ。
631623:04/04/14 07:33
>>630
すいません、書き方が悪かったです
for文に引っかかっての再起動前後には問題なく実行できてました(このあたりの記憶があやふやなのですが)
その件のちょっと後、突然起動しなくなったので、何か他に原因があるのかなと勝手に推測したというわけです

今は無駄な実行すればするだけタスクマネージャのプロセスのところに溜まっていきます
なんかよくわからんけど、とりあえず全部消してから実行を押しても駄目でした
632623:04/04/14 07:34
ちょっと遠まわしの言い方しかしていませんが、
質問にずばり答えると、今は何度再起動しても一度も起動できません
>>632
とりあえずDebugフォルダとReleaseフォルダを削除。
削除できないようなら、safeモードで消すか、
ttp://homepage3.nifty.com/t-sugiyama/
ココのRebootFileDeleterとかで消す。
消えたらビルドできるんじゃね?しらんけど。
634damepg:04/04/14 16:53
C++.netについての質問です。
クラスライブラリを使用使用とヘッダファイルに以下の文とコンパイルスイッチを切り替えて
#pragma once
#using <mscorlib.dll>
using namespace System;
using namespace System::IO;

c:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\Include\ServProv.h(99): error C2371: 'IServiceProvider' :
再定義されています。異なる基本型です。
c:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\Include\ServProv.h(92): error C2872: 'IServiceProvider' :
あいまいなシンボルです。

と出てビルドできません。
これはライブラリ内で起きている矛盾だと思うのですが、何故このようなエラーが出てくるのかさっぱりわかりません

もちろん'IServiceProvider' という定義を自分のソース上で定義していません。
どうすればこのエラーを回避できるでしょうか?

#using <mscorlib.dll>  だけではエラーは出ないのでコンパイルスイッチではないと思います。
DirectXのライブラリを使っていますが、全部のソースをみましたが問題の語句はありませんでした。
orz... なんでこんなエラー出すんだよMS.... しかもエラー出してるインターフェイス使わないのに(鬱

このへんの問題を詳しく扱ってるサイトなどがありましたらご紹介ください。
よろしくお願いします。
635damepg:04/04/14 17:33
自己解決できました。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmxspec/html/vcmg_AmbiguousReferences.asp

高度な理由があるにしても、こういう事はもっとわかりやすいところに書いておいて欲しいorz......
636623:04/04/14 20:09
>>633
削除は、プロセスを無理やり終了させたらできました
ただ、解決はしませんでした。何度実行しても、エラーチェックの後起動しません
ひょっとしたらVCがどうとかより、もっと何か根本的なところで異変が生じているのでしょうか


  VC++はうんこ
デバッグの時、Cソースだけ1行づつトレースするには
どうしたらいいですか?
>>631
> 今は無駄な実行すればするだけタスクマネージャのプロセスのところに溜まっていきます

何が溜まってるんだ ?

あと、ウィルスチェックは大丈夫か ?


VC++はひよこ
っじゃ、お約束で VC++ はぬるぽ。
642623:04/04/14 23:08
>>639
なんだか本当に、何度も心配かけてすいません、ありがとうございます

溜まっている、という表現は良くなかったのかもしれませんが、どうもそれしか思い当たらなくて
実行の「!」などや、debugフォルダなどにビルドされたexeファイルを押せば押すだけ、
DXtest01.exe(今まで****.exeと書いてました)が増えて、プロセスに溜まっていくんです

http://venus.aez.jp/uploda/dat/upload6251.jpg こんな感じ。窓2000です

ウィルスの面はないとは思います・・・根拠は、どうも自分に責任があるような気がするから
でも一応調べては見ます
>>642
WM_QUITがきたときにメッセージループを抜けていないのでは?
釣りか...。
お前の作ったプログラムが終了してないだけじゃねーかと...。
プログラムを終了したつもりになってて、本当はウィンドウが無くなっただけじゃないのか。
メッセージループは回りつづけてるっていうオチ。
646デフォルトの名無しさん:04/04/14 23:43
すいません どこで聞いても出てこないんですが
keybd_eventで $や_を表示するにはどうしたらいいですか?
647623:04/04/14 23:43
ああ、なんか釣りと聞いて安心しました。それほど初歩的で簡単なミスだったんですね。ウィルスじゃなくてよかった・・・
でも、http://www.symantec.com/region/jp/index.html ここでチェックしたら、今だけで97の感染ファイルが見つかってます
一体ギコナビのN速のログファイルに何があったのか・・・と、ここまで質問する気はありません

今更新しい情報ですが、ビルド関係で問題が出はしますが、コンパイルするだけならエラーは0です
そして今試してみたんですが、典型的なハローワールドプログラムでは、
  LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です
  Debug/DXtest01.exe : fatal error LNK1120: 外部参照 1 が未解決です。
このようにでました
このエラープログラムなら今までに何度か目にして、その度に既に開かれてたexeファイルを閉じていたのですが、
やっぱり今回はそれが見つからないんです
そのメッセージループとやらは、何度も再起動した今でも、いまだに回りつづけているのでしょうか
どうやったら強制的にでも彼を止めることができるのでしょうか
もう論点がごちゃごちゃ・・・
PostQuitMessage()すりゃいいんじゃないの?
650623:04/04/14 23:55
>>648
返す言葉も言い訳しようもありません

>>649
すいません、詳しく教えてください
>>646
$や_を入力する時にキーをどう打つか観察しろ。
統計学的に、1400人分も調査すれば十分信頼の置ける結果が出ると思われる。
652643:04/04/14 23:59
>>644-645ケコーン

>>647
> 今更新しい情報ですが、ビルド関係で問題が出はしますが、コンパイルするだけならエラーは0です
> そして今試してみたんですが、典型的なハローワールドプログラムでは、
>   LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です
>   Debug/DXtest01.exe : fatal error LNK1120: 外部参照 1 が未解決です。
> このようにでました

プロジェクトの設定がWin32 Console Applicationになってないのでは?
多分あなたが記述したエントリはWinMainでなくてmainでしょ?

> そのメッセージループとやらは、何度も再起動した今でも、いまだに回りつづけているのでしょうか
> どうやったら強制的にでも彼を止めることができるのでしょうか

こんなことも分からん香具師がDirectXですか?
ネットや書籍でウィンドウアプリケーションの基礎知識を身につけることをお勧めします。

で、結論...>>647さん、もちろん全部ネタですよね?
653デフォルトの名無しさん:04/04/14 23:59
教えてください。
混合モードでのデバッグをしたいのですが、ニモニック
はみなさんどうやって勉強するのでつか?
654646:04/04/15 00:02
>>651
キーを観察することによりVKシリーズ(ヴァーチャルキー)仮想キーコードが
存在する場合はなんとかなりそうなものですが
アンスコみたいにシフト押しながらのバックスラッシュキーとかって0x5fを捜すと 該当がVK_RWIN
になってたりするです。
WIN XPでVC++6.0Standard Editionをやっています。
WIN32コンソロルアプリで画像を取り込もうとして
インクルードディレクトとライブラリディレクトは取り込めたのですが
a.obj : error LNK2001: 外部シンボル "_DllBmpDeleteImage" は未解決です
                ・
                ・ 
a.obj : error LNK2001: 外部シンボル "_DllBmpReadImage" は未解決です
Debug/a.exe : fatal error LNK1120: 外部参照 12 が未解決です。
link.exe の実行エラー
と同じような物がいっぱい出てきましたがどうやって
リンクさせればよいのでしょうか?
>>651
それってトリビアになると思うんです。
657623:04/04/15 00:17
>>652
基礎知識がFatalに不足していると言う点については真摯に受け止めます。その通りです
こんなこともわからん香具師でもゲームを作れるいいライブラリがネット上に溢れているんです
でも、最初から最後まで、ネタではありません・・・いちいちこんなことを言う必要はないとは思いますが

マジレスしてくれた方、ありがとうございました。ご迷惑をおかけしました
"初心者"ですいませんでした
658646:04/04/15 00:17
>>655
外部参照やエクスポートができてないエラーっぽいですね
ヘッダファイルが全て読めていないかinclude漏れがあるか
ヘッダに外部宣言されていない可能性があります。
元々あった外部宣言を削った場合はビルド時のObjファイル等に
ゴミ情報が残っていたりする為、一度キレイに削除後
リビルドを行えばうまくいく事があります。
DLLであればDefファイルも確認してみてはいかがでしょ?
うんこVC++盛況だな
>>657
いやいや、作れてないから。


WM_LBUTTONDOWN:
  PostQuitMessage( 0 );

っていうのをウィンドウプロシージャにつけてみ?
マウス左ボタンを押したらプログラム終了するべ?
今度はタスクが残ったりしないことない?
>>658
ありがとうございました!
丸一日の苦労が報われました。
662デフォルトの名無しさん:04/04/15 11:23
ちょと教えてください。(上げちゃいました)

VCでDMAの制御を行いたい場合、メモリの確保と確保したメモリの物理アドレスを
知る方法が解りません。そもそも、ユーザーモードで動いていると出来ないのでしょうか?

普通に、new(***) ; で得たアドレスは、仮想アドレスですよね。

663デフォルトの名無しさん:04/04/15 13:57
教えてください。
MFCでビューを持っているDLLを作成しておりまして。
VBからDeclere宣言でこのDLLの関数をコールすると
InitInstanceでビューの初期化が行われウインドウに起動されます。
DLLのコールにはVBの画面よりコマンドボタンをクリックし
実行しています。
そこで問題なのですが、一連の処理が終わりビュー画面を閉じた時
VBの画面に戻るのですが、ここで再度同じボタンによりビュー表示処理
をおこなうにも ボタンを押しても反応がありません。
一度作成されたインスタンスが生きているので再呼び出しができないのだと
思うのですが最初の処理が終わった段階でDLL側にもっているインスタンス
等をDLL側でNothingかけるような方法はないでしょうか?
VBからCall する直前の状態にしたいのです。
要は何回ボタンを押しても動くようにしたいです
mS 単位のウェイトは Sleep関数でなんとかなるのですが、
uS 単位のウェイトがどうしても必要になり、探しています。
2日ほど路頭に迷ってます。教えてくだされ〜!
無理
Sleep は、指定した時間しっかりと待ってくれる保証はないでつ。
遅刻することもありまつ。
667デフォルトの名無しさん:04/04/15 19:47
以下の処理をしたいのですが。

wiile(1){
(メイン処理)
(windowsに一時的に返してフリーズもどきを解消したい)
}

(windowsに一時的に返すには、どう書けばいいのでしょうか?
・アイドル処理
・マルチスレッド
のどっちかかな。
669667:04/04/15 20:53
VBでGUI、
VC++でDLLを作ってるのですが、
DLL内の関数がメインになっています。
アイドル処理がよさそうですか?
簡単な方でいいのですが。ネットで調べても文法の書き方が載ってませんでした。
>>669
そこでココ最近10レスくらいで話題のSleep()ですよ。
そう、これからはSleep()が主流だよネ!
Sleep()は韓国でも大流行しているんだゼ!
アイドル処理ってエロいな
673623:04/04/15 23:09
詳しい原因はわかりませんが、全く思いも寄らなかった方向から解決しつつあります
画像をメモリに読み込む関数と、その画像を画面に反映させる関数を削ると、何事もなく起動できました
ブロック崩しのブロックの部分を描くためにその関数を使っていたのですが、とりあえず今は簡単な四角形を描く関数で代用して続きを作っていきたいと思います
何回かのテストプレイではうまいこと言っていたのに、なぜ突然使えなくなったのかがわからない点ですが、
そのことについては恐らくこのスレで聞くようなことではないと思うので、とりあえず報告だけしておきます
>画像をメモリに読み込む関数と、その画像を画面に反映させる関数を削ると、何事もなく起動できました
じゃあ、その関数じゃん
2chビューアーのつくりかた教えて。
じゃあ、漏れはテトリスの作り方教えてください。
>>676
while(1)
{
 ブロック落とす();
 if( ブロック着地した? == 着地した )
 {
  if( ライン消える? == 消える )
  {
   ライン消す();
  }
  if( 上まで詰まった? == 詰まった )
  {
   ゲームオーバー();
   break;
  }

  次のブロック作成();
 }
}
いきなり「ブロック落とす」はできないだろ(w
くだらんネタに乗っかるのやめようや
>>677
ブロックが左右に動かないんですが?
>>680
ブロック落とす();に含まれんじゃねーんの?
横からスマソ
>>667
禁じ手だけど、時々PeekMessage(,,,PM_NOREMOVE)を呼び出すとフリーズしない。
MSDNを検索してもわからなかったので...
yyy.cpp
c:\xxx\yyy.cpp(0) : fatal error C1001: 内部コンパイラ エラー
(コンパイラ ファイル 'msc1.cpp', 行 2701)
Visual C++
ヘルプ メニューで、サポート情報コマンドを選択してください。またはサポート情報 ヘルプ ファイルを参照してください。

zzz.cpp
c:\xxx\zzz.cpp(0) : fatal error C1001: 内部コンパイラ エラー
(コンパイラ ファイル 'msc1.cpp', 行 2701)
Visual C++
ヘルプ メニューで、サポート情報コマンドを選択してください。またはサポート情報 ヘルプ ファイルを参照してください。

DEBUGでビルドするとこんなエラーがでるようになってしまいました。
Releaseではおこりません。
http://www.groupsrv.com/dotnet/viewtopic.php?p=84633
こんなページとかも見つけたんだけど英語は苦手なのでいまいち原因がわかりません。
MFCAppwizardで作ったんですが途中からMFCもATLもオプションから外していました。
いつもReleaseBuildでいつもビルドしていたのでなにが原因なのかわかりません。
コンパイラの問題なんでしょうか?
>>683
マルチしてるあなた自身が問題です。
685初心者:04/04/16 15:46
激しく初心者です。おながいします。
MFCのEXEを作成しているのですが、起動しても画面はあがってこない作りです。
そしてある条件を満たした時ビューが表示され、その後自動的にビューが閉じます。
そして更に またある条件を満たした時、再度ビュー表示されないといけないのに
表示されたと思った次の瞬間、すぐに画面が閉じてしまいます。
原因を探っていくとOnPaint(WM_PAINT?)というクラスのメッセージが
exe 起動時に一度しか動かない為にこのOnPaintの内部に書いている初期化処理の
コードが実行されていないようなのです。
EXEを終了して再度起動すると同じく1度だけビューが表示されるのですが
問題点として EXEを終了せずにOnPaintを再度呼び出せるような初期化は
ないでしょうか?
>>685
>激しく初心者です。おながいします。
自分から初心者を名乗らない方がいい。

CWnd::UpdateWindowで、WM_PAINTを発行すれば良いんじゃないか?
687デフォルトの名無しさん:04/04/16 17:13
>>686
指摘とご指導ありがとうございます。
UpdateWindowはどのタイミングで発行すればよろしいのでしょうか?
引き続きよろしくお願いします
>>687
>EXEを終了せずにOnPaintを再度呼び出せるような
のタイミング。

↓引続きよろしくお願いします。
689685 :04/04/16 17:59
教えて頂いた関数を追加しOnPaintを呼び出しできたのですが 他にも
同じように起動時の初回処理しか動いていない部分があり 壷にはまり込んでしまい
ました。引き続き助けていただきたいと思います。
不具合個所を整理してみます。

問題の部分は
BEGIN_MESSAGE_MAPの内部に定義している下記の部分です
//{{AFX_MSG_MAP(CTestView)
ON_WM_CHAR()
ON_WM_CLOSE()
ON_WM_DESTROY()
ON_WM_PAINT()
ON_MESSAGE(WM_USER_COMMOPEN,OnCommOpen)
ON_WM_ACTIVATE()
ON_WM_TIMER()
//}}AFX_MSG_MAP

メッセージマップ自体は2回目の処理でも通過してそうなのですが
この中でON_MESSAGE(WM_USER_COMMOPEN,OnCommOpen)で重要な
初期化をおこなっており、ブレークを設定しても その関数内で
とまってくれません。 つまりは その関数をスルーしてるっぽいのです。
おそらく秘密はON_MESSAGEのあたりに隠されているような気がするのですが
なんともヘルプを見ても謎がわかりません。一度しか通ってくれない部分を
スムーズに2度目も通るようにならないでしょうか?
初期化処理をあっちこっちに書いてるの?
691685:04/04/16 19:41
>>690
はい
バッファの初期化
キーボードの初期化ソケットの初期化
テレネットの初期化等 いっぱいあります
これってドツボにどっぷり浸かっていますか?
そのスルーされた初期化処理はどこに置いてる?
設計が根本的に間違ってる悪寒。
694685:04/04/16 20:02
>>692
@APPメインのCPPファイル
Aビューに関する処理のCPPファイル
B詳細処理を行うCファイル

の三つに分かれていまして 問題の部分のコードと
メッセージマップのコードはAにおります
呼び出し元は?
696685:04/04/16 20:54


>>695呼び出し元はここのメッセージのみでございます。
ON_MESSAGE(WM_USER_COMMOPEN,OnCommOpen)

さらにその手前で不具合個所を発見しました。
先に述べたOnPaintの部分で画面が描画されるのですが
描画された後にやはり 閉じちゃってるみたいです。
これによりOnCommOpenの処理に移らなくなっている可能性があります
一番最初の処理起動時にペイント関連の処理が走り
そのあとうまく初期化できていないからなのでしょうか
だいぶ奥がふかまってまいりました とほほ
697685:04/04/16 21:01
2回目の画面起動時に描画処理のループ下記の場所で画面が閉じてしまいます
WINCORE.CPP

CWnd::OnWndMsg{//長い処理なので今回処理をとおる分のみ抽出
case AfxSig_vbWW:
(this->*mmf.pfn_vbWW)(m_hWnd == (HWND)lParam,
CWnd::FromHandle((HWND)lParam),
CWnd::FromHandle((HWND)wParam));
break;
}

void CTestCmdUI::Enable(BOOL bOn)
{
m_bEnabled = bOn;
m_bEnableChanged = TRUE;
}

LRESULT CALLBACK
AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
// special message which identifies the window as using AfxWndProc
if (nMsg == WM_QUERYAFXWNDPROC)
return 1;

// all other messages route through message map
CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);
ASSERT(pWnd != NULL);
ASSERT(pWnd->m_hWnd == hWnd);
return AfxCallWndProc(pWnd, hWnd, nMsg, wParam, lParam);
//2回目の処理においてここで画面が急に閉じてしまう
}
仮に今を乗り切ったとしても、次から次へと問題がおきそうな気がする。
699デフォルトの名無しさん:04/04/16 22:36
今までHP-UNIXでCによるミドルウェアを作成していたのですが、
仕事でPC向けアプリ開発が増えそうなのでVC++(VS6.0J購入予定)を
今のうちに覚えたいと思います。
C言語は理解している前提で、VC++を覚えるのに(C++言語だけでなく
MFCや操作そのもの含め)お勧めの市販本やWEBサイトがありましたら
レスお願いします。
701685:04/04/16 23:30
>>698
げげ まじですかー
>>699
>HP-UNIX
HP-UXのことか?
703デフォルトの名無しさん:04/04/17 01:43
Visual C++.NETを窓98にインスコして、win32アプリを作成することは可能でしょうか?
C++.NETの動作対象には98が書かれてませんけど、win32止まりなら大丈夫ですよね…?
VSのソリューションを丸々別のPCに持っていきたいんだけど、何か手はありますかね?
>>703
保証されてないし、そもそもまともに動かないと思われ。
メモリ積んでWin2kにしとき。
>>703
NTや2000やXPはWin32じゃ無いとでも言うのかね。

>>704
何に困ってるんだ?
フォルダまるごと持って行って問題出た?
>>706
> NTや2000やXPはWin32じゃ無いとでも言うのかね。

     ,.-‐ """''''''- 、
   /          \
  /  ノりノレりノレノ\  i
  i  ノcニつ ⊂ニュ ミ |
 ノ  |  <@  ミ @ヽ. | |    
 イ   |    (o_o.    | | 
 ノ   !   ノ u 丶.  ! ヽ
 彡  !    (つ     !  ミ モグモグ・・
 ノ   人   "    人  ヽ  


.NETかWin32かってことを言ってんじゃないの?
708大学生:04/04/17 23:43
C++の課題なんですが教えて下さい。
途中までやってみたのですが、どうも
出来ないのでアドバイス下さい。
問題は、キーボード入力した文字列を
逆から表示させるプログラムを作る、です。
#include <stdio.h>

main()
{
 int i=0,l=0,s;
 char a[20],b[20];
 printf("文字列を入力して下さい:\n");
 gets(a);
 while(a[i] != '\0')
{
 s=i++;
}

 for(l=0;l<=s,l++,i;i>=1,i--)
{
  b[l]=a[i-1];
}
b[i]='\0';

printf("%sは逆から%s",&a,b);
}
宿題は専用のスレがあるのでそちらへ。
forがめちゃくちゃ
cin >> str;
str.reverse();
cout << str << endl;

// (・∀・)デキタ!
712デフォルトの名無しさん :04/04/18 09:52
MFCを使わず、ダイアログベースでもなくて、
普通のクライアントウィンドウにAPIで直接CreateWindowで
エディットコントロールとかスタティックコントロールを貼り付けた場合、
これらの背景色や文字色を変更する事ってできますか?
713デフォルトの名無しさん:04/04/18 10:07
>>712
WM_CTLCOLOREDIT
WM_CTLCOLORSTATIC
その他にもWM_CTLCOLOR○○○シリーズがいくつかあるよ。
>>703
Cマガ2004/2号に書いてあったが、

「.NET」のついた開発製品では、.NET Framework用の開発「も」できるのであって
従来と同じ開発も可能

とあった。
Win2K で .NET インスコして、98でも動作可能な開発をすれば良いんじゃないかと…
でもなんか、.NET って会社で触ったんだが使いにくかった。(w

ま、俺みたいな貧乏人はまだ当分の間、Win98SE+VC6 抜けだせんが。ヽ(TーT)/
715580:04/04/18 11:39
VC6.0で開発をしています。
ラジオボタンにアイコンを描画したいんですが、ボタンが大きいせいか、アイコンが縮小されてしまいます。
アイコンをボタンの大きさに合わせて拡大表示する方法ってあるのでしょうか?

アイコンをビットマップにしてやればうまくいきましたが、アイコンの背景が透明から白になってしまいます。
これだと、ボタンの色と同じ色にしないと透明を実現できません。
ボタンの色とかって環境によって違いそうで固定のいろにしてしまうとまずいような気がします。
ビットマップで透明にすることってできるんでしょうか?
716715:04/04/18 11:40
>>715
まちがって580を名乗っちゃいました。間違いです。すみません。
>>715
アイコンというやつは固定サイズのものなので、アイコン・ボタンにするなら
ボタンをアイコンのサイズに合わせる。

任意のサイズの画像を貼りたいならビットマップにする。ビットマップはシステム
カラーを取得して背景色の設定した上で使う。
718デフォルトの名無しさん:04/04/18 17:55
すんげー初心者です、質問です。
今、OleLoadPictureというものを使って
jpegファイルを表示する関数を作っているのですが、

(前半は省略)
short type;
HBITMAP hbmp;
OLE_HANDLE hOle = NULL;  //←NULLで初期化しないとだめ
HDC ole_dc;  //作業用のDC

//転送
p_IPicture->get_Type(&type);
if (type == PICTYPE_BITMAP){ p_IPicture->get_Handle(&hOle); }
else{ MessageBox(hwnd, "絵をロードしてください!!", "Load_JPG", MB_OK); }

hbmp = (HBITMAP)hOle;  //BITMAPのハンドルに
ole_dc = CreateCompatibleDC(hDC.hFdc);  //DC作成
SelectObject(ole_dc, hbmp);  //読んだ画像と結びつける

勉強しているサイトでは、このあとBitBltして、
お片づけでは、

DeleteDC(ole_dc);
p_IStream->Release();  //開放(この書式でないとだめ)
p_IPicture->Release();  //開放(メモリ領域も一緒に開放)
GlobalUnlock(h_buffer);  //ロック解除
CloseHandle(hFile);  //ファイルを閉じる

という風にだけ書かれていたんですが、
hbmpはDeleteObjectしなくていいんですか?

ささいな疑問にこんな長文ですみません。
719デフォルトの名無しさん:04/04/18 22:24
Windows2000 VisualC++6.0です。
システムフックによって、IEで開いたURLを取得することって
できるんでしょうか?
720ネオ ◆adR3J7XHkg :04/04/18 23:01
>>719
VC++ならば全てが可能だ
721デフォルトの名無しさん:04/04/18 23:10
初心者です。
Visual C++.net を windows2000で使っています。

SDIでツールを作りました。
が、windows98上で動かそうと思い、そのExeファイルと、
Mfc70.dll、Msvcr70.dllをコピーして来て起動したのですが、
暫く使っていると、クライアント領域とタイトルのところが
真っ白になって固まってしまいます。

ウィンドウのサイズを変えていると、この現象が再現し易いです。
OnDraw関数で、やってはいけないこととかあるんでしょうか。

よろしくお願いいたします。
722719:04/04/18 23:16
>>720
ヒントいただけませんか。どのフックの種類を使うんでしょう?
ウィンドウがアクティブになったときのは WH_CBT で拾えてるんですが・・・
すいません。
VC歴2ヶ月の初心者です。
質問、失礼します。

今、MFCでMDIタイプのソフトを作成中です。
子ウィンドウのViewを、"全て"再描画したいのですが、どの様にするのが良いのでしょうか?

pclMainFrm= (CMainFrame *)theApp.m_pMainWnd;
pclChildFrm= (CChildFrame *)pclMainFrm->GetActiveFrame();
while(1){
if(pclChildFrm== 0x00000000){break;}
pclView= (CViewTest *)pclChildFrm->GetActiveView();
pclView->RedrawWindow();
pclChildFrm= (CChildFrame *)pclChildFrm->GetNextWindow();
}

今のコードは、上記の様になっています。
現在は、再描画される子ウィンドウと、再描画されない子ウィンドウが混在してしまう状態です。
ご存知の方、よろしくお願いします。

Windows2000 VC++6.0 MFC
>>721
リソースメータ見とけば?
GDIリソースがリークしてるとかじゃねーの?
>>721
そもそも、MFCってdllコピっただけで起動可能でしたっけ?
>>725
可能。
単なるDLLはOCXなんかとは違う。
>>725
スタティックリンクすれば、dllのコピーさえ必要ない。
VSの.netフォームアプリで、ちょっと教えてくだされ。
mutexを使って同じフォームアプリの二重起動は出来ない様にはできた。
さらに二重起動された場合、最初に起動されたフォームアプリををアクティブにしたくて、
win32のFindWindow等を使おうと、dllimportしようとしたんだけどコンパイルできない。
ヘルプにあるようなコードを書いても駄目。どうコード書いたらいいの?
729728:04/04/19 06:52
あ、出来た。自己完結スマソ
730721:04/04/19 07:21
>>724
あ、それでした。GDIリソースが無くなってってた。
どうもありがとうございます皆様。


・・・しかしどうすれば・・・。
>>730
解放し忘れているリソースがないか、一つ一つチェックしる。
template< typename X > class Matrix{
public:
Matrix<X>();
friend Matrix<X> operator*<X>( Matrix<X> const &, Matrix<X> const &);
};

gccではなんの問題もなくコンパイルできたのですがVS7.1だと
operator*<X>が気に入らないみたいです。どうやったらコンパイルできるんでしょう?
733デフォルトの名無しさん:04/04/19 13:51
enterキー押してもその後の文が下の段にいってくれません。
どうしてですか?
仕様です。Ctrl+Enterでどうぞ。
735デフォルトの名無しさん:04/04/19 13:58
なんでできる時とできない時があるんでしょうか???
エディットコントロールがEnterを拾う前にダイアログや標準ボタンがEnterを拾うから。
正確な所はわかんないけど、んな感じ。
737デフォルトの名無しさん:04/04/19 15:32
VC6を使っています。
ソースファイルをプロジェクトからはずす方法を教えてください。
ファイルがいらなくなった、名前を変えたいときなどに
ファイルを消すのですが、そうすると「ソース ファイルがオープンできません。」
となり、ビルドが出来なくなってしまいます。
>>737
「ワークスペース」ウィンドウは表示されているか?
(ふつーは) 左側にある、ツリー表示の…そう、それ。
そこからいらないソースを探してくれ。
見つけたら選択。マウスで、だぞ。
反転したか?したな?じゃあ、キーボードから Delete を探してくれ。
そして、勇気をもって押すがいい。
739737:04/04/19 15:51
>>738
できました。ありがとうございました。
ワークスペースウィンドウは、エディタウィンドウの
表示サイズを狭くするから表示していませんでした。
C#はほんの少しかじったんですが、C++は初めてです。めっちゃ初心者です。
XP Visual stusio .NET

1.まず最初にファイルの作成: 新規作成でmanegedC++の空のプロジェクト を作成して、
 新規項目でC++ファイル でいいのでしょうか?

2.入力された10進数を2進数に変えるプログラムを作成中なのですが、
 入力を求めさせる場合は、たとえば main(int k)と書くだけでいいんでしょうか?
 だめな場合は、調べるためのキーワードだけでもお願いします。

3.デバックすると、1瞬だけコマンドプロンプトが開いて、表示した瞬間に消えてしまいます。
 窓をそのまま表示させておくにはどうすればいいのでしょうか?

複数の質問ですいません。
コマンドラインプログラムを作りたいのか?
742740:04/04/19 17:16
そうです   
コマンドラインプログラムというのが、プロンプトを表示させて、
ユーザーに入力を求めるものであるなら、ですが。
ダイアログではなくて、ウィンドウでデフォルトプッシュボタン(BS_DEFPUSHBUTTON)を使う方法はないですか?
IsDialogMessage()ではダメでした。
>>740
1.
「win32プロジェクト」で新規作成
ダイアログが出たら「アプリケーションの設定」を開き
「コンソールアプリケーション」にチェック
「完了」を押す

2.
入出力の基本くらいC++本とかで学んでくれ

3.
「!」アイコンで実行してみる(Ctrl+F5)
745740:04/04/19 19:19
どうもありがとうでした
746デフォルトの名無しさん:04/04/19 21:45
教えてください。
ずっとVBをやっていたのですが、VBではexeとdllを1つのプロジェクト
グループ(VCのワークスペースのような感じ)にとりこんで、exeと
dllを一緒にデバッグできました。
これはVCでは不可能なのでしょうか?
もし不可能であれば、ワークスペースに複数のプロジェクトを
取り込めるメリットが他になにかあるのでしょうか?
747デフォルトの名無しさん:04/04/19 22:39
          ∧_∧
    ∧_∧  (´<_`  ) 兄者は十年後にはきっと、せめて十年でいいからもどってやり直したいと
  煤i;´_ゝ`) /   ⌒i  思っているのだろう。
   /   \     | |  今やり直せよ。未来を。
  /    / ̄ ̄ ̄ ̄/ |   十年後か、二十年後か、五十年後からもどってきたんだよ今。
__(__ニつ/  FMV  / .| .|____
    \/____/ (u ⊃

748デフォルトの名無しさん:04/04/19 23:06
VC++6.0を使ってDirectXプログラミングに挑戦しているのですが、
DirectX関係の関数やクラスを入力したときに、
引数やメンバリストが出なくて(ポップアップで)結構困ってます。
これは設定を変えれば表示するようにできそうなんですが、
色々いじってもなりませんでした。
表示する方法をご存じの方いらっしゃいましたら、教えてください。
よろしくお願いします。
Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/
>>748
Dxヘッダをプロジェクトに入れる。
752デフォルトの名無しさん:04/04/20 01:54
VC6.0の英語版を使っているのですがどこかで
リソース言語を日本語に変えることのできるToolなどは
ないでしょうか?ぐぐったりしたのですが見つかりませんでした。
どなたか知っている方がいらっしゃったら教えてください。
よろしくお願いいたします。
753753:04/04/20 02:17
七五三
>>753
オメ
755デフォルトの名無しさん:04/04/20 12:49
すいません。デバッグモードからリリースモードに切り替えると
変な警告がでるのですが 直す方法ありますか?
comdlg32.dllへの全ての参照は/OPT:REFによって破棄されます

と出るのですがコモンダイアログは意識して使っていないので
何がどこを見ているのか分かれば参照を外したいのですが。
要は流用ソースで作成したプロジェクトなので以前使っていた
コンポーネントの情報がどこかにリンク情報として依存しているんでしょか
>>755
使ってないから出るんだと思うが。
「デフォルトライブラリをすべて無視」してみ。
>>755
「comdlg32.dllをリンクする設定のようだが一回も使ってないっぽいので
リンクオプション/OPT:REFに従い 参照部分のコードをこっちで削っといたぞ」
という警告。
758初心者:04/04/20 22:35
OpenGLで
glutDisplayFunc(display)

などようにクラスのメンバ内でメンバ関数の void display()を処理
したいのですが括弧の中をdisplayにしてもdisplay()にしても通りません
いい方法ないでしょうか?
759デフォルトの名無しさん:04/04/20 23:40
一つ質問でしゅ。
ビジュアルしーぷらぷらって
何のためにつかうのでちゅか?
まさかGUI作成ではないでちゅよね?
っていうかこんにゃの使っているくちょ現場ってあるんでちゅか?
お客さんだまされてるんじゃないでちゅか?
えむえふちーただちゅかえることになんの意味があるんでちゅか?

使う目的はっきりしろやボケ!質問はそれからだ。
>>759は精神障害者?
それとも引用符の付け忘れだろうか。
>>759
入社早々デスマ乙!
こんなところで良かったら愚痴聞いてやるから死ぬなよ。
放置しろよ。
>>761
いや、愚痴はマ板の相応しいスレでよろしこ。
何か自演のシナリオを貼り付けたみたいだな。
765デフォルトの名無しさん:04/04/21 12:02
VC++6.0でも.netでも確認した現象です。

いままで動いていたプログラムをC++スタイルに書き直した。
ファイル拡張子が.cではclassで構文エラーになるから.cppにしてリコンパイル。
コンパイルまではいいとして、リンクでコケる。今までリンクできていたライブ
ラリの関数を参照してくれなくなった。環境設定ではちゃんとそのlibを読むよ
うに設定。詳細リストを見るとファイルは認識していて読んでいるのに、その
中の関数を無視する。関数名が一致しているハズなのに未定義扱いでエラー
ドバドバ。

つまり何か、Cで昔書いたlibはC++とリンクできないんか。
そんなに不便なのか?
何かやり方があるのでしょうか?
実際はどうなんでしょう。

>>765
>関数名が一致しているハズなのに
C と C++ では名前付け規則が違います。
(C++ では同じ名前で引き数が違う関数が
存在するため、プレフィックスがつく)

C から呼び出される可能性のある C++ の関数は

  extern "C" {
      :
    関数の宣言/定義
      :
  }

とします。
>766
>C から呼び出される可能性のある C++ の関数は
逆じゃねぇか?
768765:04/04/21 17:44
問題完全解決感謝
769デフォルトの名無しさん:04/04/21 17:47
C++ を練習したいんですけど
なんつーソフトを買えば良いんですか?
学校のソフトだとVisual Studioナンチャラ・・・らしいんですけど・・・

マルチかよ
>>769
なぜかわろた
ナンチャラsage
773デフォルトの名無しさん:04/04/21 18:11
バリバリビジュアル寄りな質問ですが教えてください。処理が始まると画面が上がり
画面があがった事で詳細処理が動くという作りの
アプリがあります。このアプリの画面をユーザーに
見せる事なく処理を実行したいのですが
SW_SHOWMINIMIZED等でタスクバーのみ表示、または画面がアクティブにない状態だと
処理が止まってしまいます。
画面はアクティブの状態を維持し 見た目画面に表示させないような
矛盾したコードを技術でカバーする方法はないでしょうか?
774773:04/04/21 18:14
もし不可であれば
タイトルバーの高さサイズ最小くらいまで小さくする方法を教えてください
最小表示でもその詳細処理が動くようにした方が早いんじゃないかい?
776773:04/04/21 18:22
>>775
それはどのようにすればよいでしょう?
客の希望はタスクバーにすらあがらない仕様を望んでいるので
困っています。
どのようにすれば良いかって言われてもその内容がどんなもんなのかが
判らないから言い様も無いんだけど、まずなんで最小にする、或いは
非アクティブ状態になると処理が止まってしまうのかって事だね。
そのトリガが判れば通常アプリケーションが動いている間詳細処理を
実行し続ける方法も自ずと見えてくるんじゃないかな。
778デフォルトの名無しさん:04/04/21 20:00
マルチじゃないって。前スレには断ってあるモンよ。
何を買えば良いのか分からんのよぅ・・・
>>778
学生ならVisual Studio学割で買っとけ。
フリーのコンパイラもあるが、多少身銭を切っといた方が勉強にも身が入るだろう。
つか、C++スレで聞いたほうが公正な意見が
得られると思うが、ってそこまで頭が回りませんか。
ここもCだと・・・
Visual C++ 6.0を使っています
わかりやすいページがあったら教えてくれませんか?
猫のところは古いんで6.0だと不便なんで・・・
>>782
古くても6.0なら猫で十分。6.0も古いし。何が不便なの?
785デフォルトの名無しさん:04/04/21 22:52
高度なテクが必要だと聞いたのですが方法をご存知のかた
教えてください。
VB側からVCで作成したDLLを参照しているのですが
DLL側の処理が終わらない間にVB側へ操作が返ってきます。
(そのままモーダレスのような状態でDLL側は動きます)

これをVC側のエクスポート関数側でブロックしたいのですが
ここでWhileを使って応答が返るまで待機させようとしたのですが
このループに入った途端に処理側もフリーズしたような状態になりました
なんか上手い応答待機の方法ないですか?
関数テンプレートって、どういうときに使うと便利なんですか?
>>786
何でもいいからC++の本を一冊読破しろ。
話はそれからだ。
788デフォルトの名無しさん:04/04/22 07:35
>>787
お前アホか?
ちゃんと答えてやれよ、ボケ!
789デフォルトの名無しさん:04/04/22 08:42
関数テンプレートは、「どの型を引数にとっても同じ操作をする」時に便利。
「二つのオブジェクトへの参照を引数にとり、値を入れ換える関数」が必要だとして、
を、整数用、浮動少数点用、構造体用、って 別々に用意するの、めんどいッショ。
Windows2000 Pro SP4 & Visual Studio 6 sp5の環境にvs6SP6をインストールしてみたのですが、
インストールが正常終了してもmfc42.dllが更新されません。イベントログを見ると、
「保護されいるmfc42.dllが更新されそうになったから、元のバージョンに戻した」のイベントが残っています。
mfc42.dllを更新するには、手動でcab展開&コピーしないといけないのですか?
791デフォルトの名無しさん:04/04/22 10:16
VC .NETを使っています。
分割コンパイルをすると、クラスが定義されていない旨のエラーが出ます。
特別な設定が必要なのでしょうか?
>>791
プログラムの誤り。
>>788-789
Visual C++ スレで答える必要もないと思うが、春か…。
794デフォルトの名無しさん:04/04/22 15:04
CFrameWndをDoModalで開く方法を教えてください
自分で実装しる
796721:04/04/22 20:53
vc.net を使ってます。

mainfrmの関数をオーバーライドするとします。
VC6.0とかでは、クラスウィザード(?)から
オブジェクトIDを指定できるじゃないですか。

あれって.netではどうやればいいのでしょうか。
メッセージをどこかに追加しなければいけないのでしょうか。

なんか説明しにくいのですが、
もしかして質問が支離滅裂でしょうか。

>>796
ms-help://MS.MSDNQTR.2003FEB.1041/vccore/html/vcgrfWhereIsClassWizardInVisualCNET.htm
おまいら本当は役たたずでしょ実は






といったら吠える香具師↓
(゚Д゚#)ウオォォォォォォォ!!!!!
ハル ウラーウラーラーラー orz
801782:04/04/23 20:25
>>784
レス遅くてすいません
猫のところのはそのままコピーするとエラーが起きるからです
初心者なのでエラーの理由とか表示されてもさっぱりだし・・・
それも勉強だよ。他にも同じ様な例を挙げてるサイトもあるかもしれんし。
調べ方に慣れるのもかなり重要だから。
803デフォルトの名無しさん:04/04/24 03:50
実行ファイルの最初の部分にたまにコメントを埋め込んである人がいるんですが、
あれってどうやって実現しているんですか?

http://www.din.or.jp/~ch3/game.html
ここにある http://www.din.or.jp/~ch3/gba01w.zip の GBA.EXE をバイナリエディタでみると、コメントがあるんですが・・・

やり方がわかるひと。おしえてください。

#pragma comment( exestring, "...." )

ではないですよね?(vs.netでは使えないんですが)

>>803
コメントってどれのことだ?
私にはWin32アプリに必ず埋め込まれる
This program cannot be run in DOS mode
しか見当たらないが。
STUBを自前で作っただけではないのかな?
>>804 0x2E8からの文字列のコトだと思う
#pragma comment(linker,"/comment:ふんにゃか") とか?
807デフォルトの名無しさん:04/04/24 11:56
質問です。
ListControlをレポートに設定して
それをダイアログベースのフォームに貼り付けたのですが
m_lcTest.InsertColumn( 0, "TEST");
と言う感じでカラム追加しても表示されません
デバッグモードでやると、例外が発生してるみたいです。

ちなみに、1つ目のダイアログに貼り付けると問題なく出来るんですが
1つ目からDoModalで表示したダイアログでやると失敗するんです。
何か特別な方法が必要なのでしょうか?
808デフォルトの名無しさん:04/04/24 17:19
現在のウインドウがフルスクリーンかウインドウモードかを判別する方法をおしえてください
>>808
ウィンドウスタイルを取得すればいいんだが、
API でやりたいのか?それとも MFC?
810デフォルトの名無しさん:04/04/24 17:47
>>808
GetWindowPlacementなんて好き?
タイトルバーとかの余白分って、最初に
MoveWindowするためにゴチャゴチャやるときにしか求められないんですか?
>>811
言ってることがよくわからんが
GetWindowRectとGetClientRectして差分を出したらいいのか?
>>811
まさかGetSystemMetrics()を知らないんじゃないだろうね?
>>812
すみません、何か勘違いしていたようです・・・。学校で、

HWND hDesk;//デスクトップを操作する
RECT ScrnSize;//デスクトップの大きさを格納
hDesk = GetDesktopWindow();//デスクトップハンドルを取得
GetWindowRect(hDesk, &ScrnSize);//デスクトップの大きさを取得

このように習ったので、GetWindowRectはデスクトップの大きさしか取って来れない
と勘違いしてました・・・。ウィンドウのハンドルを指定すればいいんですね。
お騒がせしました・・・。

>>813
それは知らなかったです、調べてみますね。ありがとうございます。
VC++.net 2003 STD でATLコントロールを作成する時、
「ランタイムで非表示」をチェックして作成したコントロールを
WTLのCAxDialogImplに貼り付けても、実行時にコントロールの表示が消えません。
とりあえずGetAmbientUserMode()で実行モードかデザインモードか判断して
描画しないようにしていますが、こんなやり方しかないのでしょうか?
質問なんですけど
今、Win32APIを使ってWindowsプログラミングの勉強してるんですけど
vcvars32.batに適切なコマンド?を渡せばIDEなんかを使わなくてもいけますか?
軽いエディタで作業したいので
817デフォルトの名無しさん:04/04/26 16:44
最近プログラムの勉強をはじめたものです。
ダイアログベースで、左にリストがあり、そのリストを選択すると右の項目が変わるような
(netscapeなどの設定画面)画面を作りたいのですが、どのように構成にすればよくわかりません。
どなたか教えてください。よろしくお願いします。

開発環境は Visual C++ .net 2002 WindowsXPです。
>>817
急がば回れ。タブコントロールについて調べなされ。
>>818
ネスケのPreferencesなんだからTreeコントロールだろ
820デフォルトの名無しさん:04/04/26 19:16
>>818,819

CTreeを使って試してみることにします。
ありがとうございました。

>>819
>>817がわからないのは、
>そのリストを選択すると右の項目が変わる
ってのじゃないの?

って書こうとしたら>>820かよ。スマンカッタ。
822デフォルトの名無しさん:04/04/26 19:57
>821

CTreeが右を変えてくれると思ったら違いました…
その、右の項目を変えるにはどうすればいいんでしょうか。
vc.netで、SDIです。
途中まで作って、やっぱりスプリットウィンドウにしようとしたら、
プログラム終了時に、

〜でハンドルされていない例外が発生しました : ユーザー設定のブレークポイント。
と言われてしまいます。

MainFrame::OnCreateClientの中で下記のようにしています。
(m_spWndは、CSplitterWndのオブジェクトです。)

m_spWnd.CreateStatic(this, 1,2);
m_spWnd.CreateView(0,0,RUNTIME_CLASS(追加したビュー),CSize(200,0),pContext);
m_spWnd.CreateView(0,1,RUNTIME_CLASS(最初からあるビュー),CSize(0,0),pContext);


上記の2行目と3行目を入れ替えると(単純にそのまま行の順番を変えると)
例外が発生しなくなります。

自分で調べるべきなのでしょうが、どこからどう調べていいかわからず
途方にくれてます。

ヒントだけでも、お願いします。
>>817
Tabライクなページ・ビューの切り替えね

指摘のMozのPreferencesみたいな設定ダイアログを起こす場合はCDialogでなくて
CPropertySheetを使い、CPropertyPageをそこにAddPage()で乗せていく。リソース
はダイアログのものでOKでクラスを作成するときにCPropertyPageにしてやる。
検索すればソースは出てくると思う。

単純なページでできているもので、もっと簡単にやりたいなら、普通のダイアログに
使いたいコントロールを重ねて貼って、ShowWindow(SW_SHOW)とか
ShowWindow(SW_HIDE)使って、コントロールを消したり出したりする方法もある。
826デフォルトの名無しさん:04/04/26 21:29
ビジュアルチックな質問になるんですが
よろしくお願いします。CFrameWndを使用しています。
ウインドウが作成されると白いバックグラウンドに黒の文字で
画面が表示されます。

顧客をだまくらかすのに必要なのですが、この画面を
VBのメッセージボックスのように灰色ダイアログ化して文字も
灰色にして中で何が行われいるかわからないようにしたいのです。
可視をいじくると不具合がでます。
※アクテイブにしていないといけないアプリです
さらに「しばらくお待ちください」のビットマップを
そこに貼り付けたいのです。
このあたりの制御コードに詳しいかた手順をお願いします。
827デフォルトの名無しさん:04/04/26 21:36
>>824
>>825

なんとなく見えてきました。
CPropertyPageのAddPageする場所を表示するべき場所に指定するということですよね?
どうすれば出力すればいいのかが自分的な壁ですが、色々試してみたいと思います。
>>826
素直に文字を表示しなければいいだけじゃないの?
829826:04/04/26 23:18
>>828
当初その予定だったのですが、顧客が文句を言ってきたのです。
画面が気になるから非表示にするかmsgbox化しろ との内容です。
ビューをダイアログに変えたいのですが、弊害があり
なるだけ既存のコードに大幅な変更を掛け図に 姑息な手で
稼動をへらしたいなあと思いました。
なのでお知恵を拝借させてください。
よくわからんが OnEraseBkgnd でゴニョゴニョするとか。
よくあるスプラッシュ系ウインドウでも表示しとけばええんでないの?
ダミーの子ウィンドウを上に被せとくとか
>>832
それですな。そのウィンドウに
「現在処理中です」とでも書いとけばいいんでない?
834デフォルトの名無しさん:04/04/27 01:50
書いたら処理してるのばれるのだか。
じゃあ「現在処理はしていません。本当ですよ」と
書いておけばいい。
それですな。
あまりにも初歩的なことで申し訳ないんですが、
最近VS.NET2003アカデミックを使い始めて
いきなり理解不能なことにぶち当たってます。

新規プロジェクトでWin32コンソールプロジェクトを作成し、
以下のコードを書きます。
-------------------------
#include <iostream>

int main(void)
{
cout << "TEST" << endl;
return 0;
}
-------------------------
これをコンパイルするとcoutやendlが定義されてない識別子だと怒られます。

今までbccとgccと、大学でVC++6.0を触っただけの自分には
何がなんだかわかりません。
ごく普通にC++プログラムを作るにはどうしたらいいでしょうか?
using namespace std;
839837:04/04/27 02:59
それか!!
今まであえて使う場面がなかったので忘れてました。
即レスありがとうございます。
>>835さん、どうもありがとうございます。
その作戦でいこうと思います。
助かりました。
>>837
> #include <iostream>

iostream.h
842デフォルトの名無しさん:04/04/27 16:26
おら、cからC++に移行しかかってます。
>>841
っつうか.Netはiostream.hはいらないというか ない
std::cout
std::endl
VC++で、実行したときにどの変数にどんな値が入っているのかリアルタイムで下方に表示する方法教えてください
>>845
メンドウだから別でコンソールを開いてそっちに表示しようよー。
847デフォルトの名無しさん:04/04/27 23:54
教えてもらっていい?俺あんまVcわかんないんだけ
進入社員なんだよね。少しだけ学校で6触っただけなんだよ
いきなりさ。コレ解析してくれって27のPMから押し付けられたソース
リリースで実行したら4回目でコケるわ デバッグに切り替えたら
デバッグ情報がないたら文句いわれるわ
わけわかめ どうしたらいいんだこれ?
>>845
TRACEマクロのことか
849847:04/04/28 00:06
あんましこういうとこ出入りしてないんで他で
マルチポがどうとかキレられてしまいました。
口の利き方がどうとか回答だれもくれないとか罵られて
なんか凹んで来た。
訂正して改めて質問します。
メモリが”READ”になることはできませんでした
とか変な日本語が表示されるのですが、これは????メモリー?と呼ばれる
領域が読込めなかったと解釈していいメッセージなのでしょうか?
>>843

エラー状況と対処法として>>841はアリだと思うんだが
>>849
> メモリが”READ”になることはできませんでした

バッファ・アクセスに関しておかしなコードがあるとそういうエラーになる。
それだけじゃ何が悪いのか分からない。プログラムの規模も分からないし。
>>849
んー、それだけだとどうしようもない。
環境がダメなのか、ソースがダメなのかもはっきりしない。
とりあえず、そのREADなんたらにかんしてはgoogle検索でもしてみることをお勧めする
>メモリが”READ”になることはできませんでした
>とか変な日本語が表示されるのですが

まぁたしかに変な日本語だよな。
慣れちゃえば定型文なんだけど。
はじめて見る人はなんのことやらサパーリだろう。
はじめてのC++を読んだので、次はVC++の入門書に手を出してみたいと思っています。
このスレ的に、お薦めのVC++入門書は何ですか? 教えてください。
>>850
アリなのと適切なのは違うよな。そのくらいわかるよな。
>>854
GUIに行く前にSTLの本読んどけ、っと言ってみるテスト。
857849:04/04/28 01:49
皆さんレスありがとう。規模とはステップの事?
何やらアルファサーバーにテレネットで
接続して コマンドを送るプログラムです
呼び出し元を閉じると
このエラーがでるよ
>メモリが”READ”になることはできませんでした

誰だっけか。この奇妙な文の理由を考察してたね。

英語だと "memory cannot be %s" というフォーマットを用意して,
%s に "read" や "write" を代入するだけで「メモリから読み出せませんでした」とか
「メモリに書き込めませんでした」になるんだよね。
同じ事を日本語でやるならば "メモリから%sませんでした" というフォーマットを用意して
"読み出せ","書き込め" というリソースを用意すれば,この部分に関してはクリア。

しかし,英語版Winだと "read" や "write" つー文字列リソースをいろんな場面で
使いまわしてるそうな。それを日本語に翻訳した時,どうしても "読み出せ","書き込め" を
使いまわせないような場面が出て来るそうな。
苦肉の策として,奇妙な言い回しを採用したそうな。

二人は仲良く暮らしましたとさ。めでたしめでたし。
!すげーなおい
860デフォルトの名無しさん:04/04/28 10:33
あと、no 〜 found. 見たいなものを 「何も無い。が見つかりました」とかね
ライブラリの作成に関する質問です。よろしくお願いします。
MFCをつかう・使わないプログラムでも、
マルチスレッドでも、シングルスレッドでも、リンクできるライブラリ
を作成したいのです。
ライブラリの作成時にNODEFAULTLIBなどしてはいるのですが、
プログラムのリンク時に、
libcd.lib(dbgheap.obj) : error LNK2005: _malloc は既に msvcrtd.lib(MSVCR71D.dll) で定義されています。
libcd.lib(dbgheap.obj) : error LNK2005: __malloc_dbg は既に msvcrtd.lib(MSVCR71D.dll) で定義されています。
としかられます。

すいませんが、よろしくお願いします。
メモリから書き込めませんでした
863デフォルトの名無しさん:04/04/28 12:27
         ______ 
       ,;i|||||||||||||||||||||||||||||||ii;、         _/
     /||||||||||||||||||||||||||||||||||||||ii;、        \
  / ̄ ̄\||||||||||||||||||||||||||||||||||||ii;゙ヽ,      /
'" ̄ヽ     ヽ!!||||||||||||||||  ||||||||||!!"ヘ     <  ロマンティックageるよ
ヽ          ゙!!!||||||||||||  |||||||!!   iヽ── /
|||l            ゙゙ヽ、ll,,‐''''""     | ヽ|||||||||ロマンチックageるよ
|||l     ____   ゙l   __   \|||||||||  
||!'    /ヽ、     o゙>┴<"o   /\   |'" ̄| ホントの勇気 見せてくれたら
\  /  |ミミヽ──‐'"ノ≡- ゙'──''彡| |、 |   |
   ̄|    |ミミミ/" ̄ 、,,/|l ̄"'''ヽ彡|| |、/   / ロマンティックageるよ
 ヽ、l|    |ミミミ|  |、────フヽ |彡l| |/  /_
  \/|l    |ミミミ| \_/ ̄ ̄フ_/  |彡|l/    ̄/ ロマンティックageるよ
  \ ノ   l|ミミミ|  \二二、_/  |彡|      フ  
    ̄\  l|ミミミ|    ̄ ̄ ̄  |メ/       \トキメク胸に キラキラ光った
    | \ ヽ\ミヽ    ̄ ̄"'  |/        /
    /  \ヽ、ヾ''''ヽ、_____//       /_夢をageるよ
  /  ヽ ゙ヽ─、──────'/|         ̄/
. /       ゙\ \     / / \__
   ───'''" ̄ ̄ ゙゙̄ヽ、__,,/,-'''" ̄   ゙''─
別プロセスのハンドルを取得するダイアログベースのプログラムを書いているんですが、

OnInitDialog関数内でプロセスハンドルを取得したときと、
たとえば、ボタンを押したときにプロセスハンドルを取得する場合とで
取得できるプロセスハンドルが変化してしまうのですが、なぜでしょうか?

プロセスIDをみると同一なので、同じハンドルが取得できるはずだと思うのですが
なぜか変化してしまいます。

出来れば、ダイアログが立ち上がったと同時に自動的に別プロセスのハンドルを
取得したいのですがどうすればいいのでしょうか?
865864:04/04/28 15:04
馬鹿な質問してしまったようです、忘れて下さい。
ごめんなさい…
867デフォルトの名無しさん:04/04/28 22:15
あの・・・本当にめちゃくちゃ初心者なんですが、聞いてもいいですかね?

あるホームページのプログラミング初心者講座で文字を表示させるだけの作業
の方法が書いてありました。
ところがそれで使ってるコンパイラがVC++だったため、私が買ってしまった
Visual Studio .NET 2003ではどのようにその作業をするのかまるで分かりません。
vc++netの本もいくつか読んだのですが・・・。

ちょっとしたとっかかりだけでもいいんで教えていただけないでしょうか?
言ってることちんぷんかんぷんだったらすみません。
#include "stdafx.h"

using namespace std;

int main()
{
   cout << "Hello World C++ \n";
   
   return 0;
}
初めて車買うのにF1買っちゃったのかな?
871867:04/04/28 22:54
>>869
すみません。ソースの書き方が分からないのではなく(載ってましたし)、どうやって
ビルドするかが分かりません。
VC++はビルドを実行すると勝手にワークスペースが作られるようですが、どうも
これは違うようです。
ビルドを実行するまでの手順を教えていただけたらありがたいです。
(説明書わけわかんない・・・)

>>870
とりあえず新しい方がいいんだろうと思って買ってしまいました・・・。
ファイル⇒新規作成

@C++プロジェクトでwin32アプリケーションを指定し、ファイル名を入力してOKボタン

Aアプリケーションの設定をクリック、コンソールアプリケーションのチェックボックスをON

完了押せば

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
ができあがって、
そこに
using namespace std;

cout << "Hello World C++ \n";
を記述してビルド
>>871
とりあえず、猫でGO!
http://www.kumei.ne.jp/c_lang/
っていうか 何が聞きたいのかわからん
>>871
ctrl+F5 連打
>>872
出来ました♪これが出来ない事には先に進めなかったんで本当に助かりました。

>>873
初めて知ったところですが、かなり良さそうですね。
これから活用したいと思います。本よりいい感じかも・・。

>>874
説明ちんぷんかんぷんですんません。
自分でも何書いてるのかよく分からないような気もしたんですが、
知識が全然ないんでどうしようもなかった・・・・。

皆さんレスありがとうございました!!
877デフォルトの名無しさん:04/04/29 08:13
ツリーコントロールで、現在選択中のアイテムが
何階層目にあるのかを知る為には、
どのようにすれば良いでしょうか?
878デフォルトの名無しさん:04/04/29 08:42
うに
TTreeNode.Level
>>879 逝ってよし
>>877
for(int i=0 ;(hParent = GetParentItem(hParent)) != NULL && hParent != GetRootItem(); i++);
882847:04/04/29 14:41
みなさんレスありがとう。
色々試してみたんだけど 全然改善されないよ
V呼び出し元のアプリを閉じたときに デバッグで不具合個所を見ても
NTDLL! アドレス番号? のとこでいつも同じコケ方してる
こういう時の解析ってどうするんですか?
>>847
>リリースで実行したら4回目でコケるわ
3回目までは正常に動作するの?4回目でコケるっていうのも、
正常に動作し終わった後でエラーになるの?



884854:04/04/29 16:44
>>856
遅レスになりましたが、どうもありがとうございます。
STLの意味は何となくつかめたので、土日にでも本を探してみたいと思います。
885847:04/04/29 18:41
>>883
正確にいうとMFCのDLLで呼び出した関数を連続3回まで
正常に呼び出し成功して4回目にアプリケーションエラーで落ちる事が
あるんだけど、必ず という確立じゃなくて 不意に落ちる。

VBの中ではこの関数をループ内で使用していて
For i = 0 to 9
で明示的に10回連続でコールします。
ボタン一回押下するにつき10回関数が呼ばれるのだけど
そのボタンを4回押すとエラーが発生してしまうんで
何かが初期化されていないからか スタックとかメモリの領域が壊れるか
そのあたりがキーなのかな?とは思っているんだけど

いずれにしても一度ループで10回関数をコールしたあと
VB側を終了したらまた違う番地でのアプリケーションエラーがでている
ようっす。どうやって解析したらよいものか。。。
待て、VB?
今までにそういう情報かいてたかモマエ・・・
ほかにも重要な情報がいろいろ抜けてて、その中で普通の人はやらない大ポカを
してるんだろう
VBでデバッグしてるわけじゃないよな・・・
>>885
デバッグしたいのはDLLなの?それとも、そのDLLは十分使用されていて
問題がないことがわかっていて、VBのアプリをデバッグしたいの?

まあたぶん前者なんだろうけど。
そのDLLを使用するVCのアプリを作ってデバッグしなよ。
そのDLLのソースもあるんだろな?
>>847を見る限りろくにデバッグもしてない予感がするのは俺だけだろうか
Visual C++6.0なんですが、
ダイアログエディタのコントロールパレットを
軽い気持ちで消したら、
どうやっても出てこないんですが・・・
>>891
上のメニューが並んでる所の何も無い場所で右クリック→コントロールにチェック
893847:04/04/29 20:04
>>886
VBは試験的につかってるだけだよ
この先MFCのEXEにする。MFCのウイザードで作ったEXEで
このDLLをロードしても終了時にアプリケーションエラーが
出るから多分DLL側に問題あるんだよな

>>889
もちろんDLLだよ。今まで単純にループなしで
あまりコールされなかった関数だったんだけど今回の開発で呼び元に手が入って
そのDLLが連続処理時に不具合でてるから解析してくれといわれた

>>890
まだデバッグも出来てないよ。何かわからんがDLLのプロジェクトを
開いてデバッグ実行するとデバッグ情報がありません と怒られて
無視してブレークの位置までF5を押していくとエラーになってた
895894:04/04/29 20:25
って書いたけど>>894だけじゃわからんかもナー・・・

DLLは、デバッグビルドされた .dll ファイルじゃないとイカンよ。
で、呼び出し側のプロジェクトで、そのdllのソースがある場所を
設定してやるとよい。
896847:04/04/29 20:40
>>895
はい その辺はきちっと押さえてて デバッグビルドDLLを
パスの通った場所に格納してデバッグ実行しているよ。

他のDLLだと問題なくデバッグでステップ実行できるんだけど
897デフォルトの名無しさん:04/04/29 20:42
VisualC++.net 2003を使い始めました。

拡張子「.c」でC言語を実行したいのですが方法が分かりません。「.cpp」なら普通に実行されるんですが…

簡単なことかもしれませんが、教えて下さい。
898894:04/04/29 20:45
パスのとおった場所か・・・

んーとさ、呼び出し側のプロジェクトのメニューから、
[プロジェクト]→[設定]→[デバッグ]タブ→[カテゴリ]を[追加するDLL]
にして、その下のリストに使用するDLLを追加してある?
ここで指定するDLLファイルは、DLLのソースディレクトリ内の
debug ディレクトリの中にあるファイルを指定して。
そうすると、デバッグ中にそのDLLの関数に入ろうとしたときに
ソースファイルの場所を指定するダイアログが開かないかな。
899894:04/04/29 20:47
>>897
http://www.borland.co.jp/qanda/lang/l0001912.html
取り急ぎ。もっと詳しいページもイパーイあるけど。
900デフォルトの名無しさん:04/04/29 20:56
>>899
レス有難うございます。
しかし、プログラム的な質問じゃなくてVisualC++2003の使い方についての質問です。
質問の仕方が悪かったです。すいません。
901894:04/04/29 20:58
>>900
ごめんなさい。FAQ的なアレかと思いました・・・。
2003はわかりません。
902デフォルトの名無しさん:04/04/29 21:38
Windows2000, VisualC++6.0でウインドウズアプリを作っているのですが、
SetDCPenColor関数やSetDCBrushColor関数を使いたいのです。
しかし、コンパイルすると「定義されていない識別子です。」とエラーが出てしまいます。
VisualC++のエディタ上ではSetDCPenColor(の"("を押すと、引数が表示されてるので、
認識されてはいると思うのですが。。。
どなたか分かる方、よろしくお願いします。
#if (_WIN32_WINNT >= 0x0500)
WINGDIAPI COLORREF WINAPI SetDCBrushColor(IN HDC, IN COLORREF);
WINGDIAPI COLORREF WINAPI SetDCPenColor(IN HDC, IN COLORREF);
#endif

こーなっとる
904デフォルトの名無しさん:04/04/29 22:13
>903さん
レスありがとうございます。
_WIN32_WINNTの値を0x0500にするとうまくいきました。
ただWindows2000では_WIN32_WINNTの値は0x0500だと思うのですが。
うまくいったからいいのですが、少し気になります。
でもどうもありがとうございました!
初心者によくありがちな勘違いだが、OSを変えたからといって_WIN32_WINNTが勝手に定義されるわけじゃない。
906デフォルトの名無しさん:04/04/29 23:13
>905さんへ
そうだったのですか、知りませんでした。
どうもありがとうございます!
すいません初心者です。

OnDraw関数の中で、

CRgn aaaa;
aaaa.CreateRectRgn(10,10,300,300);
pDC->SelectObject(&aaaa);

aaaa.delete();

とかやりたいんすけど、selectしたままだと消せないと
聞きました。どうやってデリートしたらいいでしょうか。
元に戻せ
>>907
SelectObjectの戻り値。
>>908
戻し方がわかりません。(すいません

>>909
CPenのオブジェクトとかは選択したときに元の
やつが戻り値に戻されると思うのですが、

CRgnの場合をヘルプで見ると、intが戻っている
ようなのですが…いかようにすればいいのでしょうか。
>>910
リージョンの場合は元に戻さなくてもいい。
>>911
あ、そうだったんですか。
どうもありがとうございます。
そう言えば、どれを戻して、どれは戻さなくてもいいんだろう・・・
CPenは?CBrushは?CFontは???
リージョン以外はすべて戻す。
面倒くさいときは SaveDC()とRestoreDC()
916デフォルトの名無しさん:04/04/30 03:35
Visual C++ でホームページのボタンを自動で押すソフトは作れますか。
作れます
不正クリックでバナクリ稼いでんじゃねーよヴォケ
>>917
それは Visual C++ 6.0 でもできますか?
920デフォルトの名無しさん:04/04/30 09:36
誰か>>897教えて下さい。
お願いします。
>>897は質問の意味がわかりませんな。
コンパイルのことならそういうスイッチがあったと思われ。
922デフォルトの名無しさん:04/04/30 09:56
VC++でOfficeのバージョンを取得する便利な関数ってありますか?
無い場合はどうやって取得したらいいんですか?
>>922
レジストリの値を参照すればいいんじゃないの?
レジストリ、見てみたんですけど、どれがバージョンなのか…。
925デフォルトの名無しさん:04/04/30 10:21
>>921
そうです。「.c」だとコンパイルされず実行出来ないんです。
>>925
お前の独自用語の説明はわからん。エラーメッセージをそのまま貼れ。
927922:04/04/30 11:11
レジストリの値ですが、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\
にある8.0とか9.0がバージョンと思うんですが、
これって絶対に8.0から1おきに増加してるものなんでしょうか。
928デフォルトの名無しさん:04/04/30 11:31
PictureControlを使って配置した画像に透過色を指定して表示するにはどうすればいいのでしょうか?
環境はVC++.Net2003です。
よろしくお願いします。
929891:04/04/30 12:05
>>892
遅レスですがありがとうございます。
何もないところとは盲点でした・・・
int A = 255; A = A << 30;
だとAは0x30000000になりますよね?
同じく int A = 255; A = A << 32;
だと A = 0 になるのでしょうか? 255 のままなのですが・・・・・・。
>シフト式の右オペランドが負のとき、または右オペランドが
> (上位変換された) 左オペランドのビット数以上のときの結果は、未定義です。
未定義だから、文句言えないんじゃない?
クラス内にCALLBACKを持つ関数をメンバとして使うことはできませんか?
(__stdcall *)〜に変換できませんというエラーがでます
>>917
ありがとうございました。
なんとか作ってみます。
>>930
>int A = 255; A = A << 30;
>だとAは0x30000000になりますよね?
なりません。

>同じく int A = 255; A = A << 32;
>だと A = 0 になるのでしょうか? 255 のままなのですが・・・・・・。
>931の言うように未定義なので、警告が出るコンパイラもあります。
VC++では必要なDLLを一緒にコンパイルする事は出来ないのでしょうか。
DLLをさらにコンパイルしたいのか。
難問だな。
同じワークスペースに放り込んで
プロジェクト→依存関係
939936:04/04/30 22:05
解決しました。
リリース版でコンパイルすればOKなんですね。
なんだってー!!
質問

なぜVC++は単発の.cや.cppファイルをビルドできないのでしょうか?
>>941
用語が違うから。
943デフォルトの名無しさん:04/05/01 04:30
DAOで新規にレコードを追加したいのですが、
CDaoRecordset *m_dbRecord = new CDaoRecordset(m_DB);
m_dbRecord->AddNew();
m_dbRecord->Update();
とすると、
「インデックスまたは主キーには、Null 値を使用できません。」という
エラーメッセージが表示され、レコードが追加されません。
追加するレコードの各々のフィールドの初期値を設定するには、
どのようにすれば良いでしょうか?


CDaoRecordset *m_dbRecord = new CDaoRecordset(m_DB);
m_dbRecord->AddNew();


m_dbRecord->Update();
SetFieldValue
>>897
> VisualC++.net 2003を使い始めました。
> 拡張子「.c」でC言語を実行したいのですが方法が分かりません。「.cpp」なら普通に実行されるんですが…
> 簡単なことかもしれませんが、教えて下さい。

拡張子が .c のファイルをVCで開いても、
ビルドのボタンが表示されないから困っている、ってことだろ。

空のプロジェクトを作り、新しい項目の追加でファイル名を拡張子まで書きhoge.cとしてやるか、
既存の項目の追加でhoge.cを指定してやればOK。

拡張子を書かなければ、自動的に.cppが付加されてしまう事に注意。
ファイルのコンパイルと
プロジェクトのビルドは
違うからね。
947デフォルトの名無しさん:04/05/01 11:29
>>945
出来ました。有難うございます。
>>945
すげーよくわかったな(w
1001000101001  (2→10)
↑これの意味わかりますか?
わかりますよ。
>>949
よろしく
じゃーとっとと教えてくださいよ先輩!!
>>949
それ、VC++とどう関係があるのか聞きたい。
>>952
1001000101001(2進) = 4649(10進)
で、ヨロシク
>>954
いやほんと d(゚Д゚)サンクス
>>955
せっかくだから

>>954
100111

くらい書けよ
>>954
あれ?2324じゃないかい?
958957:04/05/01 15:36
間違えてた・・・
959デフォルトの名無しさん:04/05/02 15:01
MFCのTRACEマクロみたいな機能がc++でほしいのですがなんのヘッダをインクルードすればええですか?
960デフォルトの名無しさん:04/05/02 15:06
>>959
MFCはC++なのでそのまま使え。
MFCを使わない時にもということであればMFCのソースをミロ。
>>959
VS 2003なら TRACE を選択して定義へ移動。 (゚д゚)ウマー
962デフォルトの名無しさん:04/05/02 23:08
最近Visual C++を使い始めたのですが、覚える言語はCとC++どっちがいいんでしょうか?
できれば二つの違いについても教えてもらえると助かります。

微妙にスレ違いですいません。
963デフォルトの名無しさん:04/05/02 23:20
せっかくだ。両方やっとけ。
>覚える言語はCとC++どっちがいいんでしょうか

>できれば二つの違いについても教えてもらえると助かります

掲示板で聞く内容ではないと思います。
せっかくのGWなんだし、理解するまで思う存分
書店で立ち読みでもしてきたらいかがでしょう?
とりあえず、cやってから考えろ

cできないのにc++なんてできやしない
>>12
左だよ
>>966 ワラタ
968デフォルトの名無しさん:04/05/03 00:15
>>966
ワロタ
>>966
ツッコミ遅いよ!何やってんの
>>Part8の567
死ねよ、屑
971しぃ:04/05/03 08:51
VC++.NET2003はC++の.NET環境が整ってきているのですが、デバッグ実行時の起動が超遅いです。
プロジェクトを新規作成して何もコードを書かずにデバッグ実行を開始しても、フォームが出てくるまで30秒ぐらい待たされます。
デバッグなしの実行ではすぐに出てくるのでデバッガの問題だと思うのですが。
2002の時も「Hello World」がコンソールに出てくるまでやはり30秒ぐらいかかります。
どなたか解決策をご存じないでしょうか?
ちなみに環境はWinXPPro、AthlonMP2000+Dual、メモリ512MBです。
ノート(WinXPHome、PentiumM1.4GHz、メモリ512MB)や職場のPC(Win2k、Pentium4-2GHz、メモリ256MB)でも同様でした。
よろしくお願いします。
972山本五十六:04/05/03 10:20
水をさすようですまんが君たちはもうじき失業するよ
これからはC♯の時代なんだから

航空優位時代到来なのに大艦巨砲主義に何時までもこだわるな、ということだw
アフォだなぁ プログラマーの未来なんてどうせ暗いよ。

人件費の関係で、日本のPGはみんな失職。インドとかアジア系の人材ばっかりになるよ。
>>973
釣りですか?
>>973
製造職全般にも言えるね
田舎に帰って無農薬農法でもやってください
976デフォルトの名無しさん:04/05/03 11:38
VC++.2003で
#include <stdio.h>
int main(void)
{
int a,b,c;
a=4;
b=0;
c=a/b;
printf("%d /%d = %d\n,a,b,c);
return 0;
}
これをビルドすると 「ハンドルされていない例外が発生しました」
と出ます。上のプログラムでintをdoubleにしてa,bを小数にして実行
するとc=1.#INF00と出ます。なぜでしょうか。
>>976
ゼロ除算の例外
INFはインフィニティ
978デフォルトの名無しさん:04/05/03 11:52
それ以前にコンパイルできないような気がするんだが(w
979デフォルトの名無しさん:04/05/03 12:04
>>978
整数ではコンパイルできませんが、小数ではできました。
980デフォルトの名無しさん:04/05/03 12:15
あれっひょっとしてマジ質問か?

漏れはVC++.2003は知らんのだがそもそも標準入出力(コンソール相当)あるのか?
(つまりprintf/stdio.hは使えるのか?) > 他の人

>>979
まずタイプミスがないかよく確認してから実行してみてくれ。
>>980
あるに決まってるだろ。
もしかして知らない物の回答をしようとしているのか?
そんな怒るほどのことか?会社でVSSつかっとるがこいつで<stdio.h>使ったことないんだよ。
分かっている香具師がはよ答え路や。
>>976に貼られたソースがコンパイルできないのは明白だが、
実行した結果に付いて訊いているのだし、
それについても答は>977で出ている。

>979はコンパイルと実行の区別がついていない発言なので、
>980は質問は別としてレスは的外れ。

>>980
VC++.NETは.NETアプリしか作れないわけじゃないよ。
>>983
>979 整数ではコンパイルできませんが、小数ではできました。

これはどうなる? >>977は不完全だ。
985デフォルトの名無しさん:04/05/03 14:11
分割コンパイルについて質問させてください。
いくつかのクラスを作っていて、それぞれクラスごとにヘッダとソースがあります。
クラスの中でお互いを引数とかメンバで持っているのでどこかで#includeをしないと
いけないと思うんですが、お互いに呼ばれあっているので一方を先に#includeすると
他方がエラーを起こし、逆にしても結局はエラーが起きます。
あまり複雑なプログラムを組んだことがないので混乱してきました。
分割コンパイルのセオリーのようなものがありましたら、ぜひ教えてください。
よろしくお願いします。

環境:VC++6.0
986976:04/05/03 16:00
>976 a,bを小数にして
というのは例えばa=6.0,b=0.0にするということです。
>>985
クラス名を使いたいなら名前だけ宣言することでOKだよ。
class Foo; // こんなかんじ
class Bar;
相互に参照するような相関度の高いクラスは一つのヘッダに
まとめるとか、クラス毎のヘッダ群をまとめるヘッダを作るとか、
いろいろ工夫できるのではないかと。

どこかの偉い人が作ったセオリーとかは知らないなぁ。
きっといろいろあるんだろうけど…。
988987:04/05/03 16:29
蛇足かもしれないけどインクルードガードはよく使うので
知らなかったら検索して。
989デフォルトの名無しさん:04/05/03 16:35
質問です。

MFCで自分で考えたイベントをDLLで発生させ、別の場所でそれを受信するようなのを作りたいのですが
どうすればいいのでしょうか?
990985:04/05/03 16:48
>>987
返答ありがとうございます。
class Hoge;をヘッダに記したところ随分エラーの数は減りました。
インクルードガードも取り入れました。

しかし、肝心のエラーが消えません。クラスが未定義となってしまいます。
クラスを定義するヘッダの中で、そのクラスに別のクラスの変数メンバを
加えようとしてるとこで起きてしまいます。
メインのソースファイルの方でそのヘッダより前にクラスは宣言してるはずなんですが…。
まさかとは思うが、
class A { class B b};
class B { class A a};
みたいなことはやってねーだろーな。
992985:04/05/03 17:13
>>991
それはやってません。
class A{class B b};
class B{func(class A *a)};
こんな感じです。

ちょっと逸れますが、
991の用にやってはいけない理由というのを考えてみたのですが、思いつきません。
よければ、教えてもらいたいのですが…。
その場合、
A.h: include B.h class A { B b; };
B.h class B{ func(class A*a); };
B.cpp: include A.h, B.h B::func( A*a){}
ってするのは判るよな?
994デフォルトの名無しさん:04/05/03 19:49
記念カキコ v(^-^*)
995 ◆Manna2uCLg :04/05/03 20:40
残り少ねーじゃねーか。

ってことで、次スレ立ててくる。
996 ◆Manna2uCLg :04/05/03 20:59
ごめん、スレ立て規制されてた…
誰かたのんます…

ちなみに当方 plala…
……あー。
★初心者にVisual C++を教えるスレ★ Part12
http://pc5.2ch.net/test/read.cgi/tech/1083585833/

ほい
こっそり1000でもとってよっと。
1000
999!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。