VC++之线程和进程之用共享内存实现进程间通信
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、创建对话框应用程序
二、编辑对话框资源
控件ID及标题
IDC_STATIC 发送数据IDC_EDIT_SEND
IDC_BUTTON_SEND 发送
IDC_STATIC 接收数据IDC_EDIT_RECEIVE
IDC_BUTTON_RECEIVE 接收
IDOK 退出
三、添加变量、函数、对象/库模块
1、添加变量
public:
CEdit m_send;
CEdit m_receive;
public:
HANDLE SharedMemory;
void* address;
2、添加消息响应函数
四、添加代码
1、添加初始化代码
BOOL CThreadDlg::OnInitDialog()
{
CDialog::OnInitDialog();
......
SharedMemory =
CreateFileMapping((HANDLE)0xffffffff,NULL,PAGE_READWRITE,0,10000,"Mem File");
address = MapViewOfFile(SharedMemory,FILE_MAP_WRITE,0,0,0);
return TRUE;
}
2、添加函数代码
void CThreadDlg::OnButtonReceive()
{
// TODO: Add your control notification handler code here
CString str;
strcpy((char*)(LPCTSTR)str,(char*)address);
m_receive.SetWindowText(str);
}
void CThreadDlg::OnButtonSend()
{
// TODO: Add your control notification handler code here
CString str;
m_send.GetWindowText(str);
strcpy((char*)address,(char*)(LPCTSTR)str);
}
五、编译
六、运行
七、函数说明
1、CreateFileMapping()函数声明
HANDLE CreateFileMapping(HANDLE hFile,LPSECURITY_ATTRIBUTE lpFileMappingAttributes,DWORD flProtect,DWORD dwMaximumSizeHigh,DWORD dwMaximumSizeLow,LPCTSTR lpName)
功能:创建一个内存映射对象。成功,返回文件映射对象句柄;失败,返回NULL。
2、MapViewOfFile()函数声明
HANDLE MapViewOfFile(HANDLE hFileMappingObject,DWORD dwDesiredAccess,DWORD dwFileOffsetHigh,DWORD dwFileOffsetLow,SIZE_T dwNumberOfByteToMap)
功能:将内存映射对象映射到进程地址控件。成功,返回映射对象的起始地址;失败,返回NULL。
3、strcpy()函数声明
char* strcpy(char* strDestination,const char* strSource)
功能:将源字符串内容复制到目的字符串。