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

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)

目录

  1. 简介
  2. DevManager API
  3. ProManager API
  4. SptManager API
  5. TdManager API
  6. IOManager API
  7. API调用链与依赖关系
  8. 线程安全性说明
  9. 使用示例

简介

本文档为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

初始化设备链接列表。

方法签名

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: 项目的数据库ID
  • pDev: 指向目标设备的常量指针

返回值

  • APP_SUCCESS: 创建成功
  • APP_DUPLICATE: 项目已存在
  • APP_FAIL: 创建失败
  • APP_OVERFLOW: 项目数量超出限制

异常情况

  • 处理文件传输失败的情况,删除已创建的项目以保持一致性

使用场景

  • 当项目在数据库中创建后,需要将项目同步到指定设备时使用

Section sources

  • ProManager.h
  • ProManager.cpp

CreateDefaultTzInDev

在设备中为项目创建默认测区。

方法签名

UINT CreateDefaultTzInDev(DWORD dwProID, CDevice* const pDev)

参数

  • dwProID: 项目的ID
  • pDev: 指向目标设备的常量指针

返回值

  • 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: 脚本的数据库ID
  • pDev: 指向目标设备的常量指针

返回值

  • 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: 测试数据ID
  • szDatFile: 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

核心依赖关系

  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. 数据一致性: 在多线程环境中,应使用锁机制保护共享数据,确保数据一致性

使用示例

创建新项目并同步到设备

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