本人想在Qt项目中使用c#的一些功能,Qt代码中原本用的std::mutex。pro文件添加上托管编译后,一编译就报错:std里面没有mutex.
一开始以为是std冲突,但是怎么改都没用,包括修改头文件,重命名变量,修改引用名空间的位置等,都是无用功。弄了老久,实在找不出问题,就使用vs2015打开Qt项目进行编译。
错误 C1189 #error: <mutex> is not supported when compiling with /clr or /clr:pure. (编译源文件 widget.cpp) softpro C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\mutex 9
网上找了找,大都是2014年左右的帖子了。回答千篇一律,都是复制粘贴的一个回答,在此贴出好访问的一个链接:https://oomake.com/question/4474586
接口什么的,本人也没试过,不知道行不行,就作为参考。
后来参考了这个博客,改了mutex和thread源代码,还是没用。这里也贴出来作为参考。https://blog.csdn.net/wenming111/article/details/103731896
继续搜索问题:c++ fatal error C1189: #error
修改项目属性,还是没用。
最后想着,干脆改成C#里面的互斥锁算了。不过在此之前,先尝试了一些Qt自带的QMutex.
终于出现了区别,起码问题变得不一样了。
namespace'::escape_string": 此函数不能编译为托管,请考虑使用 #pragma 非托管
百度这个问题,找到了这篇帖子,这就是我想要的。https://www.cnblogs.com/carl2380/archive/2010/12/24/1915723.html 里面的场景四。
以下代码为原来的
#include<mutex>
void hello()
{
static std::mutex mu;
mu.lock();
mu.unlock();
}
以下代码为修改后的。
#include <QMutex>
#pragma unmanaged
void hello()
{
static QMutex mu;
mu.lock();
mu.unlock();
}
#pragma managed