c++ - 退出应用程序时崩溃

标签 c++ windows dll crystal-reports

在这个嵌入了一些旧的 Crystal Reports 查看器的 MFC 应用程序上,退出时我遇到了崩溃 (位于 ... 的指令引用了位于 ... 的内存;无法“读取”该值)。

无法在 Debug模式下运行,因为它只能在未安装 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 电脑上崩溃;没有它,它会在我的 Windows 7 工作站上崩溃

(Win 和崩溃在 CCmdTarget::OnFinalRelease() 最后一行:删除它;) 有什么建议吗?

最佳答案

如果有帮助的话,我在使用我们的旧版软件时遇到了同样的问题。

我测试了我的 sw 的调试版本并使用 DebugDiag 来捕获崩溃,结果发现当(发布)一些 Crystal 报表接口(interface)(由 com 析构函数自动)时,它崩溃了。所以我最终向有问题的接口(interface)添加了一个额外的 AddRef。仅当windows版本为7或以上时。

关于c++ - 退出应用程序时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11612451/

相关文章:

android - 如何在没有 Android Studio 的情况下仅使用 SDK 工具为 React-Native 设置 Android?

c++ - WinAPI - GetLastError 在通过 COM ATL DLL 调用时始终返回 0

c++ - iOS 项目 : If I use C++ (C++11) anywhere in my project, 我必须禁用模块吗?

android - libuv(node.js's async lib) 可以在Apple IOS/Android 上运行吗?

c++ - 如何生成 setter 和 getter,并使用 C++ 预处理器定义 Q_PROPERTY()

c++ - 如何确保 std::thread 是在多核中创建的?

c++ - 让 Windows 尝试读取文件

windows - Windows 的 CVDisplayLink 替代品?

c++ - 如何仅使用 OpenCV C++ 中的 *.lib 文件而不是 *.dll

c# - 当前上下文中不存在名称 'myClassInstance'