.net 错误<;互斥锁>;使用/clr或/clr:pure编译时不支持 我有一个C++ DLL,我将把它称为Dll,我用过: #include <mutex> #包括

.net 错误<;互斥锁>;使用/clr或/clr:pure编译时不支持 我有一个C++ DLL,我将把它称为Dll,我用过: #include <mutex> #包括,.net,c++-cli,clr,.net,C++ Cli,Clr,Dll As属性设置为“无公共语言运行时支持”,并成功构建 我有另一个Dll B,它在引用中包含Dll A。 Dll Bs属性设置为:“公共语言运行时支持(/clr)”,因为它包含C++/CLI代码 当我构建DLL B时,出现以下错误: C:\Program Files(x86)\Microsoft Visual Studio 11.0\VC\include\mutex(8):致命错误C1189:#使用/clr或/clr:pure编译时不支持错误。 我知道我不能包含在CLR支持的DLL中,但有没

Dll As属性设置为“无公共语言运行时支持”,并成功构建

我有另一个Dll B,它在引用中包含Dll A。 Dll Bs属性设置为:“公共语言运行时支持(/clr)”,因为它包含C++/CLI代码

当我构建DLL B时,出现以下错误: C:\Program Files(x86)\Microsoft Visual Studio 11.0\VC\include\mutex(8):致命错误C1189:#使用/clr或/clr:pure编译时不支持错误。


我知道我不能包含在CLR支持的DLL中,但有没有办法避免引用包含它的DLL的问题?

在托管代码中使用是非法的,CLR不能保证托管线程在专用操作系统线程上运行。从技术上讲,两个线程可以共享同一个操作系统线程,这使得互斥锁失败得很惨。实际上,这不太可能发生,因为没有已知的CLR主机实现此功能。当然,不能保证有未知的。绕过编译错误的唯一方法是将本机代码打包在一个C++源文件中,该文件实际上没有编译,CLC++代码从不看到互斥体。但是,我的整个DLL实际上没有编译,也没有与DLL,它的.h文件有关。如果客户机代码实际上不使用互斥锁,则需要对其进行重构,以使实现细节不那么明显。你的代码片段帮不了我们当然帮不了你。