C# 使用32位COM组件编译代码并在64位系统上使用时System.OutOfMemoryException

C# 使用32位COM组件编译代码并在64位系统上使用时System.OutOfMemoryException,c#,.net,com,32bit-64bit,C#,.net,Com,32bit 64bit,我的代码在32位系统上运行良好。我只是引用了一个读取/写入xml的COM组件。因此,当我收到下面的错误时,我尝试在“X86”中编译,然后在64位系统上运行 发生以下异常:System.OutOfMemoryException:从IClassFactory创建CLSID为{59D5FDED-B01B-47F4-BBBC-56941A2F4873}的COM组件实例失败,原因是出现以下错误:8007000e。随机建议: 将调试器附加为本机,并查看是否存在有趣的本机异常 尝试使您的exe“不知道大内存

我的代码在32位系统上运行良好。我只是引用了一个读取/写入xml的COM组件。因此,当我收到下面的错误时,我尝试在“X86”中编译,然后在64位系统上运行

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

随机建议:

  • 将调试器附加为本机,并查看是否存在有趣的本机异常
  • 尝试使您的exe“不知道大内存空间”
  • 验证应用程序是否加载为32位1
  • 尝试使用本机代码创建组件,以验证该组件是否正确安装在系统上

注意:如果COM组件使用MSXML处理XML,则由于内存管理之间的不可映射性,不支持将其加载到托管应用程序中。它不太可能是你所看到的问题,但更多的是一般的引用。

因为C++的COM组件正在调用一个C语言库,而不是处理它所引发的异常。它很有可能使用
int
或其他大小不正确的数据类型作为指针。此外,当有一个完整的.NET命名空间专门用于处理XML时,为什么要使用COM组件来编写XML?这是一个已经存在10多年的主要服务器应用程序。它需要部署在64位服务器上。我现在使用.NET名称空间满足所有XML需求。代码中没有错误。我只是创建一个“查询”对象,然后初始化并设置一个xml事务。然后我读取id和site字段。它只有四行代码,在32位机器上工作。这被报告为Windows错误(错误#14),转换为托管异常类型。很难猜测它来自何处,但这通常是由Windows加载程序生成的错误。加载DLL时出错。必须同意此方法。在人们不得不考虑64位问题之前,任何COM组件都有可能是以这种方式编写的。他们所要做的就是假设一个指针有4个字节宽,它会在64位机器上中断。这可能是远离COM组件并使用纯托管解决方案的好时机。