2011-10-05 39 views
0

我的代码在32位系统上正常工作。我只是简单地引用读取/写入xml的COM组件。所以,当我收到下面的错误时,我尝试在'X86'中编译,然后在64位系统上运行。System.OutOfMemoryException使用32位COM组件编译代码并在64位系统上使用时

以下异常:System.OutOfMemoryException的:创建COM组件的CLSID为{59D5FDED-B01B-47F4-BBBC-56941A2F4873}从IClassFactory的失败,原因是以下错误的实例:8007000E。

+0

你可以发布你使用的界面吗?有一个很好的机会,它使用'int'或其他数据类型的指针大小错误的地方。 – Polynomial

+0

另外,当有一个专用于处理XML的完整.NET名称空间时,为什么使用COM组件编写XML? – Polynomial

+0

这是一个已经存在了10年以上的主要服务器应用程序。它需要部署在64位服务器上。我现在使用.NET命名空间来满足我所有的XML需求。 – jmac

回答

0

随机建议:

  • 连接调试本机,看看是否有有趣的本土例外。
  • 尽量让你的exe“不需要大内存空间”。
  • 验证应用程序是否加载为32位。
  • 尝试使用本机代码创建组件,以验证它是否已正确安装在系统上。

注意:如果您的COM组件使用MSXML处理XML,则将其加载到托管应用程序中不受支持,原因是内存管理之间存在不可兼容性。这不太可能是你所看到的原因,但更多的是一般性的参考。

+0

必须同意这种方法。在人们不得不考虑64位问题之前,任何COM组件都有可能被写入。他们所要做的就是假设一个指针的宽度是4个字节,并且会在64位机器上中断。这可能是离开COM组件并使用纯粹管理解决方案的好时机。 – Polynomial