【问题标题】:How to get the same application instance handle from QT and WinApi如何从 QT 和 WinApi 获取相同的应用程序实例句柄
【发布时间】:2015-11-11 10:36:09
【问题描述】:

我的 QT 应用程序使用 WinApi 库。 现在我有以下代码:

//main.cpp
qDebug() << "main::instance = " << qApp; //0x29fe18
//lib.cpp
qDebug() << "library::instance = " << GetModuleHandle(NULL); // 0x400000

如您所见,当我的应用只有一个线程流时,我得到了不同的句柄。

怎么了?

编辑: 是的,我猜这些是不同的东西。 问题是:我如何从两个地方获取线程句柄(如果代码从同一个线程运行 - 我应该得到相同的句柄值,如果有 2 个线程 - 我应该得到 2 个不同的线程句柄)?

【问题讨论】:

    标签: qt winapi


    【解决方案1】:

    我们不知道qApp 是什么。大概它是指向QApplication 的全局实例的指针。这是您进程中的一个 C++ 对象实例。

    另一方面,GetModuleHandle(NULL) 是可执行模块的基地址。

    这两件事完全不同。你不应该期望它们是一样的。

    根据您的编辑,您对这些事情都不感兴趣,实际上想要识别线程。对于 Win32 代码,您使用 GetCurrentThreadId。对于 Qt,请使用 QThread::currentThreadId()

    【讨论】:

    • 已编辑问题以澄清我的问题,请看一下 :)
    • 我已经回答了第二个问题
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多