项目引用上的QT访问冲突
QT access violation on project reference
我想从另一个vcxproj启动我的QT应用程序。当应用程序以.exe的形式独立执行时,没有任何问题。然而,当应用程序(通过.lib(获得引用时,我在Qt5Widgetsd.dll中遇到访问冲突。然而,引用QT项目的项目不是QT项目,因此我需要手动添加QT lib引用。
QT应用程序通过以下代码从其他线程调用:函数调用:
QFuture<void> 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();
}
独立时使用的.dll:https://pastebin.com/TwQ0wrqa.
引用QT项目时使用的.dll:https://pastebin.com/UYGTUMM0
Qt的设计并不是为了做到这一点:QApplication
必须在主线程中运行。尽管有这样的滥用,它通常在Windows上运行,但它不受支持,也不经过测试,正如你所看到的:有时它会崩溃。此外,它不是跨平台的。
你必须:
- 准备一个Qt的静态构建
- 使用Qt的副本构建您的库
除了VC运行时之外,库不能有任何依赖项。
这是必要的,因为调用应用程序似乎也是一个Qt应用程序;它们似乎链接到Qt的同一副本,然后您尝试在同一程序中有两个QApplication
或QCoreApplication
对象。这是行不通的。即使你只有一个应用程序对象,还有其他全局Qt符号在你背后初始化,库会在你的主程序完成后尝试初始化它们。这将无法工作。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- C++尝试深度复制唯一指针时出现内存访问冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 写入访问冲突异常
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 读取访问冲突.这0xCDCDCDCD
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 插入数组时违反写访问冲突
- 使用 ReadProcessMemory 获取字符串值的访问冲突
- 尝试通过共享指针使用变量时读取访问冲突
- 堆栈上的 C++ 访问冲突写入异常
- 项目引用上的QT访问冲突
- 使用VTK和QT多线程时访问冲突异常
- 访问冲突QT PostEvent
- 插槽后Qt访问冲突0xC0000005