Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 项目引用上的QT访问冲突_C++_Qt_Heap - Fatal编程技术网

C++ 项目引用上的QT访问冲突

C++ 项目引用上的QT访问冲突,c++,qt,heap,C++,Qt,Heap,我想从另一个vcxproj启动我的QT应用程序。当应用程序作为.exe独立执行时,没有问题。但是,当应用程序获取引用(通过.lib)时,我会在Qt5Widgetsd.dll中获取访问冲突。但是,引用QT项目的项目不是QT项目,因此我需要手动添加QT-lib引用 通过以下代码从另一个线程调用QT应用程序: 函数调用: QFuture<void> future = QtConcurrent::run(Start); QFuture future=QtConcurrent::run(S

我想从另一个vcxproj启动我的QT应用程序。当应用程序作为.exe独立执行时,没有问题。但是,当应用程序获取引用(通过.lib)时,我会在Qt5Widgetsd.dll中获取访问冲突。但是,引用QT项目的项目不是QT项目,因此我需要手动添加QT-lib引用

通过以下代码从另一个线程调用QT应用程序: 函数调用:

QFuture<void> future = QtConcurrent::run(Start);

QFuture future=QtConcurrent::run(Start);
功能本身:

void Start() 
{
    int argc = 1;
    char *argv[] = { (char*) "" };
    QApplication a(argc, argv);
    qRegisterMetaType<Mat>("Mat");
    qRegisterMetaType<HANDLE>("HANDLE");
    MyQTProject::g_MyQTProject = new MyQTProject();
    a.exec();
}
void Start()
{
int argc=1;
char*argv[]={(char*)“”};
质量保证申请a(argc、argv);
qRegisterMetaType(“Mat”);
qRegisterMetaType(“句柄”);
MyQTProject::g_MyQTProject=新建MyQTProject();
a、 exec();
}
独立时使用的.dll:


引用QT项目时使用的.dll:

QT不是设计用来这样做的:
QApplication
必须在主线程中运行。虽然它通常在Windows上工作,尽管有这样的滥用,但它不受支持,也没有经过测试,正如您所看到的:有时它会崩溃。而且,它不是跨平台的

你必须:

  • 准备Qt的静态构建
  • 使用Qt的副本构建您的库
  • 除VC运行时外,库不得具有任何依赖项


    这是必要的,因为调用应用程序似乎也是Qt应用程序;它们似乎链接到同一个Qt副本,然后您尝试在同一程序中有两个
    QApplication
    QCoreApplication
    对象。这是行不通的。即使您只有一个应用程序对象,也会有其他全局Qt符号在您背后初始化,并且库会在主程序完成初始化后尝试初始化它们。这将不起作用。

    Qt不是设计用来这样做的:
    QApplication
    必须在主线程中运行。虽然它通常在Windows上工作,尽管有这样的滥用,但它不受支持,也没有经过测试,正如您所看到的:有时它会崩溃。而且,它不是跨平台的

    你必须:

  • 准备Qt的静态构建
  • 使用Qt的副本构建您的库
  • 除VC运行时外,库不得具有任何依赖项


    这是必要的,因为调用应用程序似乎也是Qt应用程序;它们似乎链接到同一个Qt副本,然后您尝试在同一程序中有两个
    QApplication
    QCoreApplication
    对象。这是行不通的。即使您只有一个应用程序对象,也会有其他全局Qt符号在您背后初始化,并且库会在主程序完成初始化后尝试初始化它们。这不起作用。

    我使用vcpkg创建静态QT库,现在就可以了,谢谢!我用vcpkg创建了静态QT库,现在可以使用了,谢谢!