博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC++ 在两个程序中 传递字符串等常量值的方法:使用了 WM_COPYDATA 消息的
阅读量:5890 次
发布时间:2019-06-19

本文共 1279 字,大约阅读时间需要 4 分钟。

消息作用:

    在进程间共享数据(内部通过创建内存映射文件)

消息介绍:

需要用到的数据结构/类型:
typedef struct tagCOPYDATASTRUCT {
    ULONG_PTR dwData;
    DWORD cbData;
    PVOID lpData;
} COPYDATASTRUCT, *PCOPYDATASTRUCT;

结构体参数说明:

    dwData(ULONG)   保存一个数值, 可以用来作标志等
    lpData(void*)   待发送的数据的起始地址(可以为NULL)
    cbData(DWORD)   待发送的数据的长度
消息的参数:
    hWnd:   接收数据的窗口的句柄
    wParam: 传送该数据的窗口句柄(NULL也无所谓)
    lParam: COPYDATASTRUCT类型变量的地址
使用示例:

COPYDATASTRUCT cds;    char msg[] = "女孩不哭";    cds.dwData = 0;    cds.lpData = msg;    cds.cbData = strlen(msg)+1; //字符串请记得把'\0'加上, 不然就错了, 这里是ANSI字符串    SendMessage(FindWindow("nbsg_class", NULL), WM_COPYDATA, 0, (LPARAM)&cds);

注意:如果要发送的是一个CString类型的字符串,那么可以这么做

CString str = _T("女孩不哭");char* msg = str.GetBuffer(0);

这样就可以转化为 char*类型了

--------------------------------------------

接收端对该消息的一种可能处理:

BOOL CxuanzeDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct){    // TODO:  在此添加消息处理程序代码和/或调用默认值    COPYDATASTRUCT* pCDS = (COPYDATASTRUCT*)pCopyDataStruct;    CString str((char*)pCDS->lpData);    str.Format(_T("%s  标志:%d"), str, pCDS->dwData);    AfxMessageBox(str);    return CDialogEx::OnCopyData(pWnd, pCopyDataStruct);}

说明:  
使用 WM_COPYDATA 消息的传递数据,其实是将要传递的数据复制到共享内存中去后,将地址传递给另一个进程.

在这个消息中,有一个标志dwData 这个数据是一个ULONG_PTR类型,无符号长整数,可以用作数据的标志.这样不同的标志,可以将传递的数据用作不同的用途!

转载于:https://www.cnblogs.com/lujin49/p/4907668.html

你可能感兴趣的文章
Powershell管理系列(二十七)PowerShell操作之修改AD自定义属性
查看>>
PECL 与 phpize
查看>>
写段QTP脚本与大家一起分享
查看>>
Windows XP/2003系统服务详解
查看>>
Ibatis的namespace和缓存
查看>>
3集群-企业级 Hyper-v 群集部署实验方案
查看>>
读懂 Deployment YAML - 每天5分钟玩转 Docker 容器技术(125)
查看>>
分享我做的nginx+keepalived做的主主架构(一)
查看>>
XP系统怎样锁定计算机
查看>>
Some tips about crawling large external data with bcs connector
查看>>
RHCE学习<1>RHEL6系统安装、安装VM Tools和配置YUM本地源
查看>>
Web Client Software Factory系列(2):Composite Web应用程序块
查看>>
Exchange Server 2007系列之二:管理工具简介
查看>>
Exchange server 2010系列教程之三 发送邮件测试
查看>>
java:自定义数据库连接池
查看>>
WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口...
查看>>
Linux资料收集贴(Vi命令集,Linux命令集)
查看>>
git 对比两个commit 之间的差异
查看>>
DDD 应对具体业务场景,Domain Model 重新设计
查看>>
SQL Server 存储字符数较大字段的问题
查看>>