本帖最后由 assicen 于 2010-07-18 23:28:32 编辑

解决方案 »

  1.   

    你看看两个hFileMapping的值是否一样
    一般是同一内核对象的不同引用
    OpenFileMapping会创建新的引用
      

  2.   

    不要尝试用OpenFileMapping来打开映射文件的够本来进行CloseHandle,这是没用的,你只能用一个
    全局的HANDLE g_hFileMapping; g_hFileMapping= CreateFileMapping(INVALID_HANDLE_VALUE, 
                                NULL, 
                                PAGE_READWRITE, 
                                0, 
                                100, 
                                "myMem");
    CloseHandle(g_hFileMapping)
      

  3.   

    保存为全局变量里。释放了把句柄赋值为NULL。通过判断句柄是否为NULL来决定操作
      

  4.   

    上面说得对,CreateFileMapping 会创建一个 HANDLE,OpenFileMapping 会打开另外一个 HANDLE,楼主没有关闭两次。将 HANDLE 加成类成员变量吧。
      

  5.   

    楼主少调用了一次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;
    }
      

  6.   

    还是不行 共享内存依然还存在 求解!!!!!!!!!!!!!!!!!!!!!
    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;
    }
      

  7.   

    解决了 其实你们说的都对 我只是没想到 在WriteToSharedMemory方法里使用了OpenFileMapping会影响到关闭