vc6.0平台下两个mfc界面的内存共用
来源:互联网 发布:开淘宝店怎么设置运费 编辑:程序博客网 时间:2024/06/06 00:26
我只是个菜鸟,平时做的任务大多是改改vc6.0编的界面程序。
有些时候就会有这样的需求,将两个界面合并起来,之前几个月这样的任务,我没有找到方案,就直接把一个重写到另外一个里面去了。
这次的工作是需要在一个串口程序里面实添加实时动画,串口程序负责接收数据,并且想外转发,但同时需要实时显示计算出来的数据。可对于界面动画以及openGL来说,我基本不懂。而任务要求比较急,又不允许我自己来学习。只能找别人的程序,希望嵌入。
于是尝试了直接用一个界面调用另外一个界面。
现在马马虎虎能用,但是还有很多问题。
主界面为别人的动画界面,基本思路就是又主界面调用我的exe,并且开辟内存映射,已达到内存交互,主界面只读取内存中的数据,comm界面负责往内存中实时写数据。
主界面中加入createfilemapping来开辟共用内存空间,然后调用comm程序
ZeroMemory(&pApp->si4,sizeof(pApp->si4));//fills a block of memory with zerospApp->si4.cb=sizeof(STARTUPINFO);BOOL right4=CreateProcess(m_exeFile4, NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW, NULL,//Pointer to an environment block for the new process. If this parameter is NULL, the new process uses the environment of the calling process NULL,//If this parameter is NULL, the new process will have the same current drive and directory as the calling process &pApp->si4, &pApp->pi4);if (!right4){AfxMessageBox("Create Filter.exe Process err!\n"); }
然后再comm空间中也打开共用内存,将数据写入其中。
其中关键的函数如下:
BOOL InitialMemory(){ hMemShare=OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,"test"); if (hMemShare==NULL) { TRACE("OpenFileMapping ERR!/n"); return FALSE; } testOUT=(BYTE *)MapViewOfFile(hMemShare,FILE_MAP_ALL_ACCESS,0,0,32); if (testOUT==NULL) { TRACE("OpenFileMapping ERR!/n"); return FALSE; } DataBlock0=testOUT+0; DataBlock1=testOUT+20; return TRUE;}int writeMemory(BYTE*Addr,BYTE *WriteResult,ULONG size){if (*(Addr)==0)//表示对方已经将本方要写入数据的这部分内存中上次的数据读完了,因此对方将其置为0,同时证明本方可以写数据{for (int i=0;i<size;i++){*(Addr+1+i)=*(WriteResult+i);}*(Addr)=1;//表示本方已经写完数据了,因此将其标志位置为1,同时也表明对方可以读数据了return 1;}elsereturn 0;}int readMemory(BYTE*Addr,BYTE *ReadResult,ULONG size){ if (*(Addr)==1) //表示对方已经将数据写入到该内存中,本方可也读数据了 { for (int i=0; i<size; i++) { *(ReadResult+i)=*(Addr+i+1); } *(Addr)=0;//表示本方已经将该内存中的数据读完了,即对方可以再次在该内存中写数据了 return 1; } else return 0;}
现在的问题是,好像这两个程序除了内存交互还会相互影响。
关键的问题在于当我在调用comm程序后,配置comm的过程中,如果配置波特率出错了,按道理不会影响comm程序的进程,只是不会收到有意义的数,并且写入共享内存,可这样依然会造成主界面卡死。
似乎只有让程序正常跑起来才行。
- vc6.0平台下两个mfc界面的内存共用
- vc6.0平台下两个mfc界面的内存共用(2)
- VC6.0中 MFC中的资源界面
- MFC的CString(VC6) 内存管理分析
- MFC的CString(VC6) 内存管理分析
- MFC的CString(VC6) 内存管理分析
- MFC的CString(VC6) 内存管理分析
- VC6.0下生成非MFC的DLL库
- VC6.0下MFC的双缓存颜色显示问题
- VC6.0 下MFC程序与MySql数据库连接的设置
- vc6.0在DOS平台下的串口编程
- 关于VC6.0下内存泄露的监测
- VC6.0 配置 wxWidgets(跨平台界面控件库)
- MFC的CString(VC6) 内存管理分析[1]
- MFC的CString(VC6) 内存管理分析[2]
- 使用flash美化vc6.0的界面
- VC6.0的MFC简单计算器制作
- 32bits的xp下使用vc6.0生成MFC串口程序的控件拷贝目录
- Autodesk Developer Days 材料可以从ADN网站下载
- 二维数组查找
- 浅析C#构造函数
- 内核调试案例(oops错误)
- sharepoint 2007 批量迁移用户
- vc6.0平台下两个mfc界面的内存共用
- BASE64.js
- 无法保存 .rar.part,因为无法读取源文件。 。。。。。
- java 静态方法中读取配置文件的方法(整了半天,特此记下来)
- onRetainNonConfigurationInstance和getLastNonConfigurationInstance
- Servlet事件监听器
- 雨夜思乡
- XAMPP中的apache无法启动的解决方法
- non-aggregates cannot be initialized with initializer list