CSharedFile
CSharedFile 是 CMemFile 派 生 类 , 它 支 持 共 享 的 内 存 文 件 。 内 存 文 件 的 行 为 类似 于 磁 盘 文 件 , 但 是 文 件 是 保 存 在 RAM 中 而 不 是 磁 盘 上 。 在 快 速 暂 存 或 传 输未 加 工 字 节 时 , 或 在 独 立 进 程 之 间 使 对 象 串 行 化 时 , 一 个 内 存 文 件 是 很 有 用 的 。
共 享 内 存 文 件 与 其 它 的 内 存 文 件 不 同 , 共 享 内 存 文 件 的 内 存 是 由 GlobalAlloc W indows 函 数 分 配 的 。 CSharedFile 类 将 数 据 保 存 在 一 个 全 局 分 配 的 内 存 块 ( 用GlobalAlloc 创 建 )中 ,并 且 这 个 内 存 块 可 以 使 用 DDE ,剪 贴 板 ,或 其 它 OLE/COM 统 一 数 据 传 输 操 作 ( 例 如 , 使 用 IDataObject) 来 共 享 。
GlobalAlloc 返 回 一 个 HGLOBAL 句 柄 , 而 不 是 像 malloc 那 样 返 回 一 个 内 存 指针 。 在 某 些 应 用 程 序 中 需 要 HGLOBAL 句 柄 。 例 如 , 要 将 数 据 放 入 剪 贴 板 中 , 你 就 需 要 一 个 HGLOBAL 句 柄 。
请 注 意 , CSharedFile 不 使 用 内 存 映 射 文 件 , 并 且 数 据 不 能 在 进 程 之 间 共 享 。
CSharedFile 对 象 可 以 自 动 分 配 它 们 自 己 的 内 存 , 或 是 你 可 以 通 过 调 用CSharedFile:: SetHandle 来 将 你 自 己 的 内 存 块 连 接 到 CSharedFile 对 象 上 。 不 管是 哪 一 种 情 况 , 如 果 nGrowBytes 不 为 零 , 则 用 于 增 长 内 存 文 件 的 内 存 被 自 动按 nGrowBytes-sized 增 量 分 配 。 。
更 多 的 信 息 , 参 见 “ Microsoft Visual C++ 6.0 参 考 库 ” 中 的 “ M icrosoft Visual C++6.0 运 行 库 参 考 手 册 ” 卷 中 的 “ 文 件 处 理 ” 。
#include <afxadv.h>
请 参 阅 CMemFile, GlobalAlloc, GlobalFree, GlobalRealloc
CSharedFile 类 成 员
Construction
CsharedFile 构 造 一 个 CSharedFile 对 象
Operations
Detach 关 闭 共 享 内 存 文 件 并 返 回 它 的 内 存 块 的 句 柄
SetHandle 将 共 享 内 存 文 件 与 一 个 内 存 块 连 接
成 员 函 数
CSharedFile:: CSharedFile
CSharedFile( UINT nAllocFlags = GMEM_DDESHARE | GMEM_MOVEABLE, UINT nGrowBytes = 4096 );
参 数
nAllocFlags
表 示 内 存 是 如 何 分 配 的 标 志 。 参 见 GlobalAlloc 可 以 获 得 一 个 有 效 标 志 值的 列 表 。
nGrowBytes
用 字 节 表 示 的 内 存 分 配 增 量 。
说 明
此 成 员 函 数 用 来 构 造 一 个 CSharedFile 对 象 并 为 它 分 配 内 存 。
请 参 阅 CSharedFile::Detach CSharedFile::SetHandle
CSharedFile::Detach HGLOBAL Detach( ); 返 回 值
返 回 包 含 此 内 存 文 件 内 容 的 内 存 块 的 句 柄 。
说 明
此 成 员 函 数 用 来 关 闭 内 存 文 件 并 使 它 与 内 存 块 分 离 。 你 可 以 通 过 使 用 Detach 返回 的 句 柄 来 调 用 SetHandle 来 重 新 打 开 它 。
请 参 阅 CSharedFile::CSharedFile, CSharedFile::SetHandle
CSharedFile::SetHandle
void SetHandle( HGLOBAL hGlobalMemory , BOOL bAllowGrow = TRUE );
参 数
hGlobalMemory
与 CSharedFile 连 接 的 全 局 内 存 的 句 柄 。
bAllowGrow
指 示 内 存 块 是 否 被 允 许 增 长 。
说 明
此 成 员 函 数 用 来 将 一 个 全 局 内 存 块 连 接 到 CSharedFile 对 象 上 。如 果 bAllowGrow
是 非 零 值 , 则 内 存 块 按 需 要 增 长 , 例 如 , 如 果 要 写 入 此 内 存 文 件 的 字 节 数 大 于
分 配 的 内 存 块 , 则 可 以 增 长 内 存 块 。
请 参 阅 CSharedFile::CSharedFile, CSharedFile::Detach