COM互操作性在X64系统上

.NET Framework为开发人员提供了编译汇编的强大选项,用于编译现在标准的X64平台或传统X32平台。这不是大多数现代软件的问题,因为典型的机器基于64位架构,大多数装配符合64位系统。

但是,在使用32位COM库编译64位组件时,挑战会出现,这些组件用32位互操作性包装器DLL向标准.NET MIDL模型“将”二进制COM结构“转换为”二进制COM结构。在这种情况下,虽然程序集会在没有错误的情况下编译成功,但运行时将失败,并使用入口点或“未找到文件”异常。

32位组件和可执行文件将在64位系统上正常运行,但基于X64的解决方案无法在32位系统上运行。通常,由于大多数开发人员将在任何CPU留下默认配置构建选项,因此在开发应用程序和解决方案时,这些问题都不是真正的关注。可能有时需要开发集成到外部应用程序(如Dynamics GP)的解决方案,即其核心仍为32位。在这种情况下,将编译模式设置为x32是完全合理的。这将在X32系统上预期工作。如果组装不包含任何COM inderops,它甚至会在X64系统上工作。尽管如此,如果在具有基于X32的COM引用的X64系统上执行,它将生成运行时错误。如果您尝试通过将编译切换为x64来纠正,它将在32位系统上失败,并且可能仍可能使用32位COM引擎在64位平台上生成运行时错误。

因此,为了真正开发与32位或64位处理无关的平台的程序集,使用  任何CPU  编译依赖于32位COM互操作的解决方案时的解决方案。

发表评论