在这个嵌入了一些旧的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()的最后一行:删除这个;) 有什么建议吗?
答案 0 :(得分:0)
如果它有帮助,我将面临与我们的旧版软件相同的问题。
我测试了我的sw的调试版本,并使用DebugDiag来捕获崩溃,结果发现当(释放)一些水晶报告接口(由com析构函数自动)时,它崩溃了。所以我最后添加了一个额外的AddRef到有问题的界面。仅当Windows的版本为7或更高时。