トップページ⇒tech
1001コメント333KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2007/01/10(水) 00:00:39
1 : ◆Manna2uCLg :2005/04/15(金) 13:33:14
Visual C++入門者・初心者からの質問を、
お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

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

質問の仕方については次のページが大変参考になります。
http://www.hyuki.com/writing/techask.html
http://myu.daa.jp/osiete/

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

過去スレ、関連スレなどは>>2-5。
09519472007/04/06(金) 02:30:58
>948-950
返信遅れました。
質問が漠然としすぎて混乱させてしまったようで申し訳ありません。
私が知りたかったのはまさに>950さんのコードです。
ありがとうございます。
0952雨とむり2007/04/06(金) 10:22:52
VC++5.0で開発したEXEを
WindowsVistaに入れて起動させようとしたら、
動きませんでした。

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

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

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

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

ちなみに通知らしき物は来なかったです。
0955デフォルトの名無しさん2007/04/06(金) 11:37:59
>>954
詳細見てエラーの起きたアドレス調べて
元の開発環境でそのアドレスがどこか調べるとか
リモートデバッグするか、Vista上でデバッグするとか
0956デフォルトの名無しさん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
0957雨とむり2007/04/06(金) 11:49:26
>>955
>>956

ありがとうございます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


うで
す

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

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

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

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

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

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

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

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

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

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

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

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

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

というかこの手続きは何をしているのでしょうか。
0998デフォルトの名無しさん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
としたらできてるっぽい。

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