首页  编辑  

一个树形Node操作DLL

Tags: /超级猛料/DLL.动态链接库/第三方DLL及其接口/   Date Created:

通用归档API集 (General Purpose Archive Library) Ver 0.5

有以下几个特点:

1. 采用树形组织数据,提供对树状结构进行访问的API。用单个文件储存所有数据。

2. 载入的开销非常低,只有一个目录区被载入。采用文件映像方式,因此访问数据时的内存是动态分配的,效率很高。

3. Dll提供的所有API都是C风格的,Delphi,CB等亦可使用

4. 源代码公开。用了一点STL,大量用到递归,模仿Win32API进行数据封装。

/**********************************************************

   gpa.h 通用归档API集 DLL接口声明

   版权所有(C) 2001 WannaPlay

   通用归档API集完全自由发放。

   任何人都可以没有限制的使用、修改和再发布本代码。

   同时作者也没有义务为代码可能对你的应用和系统造

   成的任何损害承担责任。

   发现任何Bug,缺陷,或有任何意见和建议,请联系作者。

   谢谢。

   Home Page:  http://wannaplay.51.net

   eMail:      rocks_lee@263.net

***********************************************************/

#ifndef _WANNAJOY_GPA_H_

#define _WANNAJOY_GPA_H_

#include <windows.h>

#ifdef DLL_EXPORTS

#define GPA_API extern "C" __declspec(dllexport)

#else

#define GPA_API extern "C" __declspec(dllimport)

#endif

// 声明通用归档句柄

DECLARE_HANDLE(HGPA);

// 声明文档节点句柄

DECLARE_HANDLE(HNODE);

/**

* 打开一个通用归档文件

* @param szFilename 通用归档文件名

* @return 通用归档句柄

*/

GPA_API HGPA gpa_Open(LPSTR szFilename);

/**

* 关闭一个通用归档文件

* @param hGpa 通用归档句柄

* @return void

*/

GPA_API void gpa_Close(HGPA hGpa);

/**

* 得到通用归档的树形结构的根节点

* @param hGpa 通用归档句柄

* @return 文档根节点

*/

GPA_API HNODE gpa_GetRoot(HGPA hGpa);

/**

* 得到通用归档文件的版本号,低字为主版本号,高字为副版本号

* @param szFilename 通用归档句柄

* @return 版本号

*/

GPA_API DWORD gpa_GetVersion(HGPA hGpa);

/**

* 将以hRoot为根的树形结构保存为通用归档文件

* @param szFilename 通用归档文件名

* @param hRoot 树形结构的根节点

* @return void

*/

GPA_API void gpa_Save(LPSTR szFilename, HNODE hRoot);

/**

* 打印输出以hNode为根的子树,供调试用

* @param hNode 树形文档节点

* @return void

*/

GPA_API void gpa_DumpNode(HNODE hNode);

/**

* 创建一个数据节点。如果hParent不为空,将自动添加到hParent

* 注意:数据不会被拷贝,直到调用gpa_Save

* @param szNodeName 数据节点的字符串名,必须少于15个字符

* @param hParent 父节点,可以为NULL

* @param pData 数据的起始地址,

* @param dwSize 数据的大小(以字节计算)

* @param uFlags 标志,必须为0

* @return 数据节点句柄

*/

GPA_API HNODE gpa_CreateDataNode(LPSTR szNodeName,

                               HNODE hParent,

                               LPVOID pData,

                               DWORD dwSize,

                               UINT uFlags);

/**

* 创建一个目录节点。如果hParent不为空,将自动添加到hParent

* 只有目录节点才可以添加子节点

* @param szNodeName 数据节点的字符串名,必须少于15个字符

* @param hParent 父节点,可以为NULL

* @param uFlags 标志,必须为0

* @return 目录节点句柄

*/

GPA_API HNODE gpa_CreateDirNode(LPSTR szNodeName,

                               HNODE hParent,

                               UINT uFlags);

/**

* 删除一个节点以及以该节点为根的子树

* @param hNode 待删除节点

* @return void

*/

GPA_API void gpa_DeleteNode(HNODE hNode);

/**

* 判断一个节点是否目录节点

* @param hNode 文档节点

* @return 布尔值

*/

GPA_API BOOL gpa_IsDirectory(HNODE hNode);

/**

* 得到一个节点的名字

* @param hNode 文档节点

* @return 节点的名字

*/

GPA_API LPSTR gpa_GetNodeName(HNODE hNode);

/**

* 得到一个节点的子节点数目,不包括子节点的子节点。

* 对于数据节点,返回0

* @param hNode 文档节点

* @return 子节点数目

*/

GPA_API int gpa_GetChildCount(HNODE hNode);

/**

* 向一个目录节点添加一个子节点。

* 如果hParent是数据节点,调用无任何效果

* @param hParent 父节点

* @param hChild 子节点

* @return void

*/

GPA_API void gpa_AddChild(HNODE hParent, HNODE hChild);

/**

* 删除指定的子树

* @param hParent 父节点

* @param szChildName 子树根节点名

* @return void

*/

GPA_API void gpa_RemoveChild(HNODE hParent, LPSTR szChildName);

/**

* 根据字符串名查找子节点。

* @param hParent 待查找的父节点

* @param szChildName 子节点名称

* @return 有给定名称的第一个子节点,不存在则返回NULL

*/

GPA_API HNODE gpa_FindChild(HNODE hParent, LPSTR szChildName);

/**

* 得到指定位置的子节点。

* 节点的排列同gpa_AddChild和gpa_CreateXXXNode的调用顺序相同

* @param hParent 父节点

* @param nIndex 子节点索引

* @return 指定位置的子节点

*/

GPA_API HNODE gpa_GetChildAt(HNODE hParent, int nIndex);

/**

* 得到一个节点的父节点

* @param hNode 文档节点

* @return 该节点的父节点

*/

GPA_API HNODE gpa_GetParent(HNODE hNode);

/**

* 得到一个数据节点的数据的起始地址和大小

* @param ppData 输出参数,将被填充真正的起始地址

* @param pdwSize 输出参数,将被填充为真正的大小

* @return void

*/

GPA_API void gpa_GetContent(HNODE hDataNode,

                           LPVOID* ppData,

                           DWORD* pdwSize);

#endif//_WANNAJOY_GPA_H_

gpa.zip (121.6KB)