古い 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() の最後の行にあります: これを削除してください;) 何か提案はありますか?