CreateFileMapping无法释放 求解 本帖最后由 assicen 于 2010-07-18 23:28:32 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你看看两个hFileMapping的值是否一样一般是同一内核对象的不同引用OpenFileMapping会创建新的引用 不要尝试用OpenFileMapping来打开映射文件的够本来进行CloseHandle,这是没用的,你只能用一个全局的HANDLE g_hFileMapping; g_hFileMapping= CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 100, "myMem");CloseHandle(g_hFileMapping) 保存为全局变量里。释放了把句柄赋值为NULL。通过判断句柄是否为NULL来决定操作 上面说得对,CreateFileMapping 会创建一个 HANDLE,OpenFileMapping 会打开另外一个 HANDLE,楼主没有关闭两次。将 HANDLE 加成类成员变量吧。 楼主少调用了一次CloseHandle建议楼主改成这样:HANDLE CShareMemory::CreateSharedMemory(){ HANDLE hFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 100, "myMem"); if ((hFileMapping == NULL) || (hFileMapping == INVALID_HANDLE_VALUE)) return -1; if (GetLastError() == ERROR_ALREADY_EXISTS) return -1; return hFileMapping;}int CShareMemory::ReleaseSharedMemory(HANDLE hFileMapping){ if(hFileMapping) CloseHandle(hFileMapping); return 0;} 还是不行 共享内存依然还存在 求解!!!!!!!!!!!!!!!!!!!!!int CShareMemory::CreateSharedMemory(){ m_hFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 100, "myMem"); if ((hFileMapping == NULL) || (hFileMapping == INVALID_HANDLE_VALUE)) return -1; if (GetLastError() == ERROR_ALREADY_EXISTS) return -1; return 0;}int CShareMemory::ReleaseSharedMemory(){ if(m_hFileMapping) CloseHandle(m_hFileMapping); return 0;} 解决了 其实你们说的都对 我只是没想到 在WriteToSharedMemory方法里使用了OpenFileMapping会影响到关闭 关于编辑框和MessageBox的问题 不怎么会用vs2005啊,高人帮忙! 100分求解RPC问题 请问如何动态创建checkbox? ListControl控件如何修改第一列以后的值? mschart控件的标题或图例的字体能动态改变大小吗?宋体9号在很挤的情况下显示模糊(还有在3D模式下),如何解决? 在ATL的Service类型的COM中调用MFC的类库CString问什么总是出错?(在线等待,到明天结贴) VC与ASP结合的问题 VC6下的连接错误! 请问各位大虾哪有入门下载啊 奇怪的问题 窗口布局的两个问题
一般是同一内核对象的不同引用
OpenFileMapping会创建新的引用
全局的HANDLE g_hFileMapping; g_hFileMapping= CreateFileMapping(INVALID_HANDLE_VALUE,
NULL,
PAGE_READWRITE,
0,
100,
"myMem");
CloseHandle(g_hFileMapping)
HANDLE CShareMemory::CreateSharedMemory()
{ HANDLE hFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE,
NULL,
PAGE_READWRITE,
0,
100,
"myMem"); if ((hFileMapping == NULL) || (hFileMapping == INVALID_HANDLE_VALUE))
return -1;
if (GetLastError() == ERROR_ALREADY_EXISTS) return -1;
return hFileMapping;
}
int CShareMemory::ReleaseSharedMemory(HANDLE hFileMapping)
{
if(hFileMapping) CloseHandle(hFileMapping);
return 0;
}
int CShareMemory::CreateSharedMemory()
{
m_hFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE,
NULL,
PAGE_READWRITE,
0,
100,
"myMem"); if ((hFileMapping == NULL) || (hFileMapping == INVALID_HANDLE_VALUE))
return -1;
if (GetLastError() == ERROR_ALREADY_EXISTS) return -1;
return 0;
}
int CShareMemory::ReleaseSharedMemory()
{
if(m_hFileMapping) CloseHandle(m_hFileMapping);
return 0;
}