【问题标题】:Services 32bit dlls on 64bit machine在 64 位机器上服务 32 位 dll
【发布时间】:2011-04-09 16:25:48
【问题描述】:

我已经从 vs2010 构建并安装了我的服务到 64 位机器上。

当我的服务引用 32 位 dll(准确地说是 spssio32.dll)时,我的问题就出现了 - 我在事件查看器中收到错误:"System.BadImageFormatException: 尝试加载带有格式不正确。(HRESULT 异常:0x8007000B)"

如有任何帮助,我们将不胜感激。

问候, 拜伦·科布。

【问题讨论】:

    标签: dll service 64-bit 32-bit


    【解决方案1】:

    您的服务代码是用 .NET 语言编写的吗?如果是这样,您需要将其标记为目标x86 而不是Any CPU(通过项目属性/构建/平台目标)。

    (默认情况下,.NET 代码以Any CPU 为目标,这意味着在 64 位机器上它将编译为 x64 机器代码。因为这样的 64 位代码无法加载 32 位 DLL,这可能会导致失败就像你看到的那样。如果代码依赖于 32 位 DLL,即使在 64 位机器上,它也需要始终编译为 32 位机器代码,因此将目标平台设置为 x86。)

    【讨论】:

    • 我正在使用 Visual Studio 2010,我的版本中的构建模式设置为 x86。
    • 啊 - 我的解决方案设置为编译为任何 CPU,即使我在 x86 中构建它也使用解决方案属性。它现在可以工作了 - 谢谢,你是一个救生员!
    【解决方案2】:

    您可以使用 COM 代理

    http://www.dnjonline.com/article.aspx?id=jun07_access3264

    另一种变体是生成一个外部 32 位服务器进程并向它和您的 64 位应用程序添加一个 .NET 远程处理接口,以便您可以使用 .NET 远程处理进行进程间通信。

    【讨论】:

      猜你喜欢
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 2011-09-05
      • 2012-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多