近日,因为法式设想需要,我对WincowsCE 的内存规划停止了研究,因为发现国内在那方面的文档材料较少,于是在研究告一段落之际,构成那篇示例文档,以看抛砖引玉,得到此外高手的斧正。
一、法式实现的先决前提
因为Windows系统的窗体动静老是送达至一个特定历程的指定窗体动静函数中。
于是在当地历程(本身的利用法式)中获得属于其它历程的窗体的动静必需实现以下两个部门:
1、将需要挂接窗体的代码放到目标历程的地址空间中往。
2、施行那一段代码,并获得目标历程窗体的动静。
那两步看起来很简单,但在实现过程中就比力困难。因为Windows CE做为嵌进式挪动设备操做系统,与Windows 98/2000/XP等桌面操做系统在内核的设想理念以及API的撑持上有极大的区别。
那就间接招致了常规的桌面系统操纵全局鼠标钩子注进/长途线程注进等办法在CE中完全得欠亨。不外可喜的是,微软在开发东西中供给的remotexxx等长途调试法式使我清晰那个目标并非不成能的使命,微软既然能够做到,那就是说在CE的内部必然有一套完全的跨历程内存拜候/代码注进的机造。
二、法式实现的根本原理
颠末两天的google 搜刮,在网上我发现了一个没有在微软文档中声明的有趣的API函数:PerformCallBack4,传说中那个函数能够在本身的利用法式中施行指定的历程中的一个函数,So Cool!那好象恰是我所需要的工具。
固然网上也传说风闻那个函数在wm5不受撑持,其实颠末理论那个传说风闻只是讹传罢了!
PerformCallBack4函数的定义:
[DllImport("coredll。dll")]
public static extern uint PerformCallBack4(ref CallBackInfo CallBackInfo,
IntPtr ni_pVoid1,IntPtr ni_pVoid2,IntPtr ni_pVoid3);
此中函数的参数CallBackInfo构造定义:
[StructLayout(LayoutKind。
Sequential)]
public struct CallBackInfo
public IntPtr hProc; //长途的目标历程本文。