C1189 #error: <mutex> is not supported when compiling with /clr or /clr:pure

C1189 #error: <mutex> is not supported when compiling with /clr or /clr:pure

我有一个包含托管 C++ 类 和非托管 C++ 类 的 C++ 库,因此该库是使用 /clr 支持编译的。我需要在非托管端进行一些线程安全锁定,但如果我包含我有编译器错误:

C1189 #error: <mutex> is not supported when compiling with /clr or /clr:pure

我该如何解决这个问题?花了几个小时搜索,但只找到了非常旧的信息。使用 Visual Studio 2017 和 C++11 语言标准。

混合模式项目可以包含非托管 C++ 和托管 C++/CLI 代码。由于 <mutex>“使用 /clr 编译时不支持 ”,需要它的代码需要移动到单独的 .cpp 文件集中进行编译没有 /clr。这可以通过向项目添加一个新的 .cpp 文件,然后更改 属性 Pages / Configuration Properties / C/C++ / General / Common Language RunTime Support 来完成 设置从 /clrnone 对于特定的 .cpp 文件(not整个项目)。

  • 必须将代码移动到一个单独的文件集,以便在没有完整 /clr 的情况下进行编译。仅将代码放在使用 /clr 编译的文件中的 #pragma unmanaged 块中是行不通的。

  • 如果项目使用预编译头,新文件必须设置为使用预编译头,因为那个应该 在使用和不使用 /clr 构建的对象之间共享。