同一进程中的多模块之间非正常途径获取的指针,释放时VS会报错。
2011-01-20 23:53
232 查看
最近在做单进程中多个IE窗口页面之间通讯的东东。
其中关键技术就是通过在IE页面中嵌入ACTIVEX,由ACTIVEX接收页面的输入并将输入的内容通过“共享”内存报告给其他页面中的ACTIVEX从而触发其他页面对数据的接收。由于ACTIVEX和页面都在同一个进程中,所以就没有使用WINDOWS的内存映射文件等进程间共享的机制,代之以在主程序中malloc了一块内存,并将该内存指针保存在本地文件中,再在ACTIVEX初始化时从该文件读取指针值,这样一样能达到访问同一块内存的目的。
经验证,若在ACTIVEX中对获取的指针进行free,VC就会报异常,程序会挂掉。
若在同一模块中进行上述操作则不会有这种问题。
结论:上述方法是危险的,不到不得已最好不要用。
其中关键技术就是通过在IE页面中嵌入ACTIVEX,由ACTIVEX接收页面的输入并将输入的内容通过“共享”内存报告给其他页面中的ACTIVEX从而触发其他页面对数据的接收。由于ACTIVEX和页面都在同一个进程中,所以就没有使用WINDOWS的内存映射文件等进程间共享的机制,代之以在主程序中malloc了一块内存,并将该内存指针保存在本地文件中,再在ACTIVEX初始化时从该文件读取指针值,这样一样能达到访问同一块内存的目的。
经验证,若在ACTIVEX中对获取的指针进行free,VC就会报异常,程序会挂掉。
若在同一模块中进行上述操作则不会有这种问题。
结论:上述方法是危险的,不到不得已最好不要用。
相关文章推荐
- 从Node.js的child_process模块来学习父子进程之间的通信
- nodejs的process模块如何获取其他进程的pid
- MFC中获取各个窗体之间的句柄或者指针对象的方法
- 根据进程结合GetModuleHandle获取当前主模块句柄
- VB 获取进程/模块信息 批量结束进程的代码
- 手把手教你R0下通过EPROCESS获取进程加载模块
- 获取进程加载的dll模块
- C++实现获取DOTA玩家名称(反汇编查找指针地址和跨进程读取war3内存)
- 获取指定进程所有线程的当前执行模块
- 【API】获取进程的所有模块名
- 使用Excel COM组件导出数据后释放 Excel进程不能正常结束
- CreateToolhelp32Snapshot 获取进程快照时 Debug下正常 Release异常
- 关于Cross-Dll问题(在不同的模块之间申请和释放内存)
- 内核遍历r3进程模块,获取信息(32,64,WoW64)
- 获取进程的模块信息
- 根据进程结合GetModuleHandle获取当前主模块的句柄
- MFC中获取各个窗体之间的句柄或者指针对象的方法 .
- 【API】获取进程的所有模块名
- MFC获取各个窗体(体)之间的指针(对象)
- linux/android进程的模块信息获取