﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-《深入解析ATL》第二版中文版上市-随笔分类-System</title><link>http://www.cppblog.com/TechLab/category/697.html</link><description>有问题请到CSDN-&gt;VC/MFC讨论</description><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 13:30:13 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 13:30:13 GMT</pubDate><ttl>60</ttl><item><title>WM_COPYDATA实现进程间数据共享</title><link>http://www.cppblog.com/TechLab/archive/2005/12/30/2272.html</link><dc:creator>TechLab</dc:creator><author>TechLab</author><pubDate>Fri, 30 Dec 2005 04:32:00 GMT</pubDate><guid>http://www.cppblog.com/TechLab/archive/2005/12/30/2272.html</guid><wfw:comment>http://www.cppblog.com/TechLab/comments/2272.html</wfw:comment><comments>http://www.cppblog.com/TechLab/archive/2005/12/30/2272.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/TechLab/comments/commentRss/2272.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/TechLab/services/trackbacks/2272.html</trackback:ping><description><![CDATA[<P>实现进程间数据共享除了常用的内存文件映射外，对于一些非文件的数据共享可以直接使用消息WM_COPYDATA。<BR>如果需要在进程A传递数据到进程B，简单的实现如下：<BR>在进程A中：<BR>CString strDataToSend = _T( "Hello" );&nbsp;&nbsp;&nbsp;//需要传递的数据<BR>HWND hWndReceived;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//进程B的接收数据窗口对象<BR>//COPYDATASTRUCT结构是WM_COPYDATA传递的数据结构对象<BR>COPYDATASTRUCT cpd;<BR>cpd.dwData =&nbsp; 0;<BR>cpd.cbData&nbsp;&nbsp;=&nbsp; strDataToSend.GetLength();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//传递的数据长度<BR>cpd.lpData&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp; (void*)strDataToSend.GetBuffer(cpd.cbData);&nbsp;&nbsp;//传递的数据地址<BR>SendMessage( hWndReceived, WM_COPYDATA, 0, (LPARAM) &amp; cpd );<BR>strDataToSend.ReleaseBuffer();<BR><BR>在目标进程B中，先手动建立好函数声明和实现<BR>BEGIN_MESSAGE_MAP(CMyWnd, CWnd)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//{{AFX_MSG_MAP(CMyWnd)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ON_WM_COPYDATA()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//}}AFX_MSG_MAP<BR>END_MESSAGE_MAP()</P>
<P>映射函数：<BR>BOOL CMyWnd::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) <BR>{<BR>　　　CString strRecievedText = (LPCSTR) (pCopyDataStruct-&gt;lpData);<BR>　　　return CMyWnd::OnCopyData(pWnd, pCopyDataStruct);<BR>}<BR><BR>还可以参考MSDN文章Using Data Copy<BR><A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/dataexchange/datacopy/usingdatacopy.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/dataexchange/datacopy/usingdatacopy.asp</A></P><img src ="http://www.cppblog.com/TechLab/aggbug/2272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/TechLab/" target="_blank">TechLab</a> 2005-12-30 12:32 <a href="http://www.cppblog.com/TechLab/archive/2005/12/30/2272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>