lpView1=(LPTSTR)MapViewOfFile(hMapfile1,FILE_MAP_WRITE¦FILE_MAP_READ,0,0,0);
//lpView1----私有LPTSTR型变量,在CMapfileDlg类中定义
if((BYTE*)lpView1!=NULL) //注意:第一次运行时lpView1并没有被写入,该值为NULL,应此
//下面的语名永远不会被执行,当然你什么都得不到
{
// mDlg-----CMapfileDlg* mDlg,在CMapfileDlg类中定义
::GetWindowText(::GetDlgItem(mDlg->m_hWnd,IDC_DATA),lpView1,4*1024);
UnmapViewOfFile((LPVOID)lpView1);
}
//lpView1----私有LPTSTR型变量,在CMapfileDlg类中定义
if((BYTE*)lpView1!=NULL) //注意:第一次运行时lpView1并没有被写入,该值为NULL,应此
//下面的语名永远不会被执行,当然你什么都得不到
{
// mDlg-----CMapfileDlg* mDlg,在CMapfileDlg类中定义
::GetWindowText(::GetDlgItem(mDlg->m_hWnd,IDC_DATA),lpView1,4*1024);
UnmapViewOfFile((LPVOID)lpView1);
}
解决方案 »
- Shockwaveflash的问题..求救.
- CEdit类响应OnChange()的问题
- 怎样在基于对话框的程序状态栏上添加进度条
- 在通信协议中看到有 Unsigned Integer (4个字节数) ,Unsigned Integer (1个字节数)应该如何定义
- HOOKDLL注入Explorer.exe后在Explorer进程中安装钩子的问题
- ado中recordset的打开问题
- 请教:MFC中Combox的下拉选项问题
- 如何设置驱动设备的电源管理???
- ◎◎◎如何在工具条位图下面显示汉字◎◎◎
- 如何用DAO操作有“用户名-密码”,“数据库密码”,双重保护的Access2000数据库?
- 高程的月薪?(答者有分!)
- 为什么我得不到notify消息。
::GetWindowText(::GetDlgItem(mDlg->m_hWnd,IDC_DATA),lpView1,4*1024);
是放在OnCreate中的哪时IDC_DATA(应该是个EDIT吧)还什么都没有呢
改为strcpy(lpView1,"asdfasdfasdfasdfasdfasfdasf");你会得到正确的结果
不是因为lpView1为空而执行不到!
BTW:
不过在同一个进程中用内存映射文件没有意义呀?
下面是我的实现,你只需建一个对话框程序,加入两个EDIT,两个BUTTON,将下面的代码
加入就可执行,一点问题没有,还不行我可把代码发给你 :-)
void CTttDlg::OnButton1()
{
// TODO: Add your control notification handler code here
// hMapfile1----私有HANDLE型变量,在CMapfileDlg类中定义
hMapfile1=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,4*1024,"SSS");
if(hMapfile1!=NULL)
{
if(GetLastError()==ERROR_ALREADY_EXISTS)
{
AfxMessageBox("内存映射文件已经存在!",MB_OK);
CloseHandle(hMapfile1);
}
else
{
lpView1=(LPTSTR)MapViewOfFile(hMapfile1,FILE_MAP_WRITE|FILE_MAP_READ,0,0,0);
//lpView1----私有LPTSTR型变量,在CMapfileDlg类中定义
if((BYTE*)lpView1!=NULL)
{
// mDlg-----CMapfileDlg* mDlg,在CMapfileDlg类中定义
::GetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT1),(char*)lpView1,4*1024);
UnmapViewOfFile((LPVOID)lpView1);
}
}
}
else
{
AfxMessageBox("不能建立内存映射文件!",MB_OK);
}
}void CTttDlg::OnButton2()
{
// TODO: Add your control notification handler code here
HANDLE hMapfile;
LPTSTR lpView; hMapfile=OpenFileMapping(FILE_MAP_READ,FALSE,"SSS");
if(hMapfile!=NULL)
{
lpView=(LPTSTR)MapViewOfFile(hMapfile,FILE_MAP_READ,0,0,0);
if((BYTE*)lpView!=NULL)
{
::SetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT2), lpView);
UnmapViewOfFile((LPVOID)lpView);
}
else
{
AfxMessageBox("不能映射文件(size=0)!",MB_OK);
}
CloseHandle(hMapfile);
}
else
{
AfxMessageBox("不能打开映射文件!",MB_OK);
}
}
另外,还要感谢adrianx兄能够给我回信,我主要想接触有关函数,在一个进程中实验可节省不少时间。
m_hWnd表面上看起来是孤零零的,其实不然,编译器在编译时会在它前面加一个this指针,
即this->m_hWnd, this的值就是你想要而没得到的指向对话框窗口的指针。
看来你的C++还没过关,建议你赶快去买一本《Thinking in C++》。我现在正读第二
遍呢,把它搞懂再学MFC那简直是小菜一碟。