【发布时间】:2011-04-09 16:25:48
【问题描述】:
我已经从 vs2010 构建并安装了我的服务到 64 位机器上。
当我的服务引用 32 位 dll(准确地说是 spssio32.dll)时,我的问题就出现了 - 我在事件查看器中收到错误:"System.BadImageFormatException: 尝试加载带有格式不正确。(HRESULT 异常:0x8007000B)"
如有任何帮助,我们将不胜感激。
问候, 拜伦·科布。
【问题讨论】:
我已经从 vs2010 构建并安装了我的服务到 64 位机器上。
当我的服务引用 32 位 dll(准确地说是 spssio32.dll)时,我的问题就出现了 - 我在事件查看器中收到错误:"System.BadImageFormatException: 尝试加载带有格式不正确。(HRESULT 异常:0x8007000B)"
如有任何帮助,我们将不胜感激。
问候, 拜伦·科布。
【问题讨论】:
您的服务代码是用 .NET 语言编写的吗?如果是这样,您需要将其标记为目标x86 而不是Any CPU(通过项目属性/构建/平台目标)。
(默认情况下,.NET 代码以Any CPU 为目标,这意味着在 64 位机器上它将编译为 x64 机器代码。因为这样的 64 位代码无法加载 32 位 DLL,这可能会导致失败就像你看到的那样。如果代码依赖于 32 位 DLL,即使在 64 位机器上,它也需要始终编译为 32 位机器代码,因此将目标平台设置为 x86。)
【讨论】:
您可以使用 COM 代理
http://www.dnjonline.com/article.aspx?id=jun07_access3264
另一种变体是生成一个外部 32 位服务器进程并向它和您的 64 位应用程序添加一个 .NET 远程处理接口,以便您可以使用 .NET 远程处理进行进程间通信。
【讨论】: