• 利用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);
    }
  • 相关阅读:
    HDU 1941 Justice League
    HDU 1960 Taxi Cab Scheme
    POJ 1986 Distance Queries
    UVA 11991 Easy Problem from Rujia Liu?
    sql的跟踪与Tkprof工具
    ORA04031 错误
    Oracle_spatial的空间索引
    oracle发生重启动的介绍
    expdp\impdp及exp\imp
    oracle锁
  • 原文地址:https://www.cnblogs.com/wumac/p/4476830.html
Copyright © 2020-2023  润新知