プロが教えるわが家の防犯対策術!

学校PCで作成しているC++ MFCアプリを自宅PCでも修正できるよう同じくVisual Studioを買ったのですが、同じソリューション、同じソースなのに家PCでだけデバッグ時にエラーが出ます。

学校環境:デスクトップ
Windows XP Pro SP2
Visual Stuidio 2005 Academic Edition

家環境:ノート
Windows XP Pro SP2
Visual Stuidio 2005 Academic Edition
(同じ)

プロジェクトのディレクトリごとコピーし、ソリューションファイルを開いてデバッグすると以下のダイアログが出ます。
Debug Assertion Faild!
Program: c:\プログラム名\debug\プログラム名.exe
File:f:\rtm\vctools\vc7libs\ship\atlmfc\src\occcont\cpp
Line:950
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
中止 再試行 無視

環境は同じはずですが…。家PCにFドライブはありません。学校PCには仮想ドライブとしてFはありますが何もマウントしていません。家PCのVC++で簡単なMFCアプリを作ると無事デバッグ出来ます。このままではVS買った意味がありません…。

「ソリューションのリビルド」「(プログラム名)のリビルド」してから「デバッグ」してもダイアログが発生します。両リビルド自体にはエラーはでません。デバッグ時のみ出ます。

A 回答 (5件)

OLE関連のコントロールを使っていませんか?



学校PCではそのOLE関連がレジストリに登録されているが自宅PCでは登録されていないってことでは無いかと
    • good
    • 0
この回答へのお礼

解決しました!!!!
4番の回答でそういえば…と思いあるソフトをインストールしたらデバッグが通りました!!!
実はIPカメラの制御ソフトを作成していたのですが、メーカーの純正ビューワーソフトをインストールしたところ成功しました。そのソフトはDirectXも絡んでいるようなので、DirectXを入れるだけでも解決するのかは未検証ですが、学校PCにはどれにもビューワーソフトを入れていたのが盲点でした。それにもっと早く気づき補足しておけばみなさんを悩ませずすんだかもしれません。

redfox63様、粘り強い的確なご回答ありがとうございました。

お礼日時:2007/10/03 19:23

これ、OSあってますか?



>家環境:ノート
>Windows XP Pro SP2
>Visual Stuidio 2005 Academic Edition
(同じ)

実際はWindows VistaでVista用のアップデートモジュールを
あててないとかいうのじゃないですよね・・・

この回答への補足

2の補足にVistaビジネスの記述をしたので混乱を招いたかもしれませんが、当初はXP SP2です。
一旦Vistaビジネスをクリーンインストールしましたが現在はまたXPに戻しました。

補足日時:2007/10/03 15:49
    • good
    • 0

アサートが起きた際に『再試行』をクリックすると VSのIDEに制御が移ります


ここで 呼び出し履歴などでアプリケーションレベルまで戻ってどこから呼び出された命令が不具合を起こしているのか確認してみましょう

学校PCでMFCウィザードが吐いたスケルトンなら自宅PCでうまく動作するのであれば問題のプロジェクトの部品(コントロールなど)が原因のように思います

動的にコントロールを読み込むLoadLibraryなどを使っていませんか

この回答への補足

>アサートが起きた際に『再試行』をクリックすると VSのIDEに制御が移ります
とすると、「occcont.cpp」の
ASSERT(IsWindow(pTemp->m_hWnd));
という記述の行にブレークポイントが指定されます。
そしてこの行をそのまま検索すると
MSDNのページで「
Visual C++ 6.0 でコンパイルされた ActiveX コントロールが、Visual C++ 2005 で開発されたプロジェクトのダイアログ ボックスに埋め込まれると、プログラムが実行時にアサートする原因になる場合があります。このような場合、Visual C++ 2005 を使用して ActiveX コントロールをコンパイルし直します。アサートは、occcont.cpp ファイルのソース内の ASSERT(IsWindow(pTemp->m_hWnd)) 行で発生します。

というのが見つかりました。これかな?とは思います。
改めて、学校と家のVSのバージョンを確認しましたが同じようです。なのに家でだけ動かない…。MSDNに目を通しましたが、いまいち解決策が見つけられません…。エクスポートするみたいなウィザードがあれば嬉しいのですが。
>ActiveX コントロールをコンパイルし直します。
には、リビルドであってるような気がしますが動きません。

>呼び出し履歴などでアプリケーションレベルまで戻ってどこから~
申し訳ないです。スキルがそこまで高くありません…。

補足日時:2007/10/03 11:01
    • good
    • 0

先生に確認してみましょう


F:\rtm\vctools … とあるので何かライブラリーを使っているようですよ

作成したプロジェクトは VS2005標準のテンプレートからなのでしょうか?
先生がカスタムテンプレートを作成している可能性はありますよ
または 使用しているコントロールに特殊な初期化処理が必要だとか
ライブラリ(DLL等)のエラー処理がしっかりやっていないだとか

この回答への補足

確かに、ソース(ソリューションファイルを含むディレクトリ)は前任者から別メディアからディレクトリごとコピーして引き継いだもので、1から自分で構築したものではありません。

学校PCは春にXP、VSをクリーンインストールして、適当なディレクトリに件のソースをD&Dで持ってきて修正しています。ここまでは何の問題も発生していません。なのでライブラリーを参照…という絡みの問題ではないような気がします。

追加情報ですが、学校にある別のPC(VSが入ってるノート)にUSBメモリでディレクトリをコピーしてデバッグしてみましたがこれは普通に通りました。

じゃあこの家PCが問題?と行き着きますが、XP入れなおし、VS入れなおしでも解決しませんでした。謎です。

さらに、Vistaビジネス入れなおし、VS入れなおししました。これでもf:\がどうこうと言って止まります。

補足日時:2007/10/02 23:10
    • good
    • 0

まずは、Debug モードで「ソリューションのリビルド」を実行してみてください。



それでも駄目な場合、一度ソリューションを閉じた後、.sln ファイルと同じフォルダにある .ncb ファイルを削除してから再度「ソリューションのリビルド」を実行してみてください。

# 重箱の隅
# Release ビルドのことを「リビルド」とは言わないので注意。
# Release Build と Rebuild は区別しましょう。

この回答への補足

最初の回答ありがとうございます。
まず、ReleaseからDebugに変更するとVSが固まります。
ご指導のとおり、.ncbを削除するとDebugが選択できるようになりました。その状態でソリューションのリビルドすると正常終了します。
そしてデバッグすると…例のダイアログが出て止まりました。
(プログラム名)のリビルドでも同じです。

#ReleaseとDebugの違い、リビルドはぼやっとはわかります。
#ご指摘ありがとうございます。

補足日時:2007/10/02 23:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!