902 lines
22 KiB
Markdown
902 lines
22 KiB
Markdown
# API参考
|
|
|
|
<cite>
|
|
**本文档引用的文件**
|
|
- [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)
|
|
</cite>
|
|
|
|
## 目录
|
|
1. [简介](#简介)
|
|
2. [DevManager API](#devmanager-api)
|
|
3. [ProManager API](#promanager-api)
|
|
4. [SptManager API](#sptmanager-api)
|
|
5. [TdManager API](#tdmanager-api)
|
|
6. [IOManager API](#iomanager-api)
|
|
7. [API调用链与依赖关系](#api调用链与依赖关系)
|
|
8. [线程安全性说明](#线程安全性说明)
|
|
9. [使用示例](#使用示例)
|
|
|
|
## 简介
|
|
本文档为Geomative Studio软件系统中的核心管理器类提供详细的API参考。文档涵盖DevManager、ProManager、SptManager、TdManager和IOManager五个核心管理器类的公共接口,详细说明了各方法的签名、参数、返回值、异常情况以及使用场景。同时,文档解释了API的调用顺序、线程安全性,并提供了实际代码示例,为集成开发和自动化脚本提供了必要的技术参考。
|
|
|
|
## DevManager API
|
|
|
|
DevManager类负责管理设备的生命周期,包括设备的添加、删除、查询和状态更新。该管理器维护设备在内存中的链接列表,并处理与数据库的交互。
|
|
|
|
### 公共方法
|
|
|
|
#### GetDeviceByID
|
|
根据设备ID获取设备对象。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
CDevice* GetDeviceByID(DWORD dwDevID)
|
|
```
|
|
|
|
**参数**
|
|
- `dwDevID`: 设备的唯一标识符
|
|
|
|
**返回值**
|
|
- 成功时返回指向CDevice对象的指针,失败时返回NULL
|
|
|
|
**异常情况**
|
|
- 无显式异常抛出,但会通过调试输出记录操作日志
|
|
|
|
**使用场景**
|
|
- 当需要根据设备ID查找特定设备时使用
|
|
|
|
**Section sources**
|
|
- [DevManager.h](file://h\DevManager.h#L21)
|
|
- [DevManager.cpp](file://cpp\Managers\DevManager.cpp#L48-L68)
|
|
|
|
#### GetDevice
|
|
根据设备句柄获取设备对象。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
CDevice* GetDevice(DWORD dwHandle)
|
|
```
|
|
|
|
**参数**
|
|
- `dwHandle`: 设备的句柄
|
|
|
|
**返回值**
|
|
- 成功时返回指向CDevice对象的指针,失败时返回NULL
|
|
|
|
**异常情况**
|
|
- 无显式异常抛出
|
|
|
|
**使用场景**
|
|
- 在设备操作过程中,通过句柄快速获取设备对象
|
|
|
|
**Section sources**
|
|
- [DevManager.h](file://h\DevManager.h#L22)
|
|
- [DevManager.cpp](file://cpp\Managers\DevManager.cpp#L82-L89)
|
|
|
|
#### AddDevice
|
|
向系统中添加新设备。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
BOOL AddDevice(CDevice* const pDev)
|
|
```
|
|
|
|
**参数**
|
|
- `pDev`: 指向要添加的设备对象的常量指针
|
|
|
|
**返回值**
|
|
- 成功时返回TRUE,失败时返回FALSE
|
|
|
|
**异常情况**
|
|
- 在数据库事务处理中捕获_com_error异常,并显示错误消息
|
|
- 操作失败时会回滚数据库事务
|
|
|
|
**使用场景**
|
|
- 当检测到新设备并需要将其注册到系统中时使用
|
|
|
|
**Section sources**
|
|
- [DevManager.h](file://h\DevManager.h#L30)
|
|
- [DevManager.cpp](file://cpp\Managers\DevManager.cpp#L203-L280)
|
|
|
|
#### DeleteDevice
|
|
从系统中删除设备。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
BOOL DeleteDevice(DWORD dwHandle)
|
|
```
|
|
|
|
**参数**
|
|
- `dwHandle`: 要删除设备的句柄
|
|
|
|
**返回值**
|
|
- 成功时返回TRUE,失败时返回FALSE
|
|
|
|
**异常情况**
|
|
- 捕获所有异常,操作失败时回滚数据库事务
|
|
|
|
**使用场景**
|
|
- 当设备被移除或不再需要时,从系统中彻底删除设备
|
|
|
|
**Section sources**
|
|
- [DevManager.h](file://h\DevManager.h#L37)
|
|
- [DevManager.cpp](file://cpp\Managers\DevManager.cpp#L383-L432)
|
|
|
|
#### InitialDevLinkList
|
|
初始化设备链接列表。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
void InitialDevLinkList()
|
|
```
|
|
|
|
**参数**
|
|
- 无
|
|
|
|
**返回值**
|
|
- 无
|
|
|
|
**异常情况**
|
|
- 无显式异常处理
|
|
|
|
**使用场景**
|
|
- 在系统启动或设备管理器初始化时,重新加载所有设备到内存中
|
|
|
|
**Section sources**
|
|
- [DevManager.h](file://h\DevManager.h#L29)
|
|
- [DevManager.cpp](file://cpp\Managers\DevManager.cpp#L160-L201)
|
|
|
|
#### UpdateDevInfo
|
|
更新设备信息。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
void UpdateDevInfo(STSynDevParam stDevParam, BYTE bRemoteDeveTyp)
|
|
```
|
|
|
|
**参数**
|
|
- `stDevParam`: 包含设备参数的结构体
|
|
- `bRemoteDeveTyp`: 远程设备类型
|
|
|
|
**返回值**
|
|
- 无
|
|
|
|
**异常情况**
|
|
- 捕获_com_error异常并显示错误信息
|
|
|
|
**使用场景**
|
|
- 当从设备接收到同步参数时,更新数据库中的设备信息
|
|
|
|
**Section sources**
|
|
- [DevManager.h](file://h\DevManager.h#L39)
|
|
- [DevManager.cpp](file://cpp\Managers\DevManager.cpp#L592-L641)
|
|
|
|
## ProManager API
|
|
|
|
ProManager类负责管理项目(Project)和测区(Testing Zone)的层次结构,处理项目与设备之间的同步。
|
|
|
|
### 公共方法
|
|
|
|
#### CreateProjectInDB
|
|
在数据库中创建新项目。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
UINT CreateProjectInDB(DWORD& dwID)
|
|
```
|
|
|
|
**参数**
|
|
- `dwID`: 输出参数,返回创建项目的ID
|
|
|
|
**返回值**
|
|
- APP_SUCCESS: 创建成功
|
|
- APP_CANCLE: 用户取消操作
|
|
- APP_FAIL: 创建失败
|
|
|
|
**异常情况**
|
|
- 在数据库操作中捕获_com_error异常,显示适当的错误消息并回滚事务
|
|
|
|
**使用场景**
|
|
- 当用户通过UI创建新项目时,此方法处理数据库层面的创建逻辑
|
|
|
|
**Section sources**
|
|
- [ProManager.h](file://h\ProManager.h#L51)
|
|
- [ProManager.cpp](file://cpp\Managers\ProManager.cpp#L249-L316)
|
|
|
|
#### CreateProjectInDev
|
|
在设备中创建项目。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
UINT CreateProjectInDev(DWORD dwID, CDevice* const pDev)
|
|
```
|
|
|
|
**参数**
|
|
- `dwID`: 项目的数据库ID
|
|
- `pDev`: 指向目标设备的常量指针
|
|
|
|
**返回值**
|
|
- APP_SUCCESS: 创建成功
|
|
- APP_DUPLICATE: 项目已存在
|
|
- APP_FAIL: 创建失败
|
|
- APP_OVERFLOW: 项目数量超出限制
|
|
|
|
**异常情况**
|
|
- 处理文件传输失败的情况,删除已创建的项目以保持一致性
|
|
|
|
**使用场景**
|
|
- 当项目在数据库中创建后,需要将项目同步到指定设备时使用
|
|
|
|
**Section sources**
|
|
- [ProManager.h](file://h\ProManager.h#L50)
|
|
- [ProManager.cpp](file://cpp\Managers\ProManager.cpp#L343-L482)
|
|
|
|
#### CreateDefaultTzInDev
|
|
在设备中为项目创建默认测区。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
UINT CreateDefaultTzInDev(DWORD dwProID, CDevice* const pDev)
|
|
```
|
|
|
|
**参数**
|
|
- `dwProID`: 项目的ID
|
|
- `pDev`: 指向目标设备的常量指针
|
|
|
|
**返回值**
|
|
- APP_SUCCESS: 创建成功
|
|
- APP_DUPLICATE: 测区已存在
|
|
- APP_FAIL: 创建失败
|
|
|
|
**异常情况**
|
|
- 在数据库操作中捕获_com_error异常,操作失败时回滚事务
|
|
|
|
**使用场景**
|
|
- 当项目在设备中创建后,自动创建默认测区以确保项目结构完整性
|
|
|
|
**Section sources**
|
|
- [ProManager.h](file://h\ProManager.h#L60)
|
|
- [ProManager.cpp](file://cpp\Managers\ProManager.cpp#L485-L706)
|
|
|
|
#### ShowProList
|
|
显示设备关联的项目列表。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
bool ShowProList(DWORD dwDevHandle, CListCtrl& proList)
|
|
```
|
|
|
|
**参数**
|
|
- `dwDevHandle`: 设备句柄
|
|
- `proList`: 引用CListCtrl控件,用于显示项目列表
|
|
|
|
**返回值**
|
|
- 操作成功返回true,失败返回false
|
|
|
|
**异常情况**
|
|
- 无显式异常处理
|
|
|
|
**使用场景**
|
|
- 在UI中显示特定设备关联的所有项目列表
|
|
|
|
**Section sources**
|
|
- [ProManager.h](file://h\ProManager.h#L56)
|
|
- [ProManager.cpp](file://cpp\Managers\ProManager.cpp#L184-L246)
|
|
|
|
#### ShowTzList
|
|
显示项目关联的测区列表。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
bool ShowTzList(DWORD dwProHandle, CListCtrl& tzList)
|
|
```
|
|
|
|
**参数**
|
|
- `dwProHandle`: 项目句柄
|
|
- `tzList`: 引用CListCtrl控件,用于显示测区列表
|
|
|
|
**返回值**
|
|
- 操作成功返回true,失败返回false
|
|
|
|
**异常情况**
|
|
- 无显式异常处理
|
|
|
|
**使用场景**
|
|
- 在UI中显示特定项目下的所有测区列表
|
|
|
|
**Section sources**
|
|
- [ProManager.h](file://h\ProManager.h#L58)
|
|
- [ProManager.cpp](file://cpp\Managers\ProManager.cpp#L53-L92)
|
|
|
|
#### DeleteProjectInDB
|
|
从数据库中删除项目。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
void DeleteProjectInDB(DWORD dwID)
|
|
```
|
|
|
|
**参数**
|
|
- `dwID`: 要删除项目的ID
|
|
|
|
**返回值**
|
|
- 无
|
|
|
|
**异常情况**
|
|
- 无显式异常处理
|
|
|
|
**使用场景**
|
|
- 当需要从数据库中永久删除项目及其相关数据时使用
|
|
|
|
**Section sources**
|
|
- [ProManager.h](file://h\ProManager.h#L48)
|
|
- [ProManager.cpp](file://cpp\Managers\ProManager.cpp#L485-L706)
|
|
|
|
## SptManager API
|
|
|
|
SptManager类负责管理脚本(Script)的创建、删除和同步,支持1D、2D和3D测量脚本。
|
|
|
|
### 公共方法
|
|
|
|
#### CreateCESConInDB
|
|
在数据库中创建1D脚本。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
UINT CreateCESConInDB(DWORD& dwSConID)
|
|
```
|
|
|
|
**参数**
|
|
- `dwSConID`: 输出参数,返回创建脚本的ID
|
|
|
|
**返回值**
|
|
- APP_SUCCESS: 创建成功
|
|
- APP_CANCLE: 用户取消操作
|
|
- APP_FAIL: 创建失败
|
|
|
|
**异常情况**
|
|
- 在数据库操作中捕获_com_error异常,操作失败时回滚事务
|
|
|
|
**使用场景**
|
|
- 当用户创建新的1D测量脚本时,此方法处理数据库存储
|
|
|
|
**Section sources**
|
|
- [SptManager.h](file://h\SptManager.h#L41)
|
|
- [SptManager.cpp](file://cpp\Managers\SptManager.cpp#L548-L795)
|
|
|
|
#### Create2DSConInDB
|
|
在数据库中创建2D脚本。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
UINT Create2DSConInDB(DWORD& dwSConID)
|
|
```
|
|
|
|
**参数**
|
|
- `dwSConID`: 输出参数,返回创建脚本的ID
|
|
|
|
**返回值**
|
|
- APP_SUCCESS: 创建成功
|
|
- APP_CANCLE: 用户取消操作
|
|
- APP_FAIL: 创建失败
|
|
|
|
**异常情况**
|
|
- 在数据库操作中捕获_com_error异常,操作失败时回滚事务
|
|
|
|
**使用场景**
|
|
- 当用户创建新的2D测量脚本时,此方法处理数据库存储
|
|
|
|
**Section sources**
|
|
- [SptManager.h](file://h\SptManager.h#L44)
|
|
- [SptManager.cpp](file://cpp\Managers\SptManager.cpp#L257-L486)
|
|
|
|
#### PutScriptToDev
|
|
将脚本下传至设备。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
UINT PutScriptToDev(DWORD dwSCID, CDevice* const pDev)
|
|
```
|
|
|
|
**参数**
|
|
- `dwSCID`: 脚本的数据库ID
|
|
- `pDev`: 指向目标设备的常量指针
|
|
|
|
**返回值**
|
|
- APP_SUCCESS: 传输成功
|
|
- APP_DUPLICATE: 脚本已存在
|
|
- APP_FAIL: 传输失败
|
|
|
|
**异常情况**
|
|
- 处理文件传输失败的情况,删除设备上已创建的脚本以保持一致性
|
|
|
|
**使用场景**
|
|
- 当需要将数据库中的脚本同步到测量设备时使用
|
|
|
|
**Section sources**
|
|
- [SptManager.h](file://h\SptManager.h#L34)
|
|
- [SptManager.cpp](file://cpp\Managers\SptManager.cpp#L257-L486)
|
|
|
|
#### LoadScriptFromDev
|
|
从设备加载脚本。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
UINT LoadScriptFromDev(CString szSptFileName, CDevice* const pDev)
|
|
```
|
|
|
|
**参数**
|
|
- `szSptFileName`: 脚本文件名
|
|
- `pDev`: 指向源设备的常量指针
|
|
|
|
**返回值**
|
|
- APP_SUCCESS: 加载成功
|
|
- APP_FAIL: 加载失败
|
|
|
|
**异常情况**
|
|
- 无显式异常处理
|
|
|
|
**使用场景**
|
|
- 当需要从设备上载脚本到数据库时使用
|
|
|
|
**Section sources**
|
|
- [SptManager.h](file://h\SptManager.h#L33)
|
|
- [SptManager.cpp](file://cpp\Managers\SptManager.cpp#L257-L486)
|
|
|
|
#### GetScript
|
|
获取脚本对象。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
CScript* GetScript(DWORD dwHandle)
|
|
```
|
|
|
|
**参数**
|
|
- `dwHandle`: 脚本句柄
|
|
|
|
**返回值**
|
|
- 成功时返回指向CScript对象的指针,失败时返回NULL
|
|
|
|
**异常情况**
|
|
- 无显式异常抛出
|
|
|
|
**使用场景**
|
|
- 在脚本操作过程中,通过句柄获取脚本对象进行操作
|
|
|
|
**Section sources**
|
|
- [SptManager.h](file://h\SptManager.h#L38)
|
|
- [SptManager.cpp](file://cpp\Managers\SptManager.cpp#L127-L156)
|
|
|
|
#### Delete2DSConInDB
|
|
从数据库中删除2D脚本。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
void Delete2DSConInDB(DWORD dwSConID)
|
|
```
|
|
|
|
**参数**
|
|
- `dwSConID`: 要删除脚本的ID
|
|
|
|
**返回值**
|
|
- 无
|
|
|
|
**异常情况**
|
|
- 无显式异常处理
|
|
|
|
**使用场景**
|
|
- 当需要从数据库中永久删除2D脚本时使用
|
|
|
|
**Section sources**
|
|
- [SptManager.h](file://h\SptManager.h#L45)
|
|
- [SptManager.cpp](file://cpp\Managers\SptManager.cpp#L505-L546)
|
|
|
|
## TdManager API
|
|
|
|
TdManager类负责管理测试数据(Testing Data)的导入、导出和显示,处理不同类型的测量数据。
|
|
|
|
### 公共方法
|
|
|
|
#### ShowTdListByTz
|
|
根据测区显示测试数据列表。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
bool ShowTdListByTz(DWORD dwTzHandle, CListCtrl& tdList)
|
|
```
|
|
|
|
**参数**
|
|
- `dwTzHandle`: 测区句柄
|
|
- `tdList`: 引用CListCtrl控件,用于显示测试数据列表
|
|
|
|
**返回值**
|
|
- 操作成功返回true,失败返回false
|
|
|
|
**异常情况**
|
|
- 捕获_com_error异常并显示错误消息
|
|
|
|
**使用场景**
|
|
- 在UI中显示特定测区下的所有测试数据列表
|
|
|
|
**Section sources**
|
|
- [TdManager.h](file://h\TdManager.h#L84)
|
|
- [TdManager.cpp](file://cpp\Managers\TdManager.cpp#L409-L682)
|
|
|
|
#### ShowTdListByProject
|
|
根据项目显示测试数据列表。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
bool ShowTdListByProject(DWORD dwProHandle, CListCtrl& tdList)
|
|
```
|
|
|
|
**参数**
|
|
- `dwProHandle`: 项目句柄
|
|
- `tdList`: 引用CListCtrl控件,用于显示测试数据列表
|
|
|
|
**返回值**
|
|
- 操作成功返回true,失败返回false
|
|
|
|
**异常情况**
|
|
- 捕获_com_error异常并显示错误消息
|
|
|
|
**使用场景**
|
|
- 在UI中显示特定项目下的所有测试数据列表
|
|
|
|
**Section sources**
|
|
- [TdManager.h](file://h\TdManager.h#L89)
|
|
- [TdManager.cpp](file://cpp\Managers\TdManager.cpp#L81-L406)
|
|
|
|
#### Upload2DTdFromDev
|
|
从设备上载2D测试数据。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
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](file://h\TdManager.h#L57)
|
|
- [TdManager.cpp](file://cpp\Managers\TdManager.cpp#L81-L406)
|
|
|
|
#### Import2DTdConToDB
|
|
将2D数据导入数据库。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
BOOL Import2DTdConToDB(DWORD dwTdID, CString szDatFile, CDevice* const pDev, int* pTSN=NULL)
|
|
```
|
|
|
|
**参数**
|
|
- `dwTdID`: 测试数据ID
|
|
- `szDatFile`: DAT文件路径
|
|
- `pDev`: 指向设备的常量指针
|
|
- `pTSN`: 可选参数,指定起始测点号
|
|
|
|
**返回值**
|
|
- 成功返回TRUE,失败返回FALSE
|
|
|
|
**异常情况**
|
|
- 无显式异常处理
|
|
|
|
**使用场景**
|
|
- 当需要将设备上的2D测量结果导入数据库进行存储和分析时使用
|
|
|
|
**Section sources**
|
|
- [TdManager.h](file://h\TdManager.h#L47)
|
|
- [TdManager.cpp](file://cpp\Managers\TdManager.cpp#L81-L406)
|
|
|
|
#### DeleteRsp2DTd
|
|
删除2D电阻率数据。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
void DeleteRsp2DTd(DWORD dwID)
|
|
```
|
|
|
|
**参数**
|
|
- `dwID`: 要删除数据的ID
|
|
|
|
**返回值**
|
|
- 无
|
|
|
|
**异常情况**
|
|
- 无显式异常处理
|
|
|
|
**使用场景**
|
|
- 当需要从系统中删除2D电阻率测量数据时使用
|
|
|
|
**Section sources**
|
|
- [TdManager.h](file://h\TdManager.h#L79)
|
|
- [TdManager.cpp](file://cpp\Managers\TdManager.cpp#L81-L406)
|
|
|
|
#### GetTestingData
|
|
获取测试数据对象。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
CTestingData* GetTestingData(DWORD dwHandle)
|
|
```
|
|
|
|
**参数**
|
|
- `dwHandle`: 测试数据句柄
|
|
|
|
**返回值**
|
|
- 成功时返回指向CTestingData对象的指针,失败时返回NULL
|
|
|
|
**异常情况**
|
|
- 无显式异常抛出
|
|
|
|
**使用场景**
|
|
- 在测试数据操作过程中,通过句柄获取数据对象进行操作
|
|
|
|
**Section sources**
|
|
- [TdManager.h](file://h\TdManager.h#L82)
|
|
- [TdManager.cpp](file://cpp\Managers\TdManager.cpp#L81-L406)
|
|
|
|
## IOManager API
|
|
|
|
IOManager类负责数据的导入和导出功能,支持将项目数据导出为Access数据库文件,以及从外部文件导入数据。
|
|
|
|
### 公共方法
|
|
|
|
#### Export
|
|
导出数据到外部文件。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
UINT Export()
|
|
```
|
|
|
|
**参数**
|
|
- 无
|
|
|
|
**返回值**
|
|
- APP_SUCCESS: 导出成功
|
|
- APP_CANCLE: 用户取消操作
|
|
- APP_FAIL: 导出失败
|
|
|
|
**异常情况**
|
|
- 在数据库操作中捕获_com_error异常,操作失败时回滚事务并删除临时文件
|
|
|
|
**使用场景**
|
|
- 当用户需要将项目数据导出为外部文件进行备份或共享时使用
|
|
|
|
**Section sources**
|
|
- [IOManager.h](file://h\IOManager.h#L20)
|
|
- [IOManager.cpp](file://cpp\Managers\IOManager.cpp#L35-L98)
|
|
|
|
#### Import
|
|
从外部文件导入数据。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
UINT Import()
|
|
```
|
|
|
|
**参数**
|
|
- 无
|
|
|
|
**返回值**
|
|
- APP_SUCCESS: 导入成功
|
|
- APP_CANCLE: 用户取消操作或文件错误
|
|
- APP_FAIL: 导入失败
|
|
|
|
**异常情况**
|
|
- 捕获_com_error异常处理数据库连接错误
|
|
- 验证导入文件的版本兼容性
|
|
|
|
**使用场景**
|
|
- 当用户需要从外部文件导入项目数据时使用
|
|
|
|
**Section sources**
|
|
- [IOManager.h](file://h\IOManager.h#L19)
|
|
- [IOManager.cpp](file://cpp\Managers\IOManager.cpp#L101-L203)
|
|
|
|
#### CreateExpDatabase
|
|
创建导出数据库。
|
|
|
|
**方法签名**
|
|
```cpp
|
|
_ConnectionPtr CreateExpDatabase(CString szFileName)
|
|
```
|
|
|
|
**参数**
|
|
- `szFileName`: 导出文件的路径和名称
|
|
|
|
**返回值**
|
|
- 成功时返回指向_ConnectionPtr的指针,失败时返回NULL
|
|
|
|
**异常情况**
|
|
- 无显式异常处理
|
|
|
|
**使用场景**
|
|
- 在导出操作中,创建新的Access数据库文件作为导出目标
|
|
|
|
**Section sources**
|
|
- [IOManager.h](file://h\IOManager.h#L45)
|
|
- [IOManager.cpp](file://cpp\Managers\IOManager.cpp#L206-L655)
|
|
|
|
## API调用链与依赖关系
|
|
|
|
各管理器类之间存在明确的调用链和依赖关系,形成了完整的数据管理流程。
|
|
|
|
### 设备-项目-脚本-数据调用链
|
|
```mermaid
|
|
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](file://h\DevManager.h)
|
|
- [ProManager.h](file://h\ProManager.h)
|
|
- [SptManager.h](file://h\SptManager.h)
|
|
- [TdManager.h](file://h\TdManager.h)
|
|
- [IOManager.h](file://h\IOManager.h)
|
|
|
|
### 核心依赖关系
|
|
1. **DevManager → ProManager**: 设备管理器为项目管理器提供设备信息,项目同步需要设备连接
|
|
2. **ProManager → SptManager**: 项目管理器在创建项目时可能需要调用脚本管理器创建默认脚本
|
|
3. **SptManager → TdManager**: 脚本管理器在执行测量任务时生成测试数据,由测试数据管理器管理
|
|
4. **TdManager → IOManager**: 测试数据管理器依赖IO管理器实现数据的导入导出功能
|
|
|
|
### 初始化依赖
|
|
系统启动时,各管理器按特定顺序初始化:
|
|
1. DevManager首先初始化,建立设备连接
|
|
2. ProManager其次初始化,加载项目结构
|
|
3. SptManager随后初始化,准备脚本管理
|
|
4. TdManager最后初始化,准备数据管理
|
|
5. IOManager在需要时初始化,处理数据交换
|
|
|
|
## 线程安全性说明
|
|
|
|
### DevManager
|
|
- **线程安全性**: 非线程安全
|
|
- **说明**: DevManager的公共方法未实现线程同步机制。在多线程环境中使用时,需要外部同步控制,避免多个线程同时访问同一设备对象。
|
|
|
|
### ProManager
|
|
- **线程安全性**: 部分线程安全
|
|
- **说明**: 数据库操作使用事务保护,但在UI交互部分(如对话框显示)存在潜在的线程安全问题。建议在主线程中调用UI相关方法。
|
|
|
|
### SptManager
|
|
- **线程安全性**: 非线程安全
|
|
- **说明**: 脚本创建和管理操作未实现线程同步。特别是Create2DSConInDB和CreateCESConInDB方法涉及复杂的UI交互和数据库操作,应在单线程环境中使用。
|
|
|
|
### TdManager
|
|
- **线程安全性**: 部分线程安全
|
|
- **说明**: 数据库操作使用事务保护,但文件操作和UI更新部分存在线程安全风险。ShowTdListByTz等显示方法应在UI线程中调用。
|
|
|
|
### IOManager
|
|
- **线程安全性**: 非线程安全
|
|
- **说明**: 导入导出操作涉及文件系统和数据库的复杂交互,未实现线程同步。应避免在多线程环境中同时执行多个导入导出操作。
|
|
|
|
### 通用线程使用建议
|
|
1. **UI相关操作**: 所有涉及UI显示的方法(如ShowProList、ShowTzList)必须在主线程中调用
|
|
2. **数据库操作**: 虽然使用事务保护,但建议对同一管理器实例的操作进行同步
|
|
3. **设备通信**: 与设备的通信操作应序列化执行,避免多个线程同时访问同一设备
|
|
4. **数据一致性**: 在多线程环境中,应使用锁机制保护共享数据,确保数据一致性
|
|
|
|
## 使用示例
|
|
|
|
### 创建新项目并同步到设备
|
|
```cpp
|
|
// 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测量脚本并上传到设备
|
|
```cpp
|
|
// 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测量数据
|
|
```cpp
|
|
// 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);
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### 导出项目数据
|
|
```cpp
|
|
// 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 {
|
|
// 导出失败
|
|
}
|
|
```
|
|
|
|
### 显示项目下的测区列表
|
|
```cpp
|
|
// 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) {
|
|
// 列表显示成功
|
|
}
|
|
``` |