Files
coco df489d5640 a
2026-07-03 16:05:30 +08:00

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) {
// 列表显示成功
}
```