//=====================================================================
//TITLE:
// SetEventData和GetEventData在WinXP的解决方案
//AUTHOR:
// norains
//DATE:
// Tuesday 16-March-2010
//Environment:
// WINDOWS XP
//=====================================================================
如果你熟悉于WinCE开发,又经常通过SetEventData和GetEventData在进程间传递数据,那么当你想将代码移植到WinXP平台,将会遇到一个十分尴尬的问题:Win32 API根本就没有这两个函数!当然,如果你是采用.net框架,那么这不是问题,这里本文不做讨论。
回到原点,我们来想想这两个函数的功能。我们可以这么认为,SetEventData是将DWORD数值和事件句柄相关联,而GetEventData则是将关联的数据取出。这些数据,是可以在不同的进程中共享的。
这个是不是和内存映射文件有几分类似?既然Win32 API没有这个函数,那么我们就手动来创建!
由于事件句柄是与数值相关联地,从算法的简便性考虑,我们可以使用STL::map进行存储,这样可以大大降低我们的工作量。另一方面,因为我们在做映射文件时,有一些信息我们只能通过CreateEvent获取,故我们只能采用类的方式,将这几个函数重载。为描述简便,这个类我们声明为CMUF。
先从头开始,我们看看重载的CreateEvent函数。其中的一些要点,我采用注释的方式列于代码中,方便于查看。
这个函数有两个静态成员变量,在头文件中是这么声明的:
其中调用的InitMemFile函数如下:
和CreaetEvent相对应,我们来看看CloseHandle函数:
创建和关闭就是这么简单,并不算复杂。在请出今天的主角之前,我们先来看看一个主角们都会利用到的武器,也就是GetMemFile函数,它用来获取和事件句柄有关的内存映射文件信息。
函数很短,很简单:
有了这个GetMemFile函数以后,那么SetEventData和GetEventData就简单了,甚至可以说,显得非常单薄,似乎和本文主角的光环搭不上边。但,我们所要求的,只是功能。:)
好吧,我们让本文的两个主角一起闪亮登场吧:
OK,就这么简单,我们所需要做的,就是这些。
最后的最后,我们来看看如何调用我们文中所列的函数。因为这些函数都是被声明为static ,并且访问权限是public,所以我们可以直接加上CMUF::前缀进行访问,比如:CMUF::SetEventData。
当然,如果你的代码是以类为组织方式,那么就更简单了,直接继承于CMUF即可。
分享到:
相关推荐
WinXP ipv6 无法安装解决方案,,,,,,,,,,,,,,,,,,,,,,,,,,,,
最酷最全的winxp优化方案 这是最全的windows XP优化设置方案。
可以在Winxp上架设git服务器的解决方案 一 方案1:copssh + msysgit 这是一个非常简单而且灵活的方式。如果不涉及开发者对项目访问权限的管理问题,这是一个最经济高效的解决方案,本文介绍的就是这种安装模式。 ...
e-LOAD提供了非常出色的压力测试解决方案,它在开发的过程中创造了一个仿真环境,能够模拟真实用户访问Web应用,提供全面的应用性能统计信息。 e-MONITOR:为了保证Web应用能够为用户提供不间断服务,维护人员...
系统蓝屏在Windows中很常见的,可以说是系统最为夺目的“风景”。为了能够帮助大家更好地使用新系统,我整理了一些有关系统蓝屏代码的含义,以及对应的解决方法。
oralce 11G在winxp安装下失败的解决方案,oralce 11G在winxp安装下失败的解决方案
winxp下解决局域网共享的批处理文件 winxp下解决局域网共享的批处理文件 winxp下解决局域网共享的批处理文件
WINXP服务优化WINXP服务优化WINXP服务优化WINXP服务优化WINXP服务优化
winxp 解决局域网共享问题 文件为压缩文件 需要winrar 解压缩后 按需执行 批处理文件
脚本运行出现错误,WINXP解决方法,IE浏览器设置方法,设置后重新启动浏览器运行恢复正常。
详细介绍如何在winxp下如何建立ftp服务器。
FFMPEG WinXP 32位最终版本 ffmpeg-3.4.1-WinXP 32位WinXP开用~
WinXP常见进程WinXP常见进程 WinXP常见进程 WinXP常见进程
近几年,新品牌机的硬盘出厂默认模式均为SATA模式,原版的WinXP光盘无法找到硬盘,其中一些品牌机可以通过修改BIOS设置解决问题,但是有些品牌机(比如HP)的BIOS是不...相关工具和技术均来自网络,在此向相关方致谢!
opencv在winxp下的QT环境测试程序,使用方法可以参考我的博文
在winxp home版和winxp Professional(专业版)里的很多服务的开启/关闭状态就是不同的。 包括目前我们所能看到的各种优化版的windows里面的服务,就更加杂乱无章了。 所以认清每一个服务都是做什么的,是十分关键的...
win10系统PL2303串口连接出现错误的解决方案.docx
新的移动硬盘,容量都在2T以上,winxp操作系统不能适别和使用,可以使用本资源,在winxp上识别和使用新的2T大容量移动硬盘。
winxp家庭版系统winxp_home