前言:
使用CEF加载网页,做JS与C++交互时,需要向主窗口发送一些消息来通知界面做相应的处理。但是,由于CEF使用chrome内核是多进程架构的,渲染引擎与主程序都不在同一个进程里面。因此,理所当然的就想到了使用共享内存了。为了更容易地使用,我们选择的是ATL里面封装的共享内存操作类:CAtlFileMapping。
CAtlFileMapping使用:
定义结构体,包含你所需要共享的数据,这里我们只需要共享主窗口的句柄
//自定义进程共享数据结构体
struct PROCESS_SHARE_DATA
{
HWND hMainWnd;
};
使用</span>VS自带GUID生成工具创建一个GUID,来唯一标识这块共享内存</p><p>const TCHAR szShareGuid[] = _T("4F836C8D-F55E-4D88-A0BF-9ACDC0A33B31");定义共享内存全局变量
extern CAtlFileMapping<PROCESS_SHARE_DATA> g_ShareData;
初始化这块共享内存,并给数据赋值
g_ShareData.MapSharedMem(sizeof(PROCESS_SHARE_DATA), szShareGuid);
((PROCESS_SHARE_DATA*)g_ShareData)->hMainWnd=pMainWnd->GetHWND();

本文介绍了在Windows上使用CAtlFileMapping进行共享内存操作的方法,包括如何初始化、使用和理解其内部实现。通过创建内存映射文件,不同进程可以共享数据,实现了CEF框架中跨进程通信的需求。同时,文章还探讨了CAtlFileMapping的OpenMapping和Unmap等功能的细节,强调了理解内存映射机制的重要性。
最低0.47元/天 解锁文章
924

被折叠的 条评论
为什么被折叠?



