2012-07-23 111 views
1

在嵌入一些老的Crystal Reports瀏覽器這個MFC應用程序,在退出時我得到一個崩潰 (the instruction at ... referenced memory at ...; the value could not be "read").崩潰在退出應用

不能在調試模式下運行,因爲它只再現其中沒有安裝Visual Studio中的PC上,我沒有備用許可證。

我已經添加了一些記錄和FreeLibrary則調用卸載u2dpost.dll失敗(手柄變爲無效不知)。

崩潰似乎是從失敗卸載DLL一些代碼。

我可以強制卸載嗎?我願意避免碰撞。

調用exit(0)(醜陋的,因爲它是)仍然會導致崩潰。

該指令的地址與應用程序打開的報告相關。

在另一臺電腦(同XP SP3操作系統,同樣的水晶的DLL,剛剛的Oracle 11g VS 10G),其中調試可以很容易(安裝Visual C++),崩潰不會重現。

在問題電腦這一切發生的時候,如果我開始導出對話框(然後將其關閉或實際出口,這都沒有區別)。

我該怎麼做?

編輯:

我發現在這個差:

IDatabasePtr PDB =製備型> GetDatabase();

pDB-> AddRef(); //用這行代碼在XP電腦上崩潰;沒有它在我的Windows 7工作站上崩潰

(Win &崩潰在CCmdTarget :: OnFinalRelease()最後一行:刪除此;) 有什麼建議嗎?

+1

您確定有問題的計算機上需要安裝Redistributable嗎? – SChepurin 2012-07-23 13:06:30

+0

是的,一切正常,這只是退出崩潰 – user581243 2012-07-23 13:26:37

+1

您是否嘗試遠程調試:http://msdn.microsoft.com/en-us/library/y7f5zaaa.aspx – IronMensan 2012-07-23 13:40:05

回答

0

如果它有幫助的話,我的遺留軟件就會面臨同樣的問題。

我測試了我的sw的調試版本,並使用DebugDiag來捕獲崩潰,結果發現當(釋放)某些水晶報告接口(自動通過com析構函數)時,它崩潰了。所以我最終添加了一個額外的AddRef到有問題的接口。只有當Windows的版本是7或以上。