退出应用程序时崩溃

时间:2012-07-23 12:22:14

标签: c++ windows dll crystal-reports

在这个嵌入了一些旧的Crystal Reports查看器的MFC应用程序上,退出时出现崩溃 (the instruction at ... referenced memory at ...; the value could not be "read").

无法在调试模式下运行,因为它只能在没有安装Visual Studio的PC上重现,而且我没有备用许可证可供使用。

我添加了一些日志记录和FreeLibrary调用以卸载u2dpost.dll失败(句柄在某种程度上变得无效)。

崩溃似乎是来自dll的一些无法卸载的代码。

我可以强制卸货吗?我愿意避免崩溃。

调用exit(0)(丑陋)仍会导致崩溃。

指令的地址与应用程序打开的报告有关。

在另一台PC上(相同的XP SP3操作系统,相同的Crystal dll,只有Oracle 11g与10g),调试很简单(安装了Visual C ++),崩溃不会重现。

在问题PC上,它一直在发生,如果我启动导出对话框(然后关闭它或实际导出,它没有区别)。

我如何从这里开始?

编辑:

我发现了一个不同之处:

IDatabasePtr pDB = pRep-> GetDatabase();

pDB->的AddRef(); //用这条线它在XP电脑上崩溃了;没有它它在我的Windows 7工作站上崩溃

(Win&崩溃在CCmdTarget :: OnFinalRelease()的最后一行:删除这个;) 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果它有帮助,我将面临与我们的旧版软件相同的问题。

我测试了我的sw的调试版本,并使用DebugDiag来捕获崩溃,结果发现当(释放)一些水晶报告接口(由com析构函数自动)时,它崩溃了。所以我最后添加了一个额外的AddRef到有问题的界面。仅当Windows的版本为7或更高时。