weixin_45014393 2019-05-08 16:17 采纳率: 0%
浏览 845
已结题

MFC的exe调用qt的dll界面。现在是通过WM_COPYDATA发消息给qt,但是qt没有收到消息

请各位大佬帮忙看看是不是代码有问题,为什么qt的界面收不到xiao'xi

这是qt收消息的代码

#include "meminnetdlg.h"
#include
#include
#include "qstring.h"
#include "QListWidget"
#include
#include
#include
MemInNetDlg::MemInNetDlg(QWidget *parent)
: QDialog(parent),ui(new Ui::MemInNetDlg)
{
ui->setupUi(this);
}

MemInNetDlg::~MemInNetDlg()
{

}

bool MemInNetDlg::nativeEvent(const QByteArray &eventType,void message,long *result)
{
MSG*pMsg =static_cast<MSG
>(message);
if(pMsg&&pMsg->message==WM_COPYDATA)
{
qDebug()<<"收到WM_COPYDATA消息";
COPYDATASTRUCT TmpData= reinterpret_cast<COPYDATASTRUCT>(pMsg->lParam);
QString text1=QString("发来的消息为:%1").arg((char*)TmpData->lpData);
ui->listWidget->addItem(text1);
if(TmpData)
{
QByteArray tmpstr = QByteArray(reinterpret_cast(TmpData->lpData),TmpData->cbData);
QMessageBox ::information(NULL,"recvMsg",QString("int:%1 string:%2").arg(tmpstr.data()));
}
return true;
}
}

void CQTDEMODlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知处理程序代码
    DLLFUN  fun;
    HINSTANCE hdll;
    hdll=LoadLibrary("qtdialog.dll");
    if(hdll==NULL)
    {
        FreeLibrary(hdll);
    }
    fun=(DLLFUN)GetProcAddress(hdll,"showDialog");
    if(fun==NULL)
    {
        FreeLibrary(hdll);
    }
    bool a=fun(this->m_hWnd);
        FreeLibrary(hdll);
}

这一部分是mfc用来给qt发消息的代码
void CQTDEMODlg::OnBnClickedButton2()
{
    // TODO: 在此添加控件通知处理程序代码


    //SetDlgItemInt(IDC_BUTTON1,a);
    LRESULT copyDataResult;
    LPCSTR strWindowTitle= "meminnetdlg";
    CWnd *accWnd =CWnd::FindWindow(NULL,strWindowTitle);
    if(accWnd)
    {
        CString strDataToSend = "12345";
        COPYDATASTRUCT copydata;
        copydata.dwData=0;
        copydata.cbData=strDataToSend.GetLength();
        copydata.lpData=(void*)strDataToSend.GetBuffer(copydata.cbData);
        copyDataResult =accWnd->SendMessage(WM_COPYDATA,(WPARAM)AfxGetApp()->m_pMainWnd->GetSafeHwnd(),(LPARAM)&copydata);
        strDataToSend.ReleaseBuffer();
    }
    else
    {
        AfxMessageBox("unable to find other window");
    }

}

  • 写回答

1条回答

  • threenewbee 2019-05-08 16:27
    关注

    你的界面上是不是有多个meminnetdlg的窗口,spy++看下
    另外用spy++还可以看到窗口是不是真的没有收到消息,还是收到了,如果收到了,也可能是你的处理消息的代码的问题。

    评论

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办