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

请各位大佬帮忙看看是不是代码有问题,为什么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");
    }

}

c++

1个回答

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

weixin_45014393
weixin_45014393 回复操作员马善福(贵阳专业挖机): 我就是根据这个写的。大哥能不能给个邮箱我把代码发你你看看。。
4 个月之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复weixin_45014393: QT的代码你贴的不是很清楚,不是很好判断,大体上也没什么问题
4 个月之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复weixin_45014393: 你试试看这个 https://blog.csdn.net/qq_29542611/article/details/83478851
4 个月之前 回复
weixin_45014393
weixin_45014393 大佬我就是看不出我的代码哪里有问题,那个窗口应该是有的,单步跟进去这个函数findwindow是找到了,
4 个月之前 回复
phenix2009
白色一大坨 老曹吗,改名啦,怎么做到的?
4 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!