我有一个问题,不允许我从一个带有Qt的DLL中获取事件到C#上的程序。事件来了,但我需要强制窗口的事件队列,它们使用Application.doEvents()
对于回调函数,我使用了一个指针,它将数据发送到C#程序,并由以下方法捕获
public byte OnKpeDllEvent(int category, IntPtr pInfo)
{
KPE_EVENT_INFO Info = new KPE_EVENT_INFO();
if (pInfo != IntPtr.Zero)
{
m_hInstance = pInfo;
object struttura = Marshal.PtrToStructure(pInfo, typeof(KPE_EVENT_INFO));
if (struttura != null)
Info = (KPE_EVENT_INFO)struttura;
}
}
字符串
这个其他方法是我从另一个我保证有效的方法发送事件的地方
void KpeQTLibrary::onConnected() {
KPE_EVENT_INFO einfo{};
einfo.nLine = -1;
einfo.nSize = sizeof(KPE_EVENT_INFO);
if (m_pCallbackProc != NULL)
m_pCallbackProc(KPE_EVENT::CONNECTED, &einfo);
qDebug() << KPE_EVENT::CONNECTED;
}
型
我希望我说得够清楚了
1条答案
按热度按时间vxbzzdmp1#
好了,我已经解决了我的问题,因为一些QT方法需要从主线程调用。
第一个月
Initialize()是我启动所有函数的主方法。