22 KiB
API参考
**本文档引用的文件** - [DevManager.h](file://h\DevManager.h) - [DevManager.cpp](file://cpp\Managers\DevManager.cpp) - [ProManager.h](file://h\ProManager.h) - [ProManager.cpp](file://cpp\Managers\ProManager.cpp) - [SptManager.h](file://h\SptManager.h) - [SptManager.cpp](file://cpp\Managers\SptManager.cpp) - [TdManager.h](file://h\TdManager.h) - [TdManager.cpp](file://cpp\Managers\TdManager.cpp) - [IOManager.h](file://h\IOManager.h) - [IOManager.cpp](file://cpp\Managers\IOManager.cpp)目录
- 简介
- DevManager API
- ProManager API
- SptManager API
- TdManager API
- IOManager API
- API调用链与依赖关系
- 线程安全性说明
- 使用示例
简介
本文档为Geomative Studio软件系统中的核心管理器类提供详细的API参考。文档涵盖DevManager、ProManager、SptManager、TdManager和IOManager五个核心管理器类的公共接口,详细说明了各方法的签名、参数、返回值、异常情况以及使用场景。同时,文档解释了API的调用顺序、线程安全性,并提供了实际代码示例,为集成开发和自动化脚本提供了必要的技术参考。
DevManager API
DevManager类负责管理设备的生命周期,包括设备的添加、删除、查询和状态更新。该管理器维护设备在内存中的链接列表,并处理与数据库的交互。
公共方法
GetDeviceByID
根据设备ID获取设备对象。
方法签名
CDevice* GetDeviceByID(DWORD dwDevID)
参数
dwDevID: 设备的唯一标识符
返回值
- 成功时返回指向CDevice对象的指针,失败时返回NULL
异常情况
- 无显式异常抛出,但会通过调试输出记录操作日志
使用场景
- 当需要根据设备ID查找特定设备时使用
Section sources
- DevManager.h
- DevManager.cpp
GetDevice
根据设备句柄获取设备对象。
方法签名
CDevice* GetDevice(DWORD dwHandle)
参数
dwHandle: 设备的句柄
返回值
- 成功时返回指向CDevice对象的指针,失败时返回NULL
异常情况
- 无显式异常抛出
使用场景
- 在设备操作过程中,通过句柄快速获取设备对象
Section sources
- DevManager.h
- DevManager.cpp
AddDevice
向系统中添加新设备。
方法签名
BOOL AddDevice(CDevice* const pDev)
参数
pDev: 指向要添加的设备对象的常量指针
返回值
- 成功时返回TRUE,失败时返回FALSE
异常情况
- 在数据库事务处理中捕获_com_error异常,并显示错误消息
- 操作失败时会回滚数据库事务
使用场景
- 当检测到新设备并需要将其注册到系统中时使用
Section sources
- DevManager.h
- DevManager.cpp
DeleteDevice
从系统中删除设备。
方法签名
BOOL DeleteDevice(DWORD dwHandle)
参数
dwHandle: 要删除设备的句柄
返回值
- 成功时返回TRUE,失败时返回FALSE
异常情况
- 捕获所有异常,操作失败时回滚数据库事务
使用场景
- 当设备被移除或不再需要时,从系统中彻底删除设备
Section sources
- DevManager.h
- DevManager.cpp
InitialDevLinkList
初始化设备链接列表。
方法签名
void InitialDevLinkList()
参数
- 无
返回值
- 无
异常情况
- 无显式异常处理
使用场景
- 在系统启动或设备管理器初始化时,重新加载所有设备到内存中
Section sources
- DevManager.h
- DevManager.cpp
UpdateDevInfo
更新设备信息。
方法签名
void UpdateDevInfo(STSynDevParam stDevParam, BYTE bRemoteDeveTyp)
参数
stDevParam: 包含设备参数的结构体bRemoteDeveTyp: 远程设备类型
返回值
- 无
异常情况
- 捕获_com_error异常并显示错误信息
使用场景
- 当从设备接收到同步参数时,更新数据库中的设备信息
Section sources
- DevManager.h
- DevManager.cpp
ProManager API
ProManager类负责管理项目(Project)和测区(Testing Zone)的层次结构,处理项目与设备之间的同步。
公共方法
CreateProjectInDB
在数据库中创建新项目。
方法签名
UINT CreateProjectInDB(DWORD& dwID)
参数
dwID: 输出参数,返回创建项目的ID
返回值
- APP_SUCCESS: 创建成功
- APP_CANCLE: 用户取消操作
- APP_FAIL: 创建失败
异常情况
- 在数据库操作中捕获_com_error异常,显示适当的错误消息并回滚事务
使用场景
- 当用户通过UI创建新项目时,此方法处理数据库层面的创建逻辑
Section sources
- ProManager.h
- ProManager.cpp
CreateProjectInDev
在设备中创建项目。
方法签名
UINT CreateProjectInDev(DWORD dwID, CDevice* const pDev)
参数
dwID: 项目的数据库IDpDev: 指向目标设备的常量指针
返回值
- APP_SUCCESS: 创建成功
- APP_DUPLICATE: 项目已存在
- APP_FAIL: 创建失败
- APP_OVERFLOW: 项目数量超出限制
异常情况
- 处理文件传输失败的情况,删除已创建的项目以保持一致性
使用场景
- 当项目在数据库中创建后,需要将项目同步到指定设备时使用
Section sources
- ProManager.h
- ProManager.cpp
CreateDefaultTzInDev
在设备中为项目创建默认测区。
方法签名
UINT CreateDefaultTzInDev(DWORD dwProID, CDevice* const pDev)
参数
dwProID: 项目的IDpDev: 指向目标设备的常量指针
返回值
- APP_SUCCESS: 创建成功
- APP_DUPLICATE: 测区已存在
- APP_FAIL: 创建失败
异常情况
- 在数据库操作中捕获_com_error异常,操作失败时回滚事务
使用场景
- 当项目在设备中创建后,自动创建默认测区以确保项目结构完整性
Section sources
- ProManager.h
- ProManager.cpp
ShowProList
显示设备关联的项目列表。
方法签名
bool ShowProList(DWORD dwDevHandle, CListCtrl& proList)
参数
dwDevHandle: 设备句柄proList: 引用CListCtrl控件,用于显示项目列表
返回值
- 操作成功返回true,失败返回false
异常情况
- 无显式异常处理
使用场景
- 在UI中显示特定设备关联的所有项目列表
Section sources
- ProManager.h
- ProManager.cpp
ShowTzList
显示项目关联的测区列表。
方法签名
bool ShowTzList(DWORD dwProHandle, CListCtrl& tzList)
参数
dwProHandle: 项目句柄tzList: 引用CListCtrl控件,用于显示测区列表
返回值
- 操作成功返回true,失败返回false
异常情况
- 无显式异常处理
使用场景
- 在UI中显示特定项目下的所有测区列表
Section sources
- ProManager.h
- ProManager.cpp
DeleteProjectInDB
从数据库中删除项目。
方法签名
void DeleteProjectInDB(DWORD dwID)
参数
dwID: 要删除项目的ID
返回值
- 无
异常情况
- 无显式异常处理
使用场景
- 当需要从数据库中永久删除项目及其相关数据时使用
Section sources
- ProManager.h
- ProManager.cpp
SptManager API
SptManager类负责管理脚本(Script)的创建、删除和同步,支持1D、2D和3D测量脚本。
公共方法
CreateCESConInDB
在数据库中创建1D脚本。
方法签名
UINT CreateCESConInDB(DWORD& dwSConID)
参数
dwSConID: 输出参数,返回创建脚本的ID
返回值
- APP_SUCCESS: 创建成功
- APP_CANCLE: 用户取消操作
- APP_FAIL: 创建失败
异常情况
- 在数据库操作中捕获_com_error异常,操作失败时回滚事务
使用场景
- 当用户创建新的1D测量脚本时,此方法处理数据库存储
Section sources
- SptManager.h
- SptManager.cpp
Create2DSConInDB
在数据库中创建2D脚本。
方法签名
UINT Create2DSConInDB(DWORD& dwSConID)
参数
dwSConID: 输出参数,返回创建脚本的ID
返回值
- APP_SUCCESS: 创建成功
- APP_CANCLE: 用户取消操作
- APP_FAIL: 创建失败
异常情况
- 在数据库操作中捕获_com_error异常,操作失败时回滚事务
使用场景
- 当用户创建新的2D测量脚本时,此方法处理数据库存储
Section sources
- SptManager.h
- SptManager.cpp
PutScriptToDev
将脚本下传至设备。
方法签名
UINT PutScriptToDev(DWORD dwSCID, CDevice* const pDev)
参数
dwSCID: 脚本的数据库IDpDev: 指向目标设备的常量指针
返回值
- APP_SUCCESS: 传输成功
- APP_DUPLICATE: 脚本已存在
- APP_FAIL: 传输失败
异常情况
- 处理文件传输失败的情况,删除设备上已创建的脚本以保持一致性
使用场景
- 当需要将数据库中的脚本同步到测量设备时使用
Section sources
- SptManager.h
- SptManager.cpp
LoadScriptFromDev
从设备加载脚本。
方法签名
UINT LoadScriptFromDev(CString szSptFileName, CDevice* const pDev)
参数
szSptFileName: 脚本文件名pDev: 指向源设备的常量指针
返回值
- APP_SUCCESS: 加载成功
- APP_FAIL: 加载失败
异常情况
- 无显式异常处理
使用场景
- 当需要从设备上载脚本到数据库时使用
Section sources
- SptManager.h
- SptManager.cpp
GetScript
获取脚本对象。
方法签名
CScript* GetScript(DWORD dwHandle)
参数
dwHandle: 脚本句柄
返回值
- 成功时返回指向CScript对象的指针,失败时返回NULL
异常情况
- 无显式异常抛出
使用场景
- 在脚本操作过程中,通过句柄获取脚本对象进行操作
Section sources
- SptManager.h
- SptManager.cpp
Delete2DSConInDB
从数据库中删除2D脚本。
方法签名
void Delete2DSConInDB(DWORD dwSConID)
参数
dwSConID: 要删除脚本的ID
返回值
- 无
异常情况
- 无显式异常处理
使用场景
- 当需要从数据库中永久删除2D脚本时使用
Section sources
- SptManager.h
- SptManager.cpp
TdManager API
TdManager类负责管理测试数据(Testing Data)的导入、导出和显示,处理不同类型的测量数据。
公共方法
ShowTdListByTz
根据测区显示测试数据列表。
方法签名
bool ShowTdListByTz(DWORD dwTzHandle, CListCtrl& tdList)
参数
dwTzHandle: 测区句柄tdList: 引用CListCtrl控件,用于显示测试数据列表
返回值
- 操作成功返回true,失败返回false
异常情况
- 捕获_com_error异常并显示错误消息
使用场景
- 在UI中显示特定测区下的所有测试数据列表
Section sources
- TdManager.h
- TdManager.cpp
ShowTdListByProject
根据项目显示测试数据列表。
方法签名
bool ShowTdListByProject(DWORD dwProHandle, CListCtrl& tdList)
参数
dwProHandle: 项目句柄tdList: 引用CListCtrl控件,用于显示测试数据列表
返回值
- 操作成功返回true,失败返回false
异常情况
- 捕获_com_error异常并显示错误消息
使用场景
- 在UI中显示特定项目下的所有测试数据列表
Section sources
- TdManager.h
- TdManager.cpp
Upload2DTdFromDev
从设备上载2D测试数据。
方法签名
BOOL Upload2DTdFromDev(CString szPrCN, CString szTzCN, CString szTdCN, CString strSubTdCN, CDevice* const pDev)
参数
szPrCN: 项目编号szTzCN: 测区编号szTdCN: 测试数据编号strSubTdCN: 子任务编号列表pDev: 指向源设备的常量指针
返回值
- 成功返回TRUE,失败返回FALSE
异常情况
- 无显式异常处理
使用场景
- 当需要从设备上载2D测量数据到数据库时使用
Section sources
- TdManager.h
- TdManager.cpp
Import2DTdConToDB
将2D数据导入数据库。
方法签名
BOOL Import2DTdConToDB(DWORD dwTdID, CString szDatFile, CDevice* const pDev, int* pTSN=NULL)
参数
dwTdID: 测试数据IDszDatFile: DAT文件路径pDev: 指向设备的常量指针pTSN: 可选参数,指定起始测点号
返回值
- 成功返回TRUE,失败返回FALSE
异常情况
- 无显式异常处理
使用场景
- 当需要将设备上的2D测量结果导入数据库进行存储和分析时使用
Section sources
- TdManager.h
- TdManager.cpp
DeleteRsp2DTd
删除2D电阻率数据。
方法签名
void DeleteRsp2DTd(DWORD dwID)
参数
dwID: 要删除数据的ID
返回值
- 无
异常情况
- 无显式异常处理
使用场景
- 当需要从系统中删除2D电阻率测量数据时使用
Section sources
- TdManager.h
- TdManager.cpp
GetTestingData
获取测试数据对象。
方法签名
CTestingData* GetTestingData(DWORD dwHandle)
参数
dwHandle: 测试数据句柄
返回值
- 成功时返回指向CTestingData对象的指针,失败时返回NULL
异常情况
- 无显式异常抛出
使用场景
- 在测试数据操作过程中,通过句柄获取数据对象进行操作
Section sources
- TdManager.h
- TdManager.cpp
IOManager API
IOManager类负责数据的导入和导出功能,支持将项目数据导出为Access数据库文件,以及从外部文件导入数据。
公共方法
Export
导出数据到外部文件。
方法签名
UINT Export()
参数
- 无
返回值
- APP_SUCCESS: 导出成功
- APP_CANCLE: 用户取消操作
- APP_FAIL: 导出失败
异常情况
- 在数据库操作中捕获_com_error异常,操作失败时回滚事务并删除临时文件
使用场景
- 当用户需要将项目数据导出为外部文件进行备份或共享时使用
Section sources
- IOManager.h
- IOManager.cpp
Import
从外部文件导入数据。
方法签名
UINT Import()
参数
- 无
返回值
- APP_SUCCESS: 导入成功
- APP_CANCLE: 用户取消操作或文件错误
- APP_FAIL: 导入失败
异常情况
- 捕获_com_error异常处理数据库连接错误
- 验证导入文件的版本兼容性
使用场景
- 当用户需要从外部文件导入项目数据时使用
Section sources
- IOManager.h
- IOManager.cpp
CreateExpDatabase
创建导出数据库。
方法签名
_ConnectionPtr CreateExpDatabase(CString szFileName)
参数
szFileName: 导出文件的路径和名称
返回值
- 成功时返回指向_ConnectionPtr的指针,失败时返回NULL
异常情况
- 无显式异常处理
使用场景
- 在导出操作中,创建新的Access数据库文件作为导出目标
Section sources
- IOManager.h
- IOManager.cpp
API调用链与依赖关系
各管理器类之间存在明确的调用链和依赖关系,形成了完整的数据管理流程。
设备-项目-脚本-数据调用链
graph TD
A[DevManager] --> |管理| B[设备]
B --> |关联| C[ProManager]
C --> |管理| D[项目]
D --> |包含| E[测区]
E --> |关联| F[SptManager]
F --> |管理| G[脚本]
G --> |执行| H[TdManager]
H --> |管理| I[测试数据]
I --> |存储| J[IOManager]
J --> |导出/导入| K[外部文件]
Diagram sources
- DevManager.h
- ProManager.h
- SptManager.h
- TdManager.h
- IOManager.h
核心依赖关系
- DevManager → ProManager: 设备管理器为项目管理器提供设备信息,项目同步需要设备连接
- ProManager → SptManager: 项目管理器在创建项目时可能需要调用脚本管理器创建默认脚本
- SptManager → TdManager: 脚本管理器在执行测量任务时生成测试数据,由测试数据管理器管理
- TdManager → IOManager: 测试数据管理器依赖IO管理器实现数据的导入导出功能
初始化依赖
系统启动时,各管理器按特定顺序初始化:
- DevManager首先初始化,建立设备连接
- ProManager其次初始化,加载项目结构
- SptManager随后初始化,准备脚本管理
- TdManager最后初始化,准备数据管理
- IOManager在需要时初始化,处理数据交换
线程安全性说明
DevManager
- 线程安全性: 非线程安全
- 说明: DevManager的公共方法未实现线程同步机制。在多线程环境中使用时,需要外部同步控制,避免多个线程同时访问同一设备对象。
ProManager
- 线程安全性: 部分线程安全
- 说明: 数据库操作使用事务保护,但在UI交互部分(如对话框显示)存在潜在的线程安全问题。建议在主线程中调用UI相关方法。
SptManager
- 线程安全性: 非线程安全
- 说明: 脚本创建和管理操作未实现线程同步。特别是Create2DSConInDB和CreateCESConInDB方法涉及复杂的UI交互和数据库操作,应在单线程环境中使用。
TdManager
- 线程安全性: 部分线程安全
- 说明: 数据库操作使用事务保护,但文件操作和UI更新部分存在线程安全风险。ShowTdListByTz等显示方法应在UI线程中调用。
IOManager
- 线程安全性: 非线程安全
- 说明: 导入导出操作涉及文件系统和数据库的复杂交互,未实现线程同步。应避免在多线程环境中同时执行多个导入导出操作。
通用线程使用建议
- UI相关操作: 所有涉及UI显示的方法(如ShowProList、ShowTzList)必须在主线程中调用
- 数据库操作: 虽然使用事务保护,但建议对同一管理器实例的操作进行同步
- 设备通信: 与设备的通信操作应序列化执行,避免多个线程同时访问同一设备
- 数据一致性: 在多线程环境中,应使用锁机制保护共享数据,确保数据一致性
使用示例
创建新项目并同步到设备
// 1. 创建项目
DWORD dwProjectID;
UINT result = theApp.m_pProManager->CreateProjectInDB(dwProjectID);
if (result == APP_SUCCESS) {
// 2. 获取目标设备
CDevice* pDevice = theApp.m_pDevManager->GetDeviceByID(deviceID);
if (pDevice != NULL) {
// 3. 在设备中创建项目
result = theApp.m_pProManager->CreateProjectInDev(dwProjectID, pDevice);
if (result == APP_SUCCESS) {
// 4. 在设备中创建默认测区
result = theApp.m_pProManager->CreateDefaultTzInDev(dwProjectID, pDevice);
if (result == APP_SUCCESS) {
// 项目创建和同步完成
}
}
}
}
创建2D测量脚本并上传到设备
// 1. 创建2D脚本
DWORD dwScriptID;
UINT result = theApp.m_pSptManager->Create2DSConInDB(dwScriptID);
if (result == APP_SUCCESS) {
// 2. 获取目标设备
CDevice* pDevice = theApp.m_pDevManager->GetDeviceByID(deviceID);
if (pDevice != NULL) {
// 3. 将脚本上传到设备
result = theApp.m_pSptManager->PutScriptToDev(dwScriptID, pDevice);
if (result == APP_SUCCESS) {
// 脚本创建和上传完成
}
}
}
从设备上载2D测量数据
// 1. 获取设备
CDevice* pDevice = theApp.m_pDevManager->GetDeviceByID(deviceID);
if (pDevice != NULL) {
// 2. 从设备上载2D数据
BOOL success = theApp.m_pTdManager->Upload2DTdFromDev(
projectCN, zoneCN, dataCN, _T(""), pDevice);
if (success) {
// 3. 数据导入数据库
DWORD dwTdID = theApp.m_pTdManager->ImportTdHeadToDB(
zoneID, headFileName, pDevice);
if (dwTdID != 0) {
// 4. 导入详细数据
theApp.m_pTdManager->Import2DTdConToDB(
dwTdID, datFileName, pDevice);
}
}
}
导出项目数据
// 1. 创建IOManager实例
CIOManager ioManager(theApp.m_pConnection, theApp.m_pCatalog);
// 2. 执行导出操作
UINT result = ioManager.Export();
if (result == APP_SUCCESS) {
// 导出成功
} else if (result == APP_CANCLE) {
// 用户取消
} else {
// 导出失败
}
显示项目下的测区列表
// 1. 获取项目句柄
DWORD dwProHandle = m_handleProcessor.GenerateHandle(projectID, PZ_STYLE_PRO);
// 2. 获取列表控件
CListCtrl& tzList = m_dlg.m_tzList;
// 3. 显示测区列表
bool success = theApp.m_pProManager->ShowTzList(dwProHandle, tzList);
if (success) {
// 列表显示成功
}