1

古い Crystal Reports ビューアを組み込んだこの MFC アプリケーションでは、終了時にクラッシュします。 (the instruction at ... referenced memory at ...; the value could not be "read").

Visual Studio がインストールされていない PC でしか再現できないため、デバッグ モードで実行できず、使用する予備のライセンスもありません。

ロギングを追加したところ、u2dpost.dll をアンロードする FreeLibrary 呼び出しが失敗しました (何らかの理由でハンドルが無効になりました)。

クラッシュは、アンロードに失敗した dll の一部のコードにあるようです。

強制的に降ろすことはできますか?私はクラッシュを回避することにオープンです。

呼び出しexit(0)(それ自体は醜い) は依然としてクラッシュにつながります。

命令のアドレスは、アプリケーションが開いているレポートに関連して一定です。

別の PC (同じ XP SP3 オペレーティング システム、同じ Crystal dll、Oracle 11g と 10g のみ) では、デバッグが容易である (Visual C++ がインストールされている) 場合、クラッシュは再現されません。

問題のある PC では、エクスポート ダイアログを開始すると、常に発生します (その後、ダイアログを閉じるか、実際にエクスポートしても、違いはありません)。

ここからどうすれば進めますか?

編集:

私はこれに違いを見つけました:

IDatabasePtr pDB = pRep->GetDatabase();

pDB->AddRef(); // この行では、XP PC でクラッシュします。それがないと、Windows 7 ワークステーションでクラッシュします

(勝利とクラッシュは CCmdTarget::OnFinalRelease() の最後の行にあります: これを削除してください;) 何か提案はありますか?

4

1 に答える 1

0

それがまったく役立つ場合、私はレガシーソフトウェアの1つで同じ問題に直面しています.

sw のデバッグ バージョンをテストし、DebugDiag を使用してクラッシュをキャプチャしたところ、Crystal レポート インターフェイスを (com デストラクタによって自動的に) (リリース) すると、クラッシュすることが判明しました。そのため、問題のあるインターフェイスに追加の AddRef を追加することになりました。Windowsのバージョンが7以上の場合のみ。

于 2016-06-21T11:55:50.030 に答える