我们有一个已经运行了一段时间的WebService,它上面有大约6个项目。
最近,我们必须支持C ++ 32位库,我测试过,我必须将项目的目标平台设置为x86,否则我将获得BadImageFormatException
。因此,这个新项目设置为在x86上编译,但其他所有项目都设置为AnyCPU。
发布WebService后,调用函数时出现错误Unable to find ?.dll
。
无论如何我可以将这个新项目添加为x86,而不必将我的WCF设置为x86,或者我做错了什么,这应该有用吗?
答案 0 :(得分:1)
可能但所有二进制文件(.exe-s和.dll-s)必须共享相同的目标平台才能工作。您无法将32位DLL加载到64位进程中,反之亦然。
如果您在IIS下托管您的Web服务,则应用程序池的目标平台会确定您可以加载哪种DLL。
如果在非托管DLL中导出函数,则P / Invoke声明也必须与目标平台匹配 - 具体而言,如果传递指针,则必须将这些函数正确映射到32/64位指针。 (通常IntPtr
负责处理这个问题。)如果你支持具有单一源代码的两个平台(编译成特定于平台的二进制文件),P / Invoke声明确实会成为可能的问题。
根据您尝试做的事情,您可能还需要处理特定于平台的参考。这个question有更详细的信息。