请选择 进入手机版 | 继续访问电脑版

C++编程

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1477|回复: 1

紫麒麟笔记_杂乱代码

[复制链接]

18

主题

225

帖子

971

积分

高软

Rank: 4

积分
971
发表于 2017-4-11 14:38:19 | 显示全部楼层 |阅读模式

class CFileMapping
{
public:
        CFileMapping(LPCTSTR lpszName, DWORD dwMaximumSizeLow, DWORD dwMaximumSizeHigh = 0, HANDLE hFile = INVALID_HANDLE_VALUE, DWORD flProtect = PAGE_READWRITE, LPSECURITY_ATTRIBUTES lpFileMappingAttributes = NULL) {
                m_hMap        = ::CreateFileMapping ( hFile, lpFileMappingAttributes, flProtect, dwMaximumSizeHigh, dwMaximumSizeLow, lpszName );
                ASSERT(IsValid());
        }

        ~CFileMapping() {
                if(IsValid()) VERIFY(::CloseHandle(m_hMap));
        }

        LPVOID ViewMap(DWORD dwNumberOfBytesToMap, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh = 0, DWORD dwDesiredAccess        = FILE_MAP_ALL_ACCESS) {
                return ::MapViewOfFile        (m_hMap, dwDesiredAccess, dwFileOffsetHigh, dwFileOffsetLow, dwNumberOfBytesToMap);
        }

        BOOL UnViewMap(LPCVOID lpBaseAddress) { return ::UnmapViewOfFile(lpBaseAddress); }

        operator HANDLE        ()        {return m_hMap;}
        BOOL IsValid        ()        {return m_hMap != NULL;}

private:
        HANDLE m_hMap;
};

class CShareMemory
{
public:
        CShareMemory(DWORD dwSize, LPCTSTR lpszName = NULL) : m_fm(lpszName, dwSize) {
                ASSERT(dwSize > 0);
        }

        ~CShareMemory() {
                for(set<ULONG_PTR>::const_iterator it = m_set.begin(); it != m_set.end(); ++it) {
                        LPVOID pV = (LPVOID)*it;
                        ASSERT(pV);
                        m_fm.UnViewMap(pV);
                }
                m_set.clear();
        }

        LPVOID Alloc(DWORD dwNumberOfBytesToMap, DWORD dwFileOffsetLow) {
                LPVOID pV = m_fm.ViewMap(dwNumberOfBytesToMap, dwFileOffsetLow);
                if(pV) m_set.insert((ULONG_PTR)pV);
                ASSERT(pV);
                return pV;
        }

        BOOL Free(LPCVOID lpBaseAddress) {
                ASSERT(lpBaseAddress);
                set<ULONG_PTR>::iterator it = m_set.find((ULONG_PTR)lpBaseAddress);
                if(it != m_set.end())
                        m_set.erase(it);
                return m_fm.UnViewMap(lpBaseAddress);
        }

private:
        CFileMapping        m_fm;
        set<ULONG_PTR>        m_set;
        DECLARE_PRIVATE_COPY_CONSTRUCTOR(CShareMemory)
};


回复

使用道具 举报

18

主题

225

帖子

971

积分

高软

Rank: 4

积分
971
 楼主| 发表于 2017-5-23 13:25:35 | 显示全部楼层

ListCtrl重用类

本帖最后由 ID紫麒麟 于 2017-5-23 13:28 编辑

随便发上来一个东西吧,记得以前用过,只是不知道这个代码是不是我修改过。
这个是列表的类,具体用法,也忘记了。放在这里,要是有需要的就直接用吧,我是很久没看过这个东西了。记得当时是做了修改。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|C++编程  

GMT+8, 2019-7-22 20:37 , Processed in 0.078125 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表