异常HRESULT:0x800700C1执行c#应用程序时使用boost引用本机c ++库

时间:2011-11-11 10:48:46

标签: visual-studio-2010 boost c++-cli

我正在运行一个引用C ++ \ CLI包装器项目的C#应用​​程序,该项目依次引用依赖于Boost 1.47库的本机c ++项目(链接到表单文件... vc100-mt-gd-1_47.lib)

所有库都是静态链接的,一切都编译得很好。执行C#应用程序会导致异常: “...不是有效的Win32应用程序。(HRESULT异常:0x800700C1)。”声称在某处缺少某种依赖。

C#应用程序配置为x86平台,而所有其他项目都是Win32,包括boost的二进制文件。

编辑:在添加使用Boost库之前,它就是DID工作

如何追踪问题?

2 个答案:

答案 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。