5

这是重现错误的示例应用程序的链接:http : //sdrv.ms/17j2Ale

我有三个项目。一种是.NET 2.0 Windows Forms 应用程序(.NET App),一种是VB6 标准EXE 应用程序(VB App),另一种是VB6 ActiveX DLL(VB DLL)。.NET App 引用已注册的 VB DLL。这个 VB DLL 本质上是启动 Crystal Reports。VB 应用程序通过 Shell() 命令启动 .NET 应用程序。这是发生的事情:

如果我直接运行 .NET App,我可以毫无问题地打开 Crystal Reports 文档。但是,当 VB 应用程序通过 Shell() 命令启动 .NET 应用程序时,当 .NET 应用程序尝试打开 Crystal Reports 文档时,出现内存不足错误。

现在这是踢球者 - 这在 Windows XP 上有效,但是当我们尝试在 Windows 7 64 位中启动它时,我们遇到了这个问题。我确信必须有一个简单的解决方案。有接盘侠吗?

您可以跳到我缩小问题范围的更新 5。

更新:我还尝试创建第二个 .NET 2.0 Windows 窗体应用程序(.NET 启动器),并通过以下方式启动 .NET 应用程序:

Process.Start(@"C:\Path\OtherApp.exe");

当我尝试在 .NET 应用程序中打开 Crystal Reports 文档时,它仍然给我同样的内存不足错误。

更新2:由于更新 4 而被删除

更新3:所以今天我发现 .NET App 在直接启动时能够打开报告的原因是因为我在 Visual Studio 中启动它。当我在 Visual Studio 之外尝试可执行文件时,错误返回。我注意到 Visual Studio 自 2005 年起开始使用 vshost.exe 启动 Windows 应用程序以加快调试启动速度:http: //blogs.msdn.com/b/dtemp/archive/2004/08/17/215764。 aspx 当我禁用 vshost 功能时,返回内存不足错误。所以我想问题是,这个 vshost 进程在做什么才能让它在 Windows 7 上运行?

更新4:我能够使用调试信息编译 VB6 DLL,并将源和调试信息加载到 Visual Studio 中,并在 .NET 应用程序执行 VB6 代码时逐步执行。Out of Memory 异常来自这一行:

Dim myForm As frmTheForm

Set myForm = New frmTheForm 'OOM Error right here

所以在 vshost.exe 里面,这个表单可以初始化,但不能没有它。

更新5:我已将问题范围缩小到 Crystal Reports ActiveX 查看器。我从头开始了一个新的 VB ActiveX DLL 项目,并且只从一个表单开始。这在各个方面都有效。然后我添加了 Crystal ActiveX Report Viewer Library 11.5 - 错误返回了!它绝对是报表查看器。有人告诉我,这个问题可以通过简单的注册表调整来解决。

更新6:我使用了 Sysinternals 的 Procmon.exe 并生成了一个日志文件,可以在这里找到:

http://sdrv.ms/194aO7A

4

3 回答 3

1

我找到了内存不足错误的解决方法;但是,这不是一个允许的解决方案。显然,这个问题在 crviewer.dll 的未来版本中得到了解决,但 Uher 先生在他对我的问题的回答中明确表示:http://scn.sap.com/thread/3405856我们不允许使用由于许可限制,11.5 之后的版本。这似乎是他收到的一个常见问题。不幸的是,我们被迫接受我们将应用程序升级到 .NET 的响应。如果其他人有足够的冒险精神来尝试解决内存不足异常,我很乐意将上面的示例项目留给任何想要冒险的人。祝任何其他感受到我对 CR 11.5 互操作支持的痛苦的人好运。

于 2013-08-13T14:16:34.737 回答
1

当我将 32 位 C/C++-Dll 与在 64 位 Windows 上运行的 .NET 代码一起使用时,我遇到了这样的问题。如果您的 .NET 项目将“任何平台”作为目标,那么运行时会在 64 位 Windows 上将代码编译为 64 位,在 32 位 Windows 上,我认为您不会有任何问题。

你必须将你的目标平台设置为“x86”,你写道你这样做了。请确认您的 .NET 解决方案中的所有 .NET 项目都设置为 x86 作为目标。

Crystal Reports *.dll 应该是 32 位 COM *.dll,VB6 *.dll 也是如此。

于 2013-08-01T08:37:02.557 回答
0

不确定这些信息是否会有所帮助,但我过去在使用水晶和 Web 表单应用程序时也遇到过类似的问题。我通过确保应用程序池选中了“启用 32 位应用程序”选项来解决它?您可以在高级设置 -> 常规...下找到它。

于 2013-07-31T23:27:11.847 回答