zoukankan      html  css  js  c++  java
  • 利用WM_COPYDATA进行进程间通信

    发信消息

    void CControlDlg::OnBnClickedButtonSend()
    {
        // TODO: 在此添加控件通知处理程序代码
        CString strWindowTitle =  _T("ClientDemo");  
        CString strDataToSend = _T("成功通信");  
    
        HWND hOtherWnd = ::FindWindow(NULL,_T("DLL窗口")); //_T("YK Application"),NULL
        if (hOtherWnd != NULL && ::IsWindow(hOtherWnd))  
        {  
            COPYDATASTRUCT cpd;  
            cpd.dwData = 0;  
            cpd.cbData = strDataToSend.GetLength() * sizeof(TCHAR);  
            cpd.lpData = (void*)strDataToSend.GetBuffer(0);  
            HRESULT hResult = ::SendMessage(hOtherWnd, WM_COPYDATA, (WPARAM)(AfxGetApp()->m_pMainWnd), (LPARAM)&cpd);  
            strDataToSend.ReleaseBuffer();  
        }  
    
    }

    DLL接收端先添加WM_COPYDATA中添加消息映射

    BEGIN_MESSAGE_MAP(CWGDLG, CDialogEx)
        ON_WM_COPYDATA()//消息映射
        ON_BN_CLICKED(IDC_BUTTON1, &CWGDLG::OnBnClickedButton1)
        ON_BN_CLICKED(IDOK, &CWGDLG::OnBnClickedOk)
    END_MESSAGE_MAP()

    然后回函数中写代码

    BOOL CWGDLG::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
    
    
        //AfxMessageBox((LPCSTR)(pCopyDataStruct->lpData));
        //MessageBox(NULL, _T("成功通信"), MB_OK);  
    
        if (pCopyDataStruct != NULL)  
        {  
    
            LPCTSTR pszText = (LPCTSTR)(pCopyDataStruct->lpData);  
            DWORD dwLength = (DWORD)(pCopyDataStruct->cbData);  
            TCHAR szRecvText[1024] = {0};  
            memcpy(szRecvText, pszText, dwLength);  
            MessageBox(szRecvText, _T("成功通信"), MB_OK);  
        }  
        return CDialogEx::OnCopyData(pWnd, pCopyDataStruct);
    }
  • 相关阅读:
    Js--Array类型1
    利用js生成一个在线考试系统
    在Asp.net core 项目中操作Mysql数据库
    Unity游戏接入TypeSDK集成笔记
    第一篇博客
    两次面试
    [OC笔记] static 关键字
    cellForRowAtIndexPath方法不执行的那些坑
    一行代码设置UITableView分割线的长度
    [转载]iOS开发:获取设备信息
  • 原文地址:https://www.cnblogs.com/wumac/p/4476830.html
Copyright © 2011-2022 走看看