我可以在Visual Studio 2010中混合使用Qt和非Qt项目吗
Can I mix Qt and non-Qt projects in Visual Studio 2010?
我们有一组用C++for Windows编写的DLL,供C#应用程序使用,所有这些都包含在Visual Studio解决方案中。现在有人已经将DLL移植到Qt,这样它们就可以在其他操作系统上使用。我可以在我的解决方案中切换到Qt代码并继续让它与C#应用程序一起工作吗?还是我必须分成两个解决方案?
我已经尝试过这样做了,但当我尝试构建时,我会得到错误
"操作无法完成。参数不正确"
或
"无法执行请求的操作,因为已在中生成进度"
仅供参考,我使用的是VS2010的Qt V4.8.0预构建二进制文件。
我们有一个C++项目正在进行中,它既包括用Qt构建的DLL,也包括不知道Qt存在的DLL。这在VS2010中构建得很好,但我们没有使用qmake来构建Qt项目;它一直是MSBUILD,我们必须专门运行qmake"神奇地"作为构建的一部分运行的某些可执行文件(如moc)。
也就是说,当我们基于商业代码构建自己的二进制文件集而不是使用预构建的二进制文件时,可能会有一些细微的差异。
事实证明,当我的同事完成Qt端口时,他重新创建了一些Visual Studio项目文件,这导致它们与原始文件具有不同的GUID。当我切换到Qt端口时,GUID与C#项目列出的依赖项不匹配。Visual Studio在处理(或告诉你)这方面有点糟糕,所以你会得到上面列出的错误。
一旦我们修复了这个问题,构建就可以正常工作,但运行它什么都没做——C++DLL从来没有响应。最终我意识到,为了让Qt计时器和队列工作,我们必须在DLL中调用QCoreApplication,因为我们没有使用Qt UI。然而,由于有一些Qt UI使用相同的DLL,我们不能总是调用QCoreApplication,以防UI已经调用了QApplication。您可以使用QCoreApplication::instance()来检查是否需要调用,但不能在DLL_PROCESS_ATTACH上的DllMain()中执行此操作,因为首先这还为时过早,其次这是Windows特有的。所以我们想出了这个:
static struct Vars
{
QCoreApplication *l_pQt;
bool l_bQtCoreCreated;
Vars()
: l_pQt(NULL), l_bQtCoreCreated(false)
{
}
virtual ~Vars()
{
if (l_pQt != NULL)
{
if (l_bQtCoreCreated)
{
delete l_pQt;
}
l_pQt = NULL;
l_bQtCoreCreated = false;
}
}
} g_private;
static void InitQtCore(void)
{
if (g_private.l_pQt == NULL)
{
g_private.l_pQt = QCoreApplication::instance();
if (g_private.l_pQt == NULL)
{
g_private.l_bQtCoreCreated = true;
int argc = 0;
char *argv = NULL;
g_private.l_pQt = new QCoreApplication(argc, &argv);
}
}
}
DLL中任何不只是基本设置的函数都会在一开始调用InitQtCore()。这适用于Qt和非Qt UI(C#和C++)。
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- Qt和C++:将QLineEdit添加到QTabWidget中
- Qt 和 Android - 如何使用 Qandroidjniobject 启动相机
- 如何将模板和非模板函数放在一个文件中
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 一个模板方法,用于同时接受常量和非常量参数
- C++ 常量正确性/缺少支持常量和非常量实例的类的常量构造函数
- 在 ubuntu 18.04.3 LTS 上安装 Qt 和 qwt:如何连接它们?
- C++,如何使用常量对象和非常量对象进行比较?
- 返回引用实例和非引用实例(return mystr & vs mystr)之间的区别是什么?
- 避免易失性和非易失性成员函数的代码重复
- 修改和非修改 putback() 之间的区别
- GCC 和非命名空间范围内的显式专用化
- QT 和 JIRA Rest API: /rest/api/2/issue/createmeta 意外返回韩语的 iss
- 如何使用带有Qt和C++的"Interface Class"进行通信
- 常量和非常量 getter 具有相同的名称
- Qt 中的多重选择和非多重选择复选框
- 使用具有非类表数据和非表/列表UI的Qt模型/视图
- 我可以在Visual Studio 2010中混合使用Qt和非Qt项目吗
- Qt鼠标控制在触摸和非触摸设备上的旋转