为什么 Python 而不是 Qt 需要 DLL 中的 GetMessage 消息抽取?
Why is message pumping with GetMessage in DLL needed for Python but not Qt?
我有一个使用 Windows API 的 C++ DLL,它处理 HWND_MESSAGE window creation/registration 并通过 [=13 注册事件通知=].在 Qt 中,我只是设置了一个 window 而没有使用 GetMessage
,但是我的 window 进程回调自动工作,所以我没有使用 GetMessage
循环来接收WM_DEVICECHANGE
的通知。我在不添加任何额外代码的情况下获得设备到达和移除。
但是,在 Python 中,我只是使用 ctypes
将 DLL 作为 cdll
加载,这有效:
__lib = ctypes.cdll.LoadLibrary("DevSystem.dll")
但是,我需要在我的 C++ DLL 中手动使用事件 GetMessage 循环来获取设备 arrival/removal 通知。我必须手动创建一个循环才能工作,我不明白。
基本上,这些行是 Python 需要工作的唯一区别:
MSG msg;
while (GetMessage(&msg, hWnd, WM_DEVICECHANGE, WM_DEVICECHANGE))
{
DispatchMessage(&msg);
}
- 为什么它在Qt中默认工作?
- 为什么Python需要留言
循环获取通知?
Why does it work by default in Qt?
Qt 应用程序框架运行一个消息循环来为 UI 提供服务,并且该消息循环还为您的回调提供服务。
Why does Python need a message loop to get notification?
您的 Python 程序不包含运行消息循环的任何内容,因此您需要明确地实现它。
我有一个使用 Windows API 的 C++ DLL,它处理 HWND_MESSAGE window creation/registration 并通过 [=13 注册事件通知=].在 Qt 中,我只是设置了一个 window 而没有使用 GetMessage
,但是我的 window 进程回调自动工作,所以我没有使用 GetMessage
循环来接收WM_DEVICECHANGE
的通知。我在不添加任何额外代码的情况下获得设备到达和移除。
但是,在 Python 中,我只是使用 ctypes
将 DLL 作为 cdll
加载,这有效:
__lib = ctypes.cdll.LoadLibrary("DevSystem.dll")
但是,我需要在我的 C++ DLL 中手动使用事件 GetMessage 循环来获取设备 arrival/removal 通知。我必须手动创建一个循环才能工作,我不明白。
基本上,这些行是 Python 需要工作的唯一区别:
MSG msg;
while (GetMessage(&msg, hWnd, WM_DEVICECHANGE, WM_DEVICECHANGE))
{
DispatchMessage(&msg);
}
- 为什么它在Qt中默认工作?
- 为什么Python需要留言 循环获取通知?
Why does it work by default in Qt?
Qt 应用程序框架运行一个消息循环来为 UI 提供服务,并且该消息循环还为您的回调提供服务。
Why does Python need a message loop to get notification?
您的 Python 程序不包含运行消息循环的任何内容,因此您需要明确地实现它。