CreateFileMapping/OpenFileMapping/MapViewOfFile

FileMapping漫谈 内存映射问题0x01、内存映射:• 在32位的Windows系统中,每一个进程都有权访问他自己的4GB(232=4294967296)平面地址空间,没有段,没有选择符,没有near和far指针,没有near和far函数调用,也没有内存模式。• 每个进程都有独立的4GB逻辑地址空间,32位的Windows系统允许每一个进程独立访问自己的内存,即独立于其它进程,也即它自己的32位逻辑地址空间。操作系统 阅读详情

 先要使用函数CreateFileMapping来创建一个想共享的文件数据句柄,然后使用MapViewOfFile来获取共享的内存地址,然后使用OpenFileMapping函数在另一个进程里打开共享文件的名称,这样就可以实现不同的进程共享数据

 

void FileMapping(void)    {          //打开共享的文件对象。 
               m_hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE,_T("TestFileMap")); 
                if (m_hMapFile)  {       //显示共享的文件数据。 
                    LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(m_hMapFile,FILE_MAP_ALL_ACCESS,  0,0,0); 
                    OutputDebugString(lpMapAddr); 
                 } else { //创建共享文件。 

                    m_hMapFile = CreateFileMapping( (HANDLE)0xFFFFFFFF,NULL, PAGE_READWRITE,0,1024, _T("TestFileMap")); 
                    //拷贝数据到共享文件里。 
                   LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(m_hMapFile,FILE_MAP_ALL_ACCESS, 0,0,0); 
                  std::wstring strTest(_T("TestFileMap")); 
                   wcscpy(lpMapAddr,strTest.c_str()); 

                   FlushViewOfFile(lpMapAddr,strTest.length()+1); 
               } 
         } 

Win32的WinMain

DLL的DLLMain

BOOL APIENTRY DllMain( HANDLE hModule,

                       DWORD ul_reason_for_call,

                       LPVOID lpReserved

                                    )

{

    switch (ul_reason_for_call)

       {

              case DLL_PROCESS_ATTACH:

              case DLL_THREAD_ATTACH:

              case DLL_THREAD_DETACH:

              case DLL_PROCESS_DETACH:

                     break;

    }

       hInstance=(HINSTANCE)hModule;          //得到DLL实例

    return TRUE;

}

 

 

LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam)

{

      .............

       //给出提示:键盘已经被锁定,要进行判断,看是否已有提示窗口,否则会弹个没完

       if (!::FindWindow(0, "KeyBoard Locked"))    // user32.lib 头文件:winuser.h

       {

              MessageBox(0,"键盘已经锁定!!!","KeyBoard Locked",MB_OK);

       }

    return 1;   //没有return CallNextHookEx(hhkHook,nCode,wParam,lParam)则不会把消息传递下去,所以我们的键盘就不起作用了

}

 

hhkHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)HookProc,hInstance,0)

UnhookWindowsHookEx(hhkHook);

C++开发基础之Windows平台共享内存开发入门 共享内存是一种在多个进程之间共享数据的有效方式,而内存映射文件技术(Memory-Mapped Files)提供了一种将磁盘文件映射到进程地址空间的机制,在Windows提供了一组API,使得在C++中实现共享内存变得相对容易。 阅读详情

相关推荐

CreateFileMapping , OpenFileMapping, MapViewOfFile, UnmapViewOfFile 和 FlushViewOfFile

与虚拟内存一样,内存映射文件可以用来保留一个地址空间的区域,并将物理存储器提交给该区域。它们之间的差别是,物理存储器来自一个已经位于磁盘上的文件,而不是系统的页文件。一旦该文件被映射,就可以访问它,就像整个文件已经加载内存一样。 内存映射文件可以用于3个不同的目的: • 系统使用内存映射文件,以便加载和执行. e x e和D L L文件。这可以大大节省页文件空间和应用程序启动运行所需的时间。 • 可以使用内存映射文件来访问磁盘上的数据文件。这使你可以不必对文件执行I / O操作,并且可以不必对文件内容进行缓

weixin_43494116的博客 6180

内存映射文件

内存映射文件与虚拟内存一样,内存映射文件可以用来保留一个地址空间的区域,并将物理存储器提交给该区域。它们之间的差别是,物理存储器来自一个已经位于磁盘上的文件,而不是系统的页文件。一旦该文件被映射,就可以访问它,就像整个文件已经加载内存一样。 内存映射文件可以用于3个不同的目的: • 系统使用内存映射文件,以便加载和执行. e x e和D L L文件。这可以大大节省页文件空间和应

GAME-LAB(游戏开发,微信公众号:fury-programer) 1646

零成本矩阵玩法:1人运营5个账号的自动化工具链配置(2025全平台实战)

通过“AI内容生产+工具链分发+自动化变现”的组合拳,即使是新手也能实现1人运营5个账号的规模化收益。关键在于选对工具与设计标准化流程。未来,矩阵运营的竞争将聚焦于工具使用效率与数据洞察深度,快人一步者方能抢占先机!

TuFuir的博客 3785

内存共享函数OpenFileMapping,在release模式下返回NULL

共享内存的步骤为:CreateFileMapping创建共享的内存空间;OpenFileMapping打开共享内存,返回HANDLE型句柄;MapViewOfFile获取内存映射到该程序的内存,可以进行读写操作。         在实验中遇到了意外的情况,具体应用情景为:win10环境下使用共享内存在两个不同程序之间传递数据。在release模式下第二个程序调用OpenFileMapping始终

dhj555的博客 1万+

WinForm布局

登录模板页面UILoginForm

m0_71541781的博客 470

零基础也能懂的Arduino ESP32离线安装包图文教程

手把手教你完成Arduino ESP32离线安装包的配置,无需联网也能快速搭建开发环境,适合初学者和网络受限用户,轻松实现arduino esp32离线安装包部署。

weixin_36213081的博客 2672

C++ Service中OpenFileMapping“拒绝访问“错误

客户端没有访问服务中共享内存(FileMapping)的权限。

混沌的博客 2106

Android Studio中把llama.cpp编译Android .so

本文介绍了一个在Android Studio中集成llama.cpp的最小Demo实现方案,通过JNI将llama.cpp编译为Android.so库,实现本地加载GGUF模型进行文本生成。文章详细说明了项目结构配置(SDK≥30,NDK≥28)、CMake编译设置、Kotlin-JNI-C++的完整调用链实现,以及模型文件部署方式。该Demo采用每次请求新建上下文的简化设计,包含加载模型、生成文本、资源释放等核心功能,并提供了错误排查建议。项目舍弃了上下文保持等复杂功能以确保稳定性,适合作为端侧大语言模型

Zhang Phil 516

(转)CreateFileMapping/OpenFileMapping/MapViewOfFile

http://blog.youkuaiyun.com/rubyzhudragon/article/details/4342734   要先使用函数CreateFileMapping来创建一个想共享的文件数据句柄,然后使用MapViewOfFile来获取共享的内存地址,然后使用OpenFileMapping函数在另一个进程里打开共享文件的名称,这样就可以实现不同的进程共享数据 void Fil...

weixin_30483495的博客 202

使用 MATLAB/Simulink + Simscape Electrical + SimPowerSystems + Stateflow,构建一个多能互补微电网系统的动态响应仿真模型

本文详细介绍了使用MATLAB/Simulink构建多能互补微电网动态响应仿真模型的方法。文章从系统架构设计入手,包含光伏、风电、柴油发电机、锂电池储能等多种组件,重点讲解了建模过程、控制策略(下垂控制、PLL、SOC管理)和模式切换逻辑(Stateflow)。通过四种典型场景(负荷突增、光伏出力骤降、并网/孤岛切换、电动机启动)的仿真分析,验证了微电网在动态响应中的关键性能指标,并提出了高可靠性设计建议。该模型为微电网的稳定性分析和优化设计提供了有效工具,特别强调了储能系统在快速功率支撑中的重要作用。

amy_mhd的博客 159

超越防抖:索尼CXD5254GG芯片如何重新定义电子影像稳定

索尼CXD5254GG芯片通过融合6轴IMU与图像传感器数据,重新定义了电子影像稳定技术。其核心突破在于实时地平线校正、抑制果冻效应和镜头畸变校正,并搭载智能画质控制器提升画面细节。该芯片适用于广播制作、体育娱乐、安防监控和机器人视觉导航等专业领域,提供开箱即用的优化参数配置,大幅缩短开发周期。CXD5254GG不仅实现稳定成像,更通过姿态感知与智能优化,为专业影像应用提供了完整的稳定解决方案。

致力于lidar应用开发 114

C++ CreateFileMapping 内存映射实现快速读取文件

共享内存的方式原理就是将一份物理内存映射到不同进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信。因为是通过内存操作实现通信,因此是一种最高效的数据交换方法。本文主要讲述的使用内存映射文件的目的是访问磁盘上的数据文件。你可以不必对文件执行I / O操作,并且可以不必对文件内容进行缓存。1、CreateFileMapping// 创建一个内存映射文件的内核对象 2、MapViewOfFile // 将内存映射文件映射到进程的虚拟地址中 3、OpenFileMapping //

hml111666的博客 1万+

AUTOSAR从入门到精通-中间件通信DDS(一)

汽车开放系统架构(automotive open system architecture,autosar)是由全球各大汽车oem、零部件供应商、汽车电子软件公司联合建立的一套标准协议。该协议规范了一个符合汽车电子软件开发的、开放的以及标准化的软件架构。最初的autosar规范的制定只考虑传统汽车电子电器架构,基于硬件算力有限场景,提供确定的功能。

getusushu的博客 1869

共享内存

WINDOWS: OpenFileMapping :获取共享内存句柄 CreateFileMapping :创建共享内存句柄 MapViewOfFile :获取共享内存空间 UnmapViewOfFile :释放共享内存空间 LINUX、UNIX: shmget(OpenFileMapping,CreateFileMapping) shmat(...

weixin_30478757的博客 71

人形机器人电路板和算法分析

人形机器人电路板与算法深度剖析 电路板领域:人形机器人电子系统分为计算、驱动、感知、能源、通信五大模块。主控板采用高性能SoM(如NVIDIA Jetson AGX Orin),需满足严格电源完整性(PDN)与信号完整性(SI)要求;关节驱动板集成MCU、GaN/SiC功率器件及高精度编码器接口,采用刚柔结合PCB以适应狭小空间。挑战包括热-振可靠性(85°C/10G振动)、高密度互连(3mil线宽)及EMC兼容性。 算法领域:运动控制依赖MPC(模型预测控制)与强化学习(RL),实现实时动态平衡;感知算法

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 306

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Windows进程间通信:共享内存

留下记号,最近要用到: 方案1、使用WM_COPYDATA消息方案2、使用WriteProcessMemory(),ReadProcessMemory()访问其他进程的内存方案3、使用内存镜像文件 http://topic.youkuaiyun.com/u/20080123/09/12664978-2019-4ac9-93fe-86e8c0278d5b.html  内存镜像方式:( CreateFileM...

weixin_34342992的博客 109

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深入理解 Windows 共享内存:原理、API 与实例

共享内存是Windows下高效的IPC方式,基于文件映射对象,让多个进程的虚拟地址映射到同一物理页。核心API包括CreateFileMapping(创建)和MapViewOfFile(映射获得可访问指针);句柄(HANDLE)不能直接读写,必须映射视图。共享内存本身无同步,需配合互斥锁或信号量使用。示例中生产者写入整数,消费者读取,通过命名互斥锁保证数据一致。此机制与POSIX的shm_open+mmap类似,适合大批量数据交换。

weixin_51775138的博客 427

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

进程间通讯——内存映射/文件映射形式

内存映射/文件映射形式下的进程交通讯不分32位还是64位,是因为本质上使用的是系统物理页面(系统位数)。 主要是三个函数:CreateFileMapping;MapViewOfFile(映射内存),OpenFileMapping。 // FileSend.cpp : 定义控制台应用程序的入口点。 // #include #include int main() { HANDLE M

nyzdmc的博客 445

8.4 内存映射文件

8.4 内存映射文件

qq_36314864的博客 1459

CreateFileMapping ,MapViewOfFile和OpenFileMapping的用法

MapViewOfFile, MapViewOfFileEx VB声明 Declare Function MapViewOfFile& Lib "kernel32" (ByVal hFileMappingObject As Long, ByVal dwDesiredAccess As Long, ByVal dwFileOffsetHigh As Long, ByVal dwFileOffsetLow As Long, ByVal dwNumberOfBytesToMap As Long)Dec

7937

CreateFileMapping和MapViewOfFile函数

在开发软件过程里,也经常碰到进程间共享数据的需求。比如A进程创建计算数据,B进程进行显示数据的图形。这样的开发方式可以把一个大程序分开成独立的小程序,提高软件的成功率,也可以更加适合团队一起开发,加快软件的开发速度。下面就来使用文件映射的方式进行共享数据。先要使用函数CreateFileMapping来创建一个想共享的文件数据句柄,然后使用MapViewOfFile来获取共享的内存地址,然后使用O

芝麻软件工作室的专栏 3532

5.CreateFileMapping、MapViewOfFile和UnmapViewOfFile

CreateFileMapping函数 HANDLE CreateFileMapping( HANDLE hFile, //物理文件句柄 LPSECURITY_ATTRIBUTES lpAttributes, //安全设置 DWORD flProtect, //保护设置 DWORD dwMaxim...

T_o_m_m_a的博客 845
上一篇: GetMessage PeekMessage SendMessage PostMessage
下一篇: 读书心得
rubyzhudragon
博客等级 码龄18年 18粉丝 122原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值