# VBSHandle **Repository Path**: domainNames/VBSHandle ## Basic Information - **Project Name**: VBSHandle - **Description**: 无聊着写的小玩具,随便玩玩 - **Primary Language**: 其他 - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-06-09 - **Last Updated**: 2025-06-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 对象管理系统库 ## 概述 本库提供了一套完整的对象管理系统,包括对象创建、引用计数、句柄生成和管理等功能。它使用DynamicWrapperX(dwx)对象与Windows API进行交互,并实现了线程安全的操作。本说明旨在帮助用户理解如何使用这个库来管理对象、句柄和引用计数。 ## 主要功能 - **对象创建和销毁**:通过引用计数机制管理对象的生命周期。 - **句柄生成和管理**:生成唯一的句柄来标识对象,并管理句柄到对象的映射。 - **线程安全**:使用临界区确保线程安全操作。 - **类型注册**:允许用户注册自定义对象类型,并通过类型名称创建对象。 ## 主要类接口说明 ### IProcessEnvInitialize **功能**: - 初始化进程环境上下文。线程安全 **方法**: - `Function Init(ByVal envName)` - 初始化句柄环境上下文。 ### ISafeStructAllocator **功能**: - 管理安全结构体的内存分配和释放。 **方法**: - `Function Alloc(ByVal memberCount)` - 分配内存。 - `Sub Free(ByVal p, ByVal memberCount)` - 释放内存。 ### ITypeFactory **功能**: - 管理对象类型的注册和创建。线程安全 **方法**: - `Function RegisterType(ByVal typeName, ByVal className)` - 注册类型名称和类名称的映射。 - `Function GetObject(ByVal typeName)` - 根据类型名称创建对象。 ### IObjectManager **功能**: - 提供对象创建、打开、关闭、引用和释放的接口。线程安全 **方法**: - `Function CreateObject(ByVal objName, ByVal builder)` - 创建一个新的对象, 如果对象存在则分配一个新的句柄。 - `Function CreateObjectEx(ByVal objName, ByVal builder, ByVal initParams, ByVal typeSpace)` - 创建一个新的对象(扩展)。 - `Function OpenObject(ByVal objName)` - 打开一个已存在的对象。 - `Function OpenObjectEx(ByVal objName, ByVal typeSpace)` - 打开一个已存在的对象(扩展)。 - `Function CloseObjectHandle(ByVal handle)` - 关闭一个对象。 - `Function RefObject(ByVal handle)` - 引用一个对象。 - `Function ReleaseObject(ByVal handle)` - 释放一个对象的引用。 - `Function GetHandleState(ByVal handle) - 获取句柄状态。 ### IObjectManagerProxy **功能**: - 提供对象管理的代理接口,简化了对象管理的使用。线程安全 **方法**: - `Function CreateObject(ByVal typeName, ByVal objName)` - 通过代理创建对象, 如果对象存在则分配一个新的句柄。 - `Function CreateObjectEx(ByVal typeName, ByVal objName, ByVal initParams, ByVal typeSpace)` - 通过代理创建对象(扩展)。 - `Function OpenObject(ByVal typeName, ByVal objName)` - 通过代理打开对象。 - `Function OpenObjectEx(ByVal typeName, ByVal objName, ByVal typeSpace)` - 通过代理打开对象(扩展)。 - `Function CloseObjectHandle(ByVal typeName, ByVal handle)` - 通过代理关闭对象。 - `Function RefObject(ByVal typeName, ByVal handle)` - 通过代理引用对象。 - `Function ReleaseObject(ByVal typeName, ByVal handle)` - 通过代理释放对象的引用。 - `Function GetHandleState(ByVal handle) - 通过代理获取句柄状态。 ### HandleManager **功能**: - 提供句柄生成、注册、注销等接口。不可以外部使用 **方法**: - `Function NewHandle()` - 生成一个新的句柄。 - `Function ContainsHandle(ByVal handle)` - 检查句柄是否存在。 - `Function GetHandleState(ByVal handle) - 获取句柄状态。 - `Sub RegisterHandle(ByVal handle, ByVal name)` - 注册句柄和名称的映射。 - `Sub UnregisterHandle(ByVal handle)` - 取消注册句柄。 - `Function GetObjectNameByHandle(ByVal handle)` - 获取句柄对应的对象名称。 - `Function ContainsObject(ByVal name)` - 检查对象名称是否存在。 - `Sub RegisterObject(ByVal name, ByVal obj)` - 注册对象名称和对象的映射。 - `Sub UnregisterObject(ByVal name)` - 取消注册对象。 - `Function GetObjectByName(ByVal name)` - 获取对象名称对应的对象。 - `Function GetObjectByHandle(ByVal handle)` - 获取句柄对应的对象。 - `Function ContainsHandleMap(ByVal handle)` - 检查句柄的引用计数映射是否存在。 - `Sub RegisterHandleMap(ByVal handle, ByVal obj, ByVal name)` - 注册句柄、对象和名称的引用计数映射。 - `Sub UnregisterHandleMap(ByVal handle)` - 取消注册句柄的引用计数映射。 - `Function GetObjectByHandleMap(ByVal handle)` - 获取句柄对应的对象。 - `Function GetObjectNameByHandleMap(ByVal handle)` - 获取句柄对应的对象名称。 - `Function GetRefCountByHandleMap(ByVal handle)` - 获取句柄的引用计数。 - `Sub IncHandleRefCount(ByVal handle)` - 增加句柄的引用计数。 - `Sub DecHandleRefCount(ByVal handle)` - 减少句柄的引用计数。 - `Sub IncObjectHandleCount(ByVal obj)` - 增加对象的句柄计数。 - `Sub DecObjectHandleCount(ByVal obj)` - 减少对象的句柄计数。 - `Sub Lock()` - 进入临界区。 - `Sub UnLock()` - 离开临界区。 ### ObjectMemoryManager **功能**: - 管理对象的内存和引用计数。不可以外部使用 **方法**: - `Function Create(ByVal builder, ByVal initParams)` - 创建一个新的对象实例包装引用计数机制。 - `Sub AddRef(ByVal p)` - 增加对象的引用计数。 - `Sub Release(ByVal p)` - 减少对象的引用计数,并在计数为零时释放对象。 - `Function GetInstancePointer(ByVal p)` - 获取指定内存地址处的对象实例指针。 ## 句柄使用规则 ```plaintext ############################################## # 句柄状态规则 # [Active] -> [Closed] -> [Recycled] #状态 描述 允许操作列表 #Active 正常可用状态 所有合法操作 #Closed 已标记关闭状态 ReleaseObject #Recycled 资源已回收状态 无操作权限 # 1. CloseObjectHandle: 标记为Closed状态 # 2. RefObject: 增加引用计数 # 3. ReleaseObject: 减少引用计数 # 4. 当引用计数=0 并且 对象句柄数=0 时回收 并且触发析构 ##############################################