VC++2005 XP_Pro64bit
ある関数の引数に構造体を設定して値渡しにして
デバッグで☆の所で確認するとrect2の値がrectと違います。
そのまま1行送るとrect3にはrectと同じ値が正しく設定されるのです。
関係あるのかどうかも解りませんが今回初めて64bitのプログラムで
何かの設定が悪いのか正常な動作なのか
rect2の値が変わる原因が解らず困っています
何か情報ありましたらお願いします
手順は次の通りです
ダイアログベースでプロジェクトを新規作成
以下の関数を追加
void CDlg::OnBnClickedButton1()
{
RECT rect;
rect.top=10;
rect.bottom=20;
rect.left=30;
rect.right=40;
Test(rect);
}
void CDlg::Test(RECT rect2)
{
RECT rect3;
☆ rect3=rect2;
}
64bitでビルド
停止した時点ではその行は実行されてないから(rect2も未評価)じゃなくて?
気になるなら TRACE でも仕掛けりゃいいじゃない。
早速の返信ありがとうございます
TRACE入れてみました
void C***Dlg::Test(RECT rect2)
{
RECT rect3;
TRACE(top=%d\n,rect2.top);
TRACE(bottom=%d\n,rect2.bottom);
TRACE(left=%d\n,rect2.left);
TRACE(right=%d\n,rect2.right);
☆ rect3=rect2;
}
結果は以下のようにウォッチではおかしな値ですが
TRACEには正常値が出力されました
デバッガの表示がおかしいだけのようですね?
ウォッチデータ
rect2 {top=0 bottom=-858993460 left=1239856 right=-858993460}
rect3 {top=10 bottom=20 left=30 right=40}
TRACEの出力データ
top=10
bottom=20
left=30
right=40
ウォッチデータで
rect2の確認時点を教えてください。
なんか、大昔に似たような目にあったような。
そんときは、コンパイラが16bit->32bitに移行する時期で
たしか、スタックの評価が間違っていた。
コンパイラがアップグレードしたらよくなったけど、
詳しいバージョンは忘れた。
ひょっとすると、同じ事が起こっているかも知れません。
て、ことで、役に立たないスレですみません(vv;)。
もう、すでにやってるかもしれませんが
VCを一度落とし、中間ファイルを全部消してみて
完全にリビルドしなおしてみてはどうでしょうか?
Jason様、仲澤@失業者様、rin様
返信ありがとうございます
rect2の確認時点は☆の2箇所です
Test()のスコープ内でずっと同じ値でした
void C***Dlg::Test(RECT rect2)
{
RECT rect3;
TRACE(top=%d\n,rect2.top);
TRACE(bottom=%d\n,rect2.bottom);
TRACE(left=%d\n,rect2.left);
TRACE(right=%d\n,rect2.right);
☆ rect3=rect2;
☆}
中間ファイルも消したと思いますがもう一度トライしてみます
プログラムの動作は問題ない雰囲気ですが
デバッグの際に不便だし気持ち悪いですね
うーーん、
VC++2005って64BIT OSに完全対応してましたっけ?
コンパイル等できてるだけで、マイクロソフトが保障してなかったような?
対応していればいいのですが、疑問です。
ぐぐってみると、VC++2005でマイクロソフトが保障しているのは
FrameWork 2.0以降のみいたいですね。
変数の説明もあるので、C/C++のみならいけそうです。
修正です
FrameWork 2.0以降のみいたいですね。
↓
FrameWork 2.0以降みたいですね。
ITO様、情報ありがとうございます
上記プログラムはMFCアプリケーションで作ってます。
VS2005SP1とFrameWork2.0SP2をインストールしてみましたが
現状変わらずです。
MicrosoftのHP彷徨ってみます
> VS2005SP1とFrameWork2.0SP2をインストールしてみましたが
> 現状変わらずです。
「MFCでなく、FrameWork2.0以降を使用した場合のみ保障している」
ということです。
参考サイト
http://msdn.microsoft.com/ja-jp/library/ms241064(VS.80).aspx
ITO様ありがとうございます
MFCについて記述されていないってことは
保証外ってことなんですね
それで動作的には一応動いてそうだけど
引数のウォッチがおかしくなったり
他にも何かあるかもしれないんですねぇ
MFCは64bit出来ないよって記述に行き当たるまで
さまよってしまいそうですがあきらめます
MFCは置いていかれるのかなー(涙
皆様ありがとうございました