我已经构建了一个桌面应用程序,使用他们提供的.dll控制一块第三方硬件(我相对确信这是64位.dll,因为它在使用AnyCPU
编译的VS2015中运行正常或者x64
)。当用作桌面应用程序时,一切都按预期工作。
我现在正尝试将这些命令公开为WCF服务,以允许客户端应用程序远程控制硬件。当客户端连接时,我得到:
mscorlib.dll中发生了'System.BadImageFormatException'类型的异常,但未在用户代码中处理
其他信息:由于以下错误,检索具有CLSID {58DB561E-0186-11D5-BBB6-00508B35B332}的组件的COM类工厂失败:800700c1不是有效的Win32应用程序。 (HRESULT异常:0x800700C1)。
如果存在此异常的处理程序,则可以安全地继续该程序。
我引用与桌面应用程序相同的.dll,并调用相同的函数。客户端也是64位应用程序(当前仍在同一台机器上运行)。客户端服务之间的通信已经可以通过简单的Hello World功能进行验证。
我错过了什么?为什么.dll在一个案例中顺利运行而在另一个案例中不顺利?
修改
我可以从中排除客户端应用程序,因为我可以使用从VS2015启动的WCF测试客户端应用程序中的invoke
来触发错误。这绝对是服务应用程序的错误。另外,我可以将其编译为32位或64位,并且它们都提供System.BadImageFormatException
。
答案 0 :(得分:0)
嗯,对于其他可能发现自己处于这种情况的人来说,这似乎是如此:
第三方.dll同时包含32位和64位版本。我在一个版本上运行regsvr.exe
但在另一个版本上没有运行(此时我不确定哪个是哪个版本)。它们的名称相同,但位于不同的目录中,似乎引起了一些混乱,并且允许我引用.dll但在调用它时崩溃。
神秘解决了 - 它始终是小细节。