我正在运行一个引用C ++ \ CLI包装器项目的C#应用程序,该项目依次引用依赖于Boost 1.47库的本机c ++项目(链接到表单文件... vc100-mt-gd-1_47.lib)
所有库都是静态链接的,一切都编译得很好。执行C#应用程序会导致异常: “...不是有效的Win32应用程序。(HRESULT异常:0x800700C1)。”声称在某处缺少某种依赖。
C#应用程序配置为x86平台,而所有其他项目都是Win32,包括boost的二进制文件。
编辑:在添加使用Boost库之前,它就是DID工作
如何追踪问题?
答案 0 :(得分:1)
众所周知的问题。原因是Boost :: Thread中使用的线程本地存储(TLS)。要修复它,您应该禁用libboost_thread-vcXXX-mt-1_XX.lib并强制链接器将您的C ++ / CLI程序集与boost_thread-vcXXX-mt-1_XX.lib链接(boost_thread-vcXXX-mt-1_XX.dll的存根)
或者您可以创建自己的DLL并将其与libboost_thread-vcXXX-mt-1_XX.lib链接。然后,您可以将C ++ DLL与C ++ / CLI程序集链接起来。
见
答案 1 :(得分:0)
前几天试图在我的Visat 64位PC上运行IIS应用程序时遇到了这个令人讨厌的错误:
错误:不是有效的Win32应用程序。 (HRESULT异常:0x800700C1)
解决方案:
在IIS 7中单击“应用程序池”({machine_name}下的左侧) 选择您的应用程序池,然后单击右侧的“高级设置”。 列表中的第二个设置:启用32位应用程序 - 必须设置为True。