# Third / COM

以下为调用第三方运行环境或外部组件的函数。

本页提供 COM 运行环境初始化和按 GUID 创建 COM 对象的函数。

下文创建 COM 对象的示例使用 Windows 自带的 `Scripting.Dictionary`，不会启动 Excel 等桌面程序。

在 COM 模式下（例如通过 Excel COM 对象操作 XLS 文件），COM 的 `ERROR` 类型和 TSL 之间按以下规则转换：

- COM 转 TSL：`ERROR` 转为特殊的 `NAN`，可用 `cverrget` 取回错误号。
- TSL 转 COM：用 `cverr` 把错误号转为携带该错误号的特殊 `NAN`。

## `coInitialize()`

声明：function

Ole初始化

<!-- tags: COM OLE 自动化 -->

返回：any

### 示例

```tsl
return coInitialize();
// 输出：0
```

## `coUnInitialize()`

声明：function

Ole结束

<!-- tags: COM OLE 自动化 -->

返回：any

### 示例

```tsl
coInitialize();
return coUnInitialize();
// 输出：0
```

## `createComObject(guid, obj)`

声明：function

创建COM对象。如果创建成功则返回真，否则返回假

<!-- tags: COM 创建 生成 OLE 自动化 -->

| 参数   | 类型   | 说明             |
| ------ | ------ | ---------------- |
| `guid` | string | 对象的类GUID串。 |
| `obj`  | comobj | 保存创建的对象。 |

返回：bool

### 示例

```tsl
obj := nil;
return createComObject('{EE09B103-97E0-11CF-978F-00A02463E06F}', obj);
// 输出：1
```

## `cverr(v)`

声明：function

将 COM 错误号转为携带该错误号的特殊 `NAN` 数据

<!-- tags: COM OLE 自动化 NAN -->

这些错误号由 Excel 定义。常见值包括：

- `0x800A07D7`：`#DIV/0!`
- `0x800A07FA`：`#N/A`
- `0x800A07ED`：`#NAME?`
- `0x800A07D0`：`#NULL!`
- `0x800A07F4`：`#NUM!`
- `0x800A07E7`：`#REF!`
- `0x800A07DF`：`#VALUE!`

在 AnalyseNG.NET 的 `excelSetCell` 或 `excelSetCells` 中，系统会自动把普通 `NAN` 和 `INF` 转为相应的 Excel 错误；由 `cverr` 生成的特殊 `NAN` 会保留指定错误号。

| 参数 | 类型  | 说明 |
| ---- | ----- | ---- |
| `v`  | int64 |      |

返回：real

### 示例

```tsl
return cverr(0x800A07E7);
// 输出：NAN
```

## `cverrget(v)`

声明：function

获取特殊 `NAN` 中的 COM 错误号。返回值的高位不确定，只应使用低 32 位

<!-- tags: COM 获取 查询 OLE 自动化 NAN -->

使用 `.& 0xFFFFFFFFL` 取低 32 位；不带 `L` 的 `0xFFFFFFFF` 会被解释为 `-1`，无法清除高位。

| 参数 | 类型   | 说明 |
| ---- | ------ | ---- |
| `v`  | double |      |

返回：int64

### 示例

```tsl
error_value := cverr(0x800A07E7);
return cverrget(error_value) .& 0xFFFFFFFFL;
// 输出：2148141031
```

## `getOleObject(class_name, method, obj)`

声明：function

获取一个ComObj对象类型

<!-- tags: COM 获取 查询 OLE 自动化 -->

| 参数         | 类型    | 说明                                                                                                          |
| ------------ | ------- | ------------------------------------------------------------------------------------------------------------- |
| `class_name` | string  | 字符串，对象的类名。                                                                                          |
| `method`     | integer | 整数，产生方法的方法，1:获取一个存在的对象，2:新建一个对象，其他值:如果存在则获取一个存在对象，不存在则创建。 |
| `obj`        | comobj  | 保存返回的对象。                                                                                              |

返回：bool

### 示例

```tsl
obj := nil;
return getOleObject('Scripting.Dictionary', 2, obj);
// 输出：1
```

## `TSExpert.CoExec`

声明：class

天软客户端 COM 自动化接口

<!-- tags: COM OLE 自动化 -->

以下调用项是该接口的实例方法和属性，不是 TSL 全局函数

### `adminCommand(command, timeout, no_data_timeout, recv_string, broad_string, err_msg)`

声明：function

提交管理员命令

<!-- tags: COM OLE 自动化 -->

可见性：`public`

| 参数              | 类型       | 说明                             |
| ----------------- | ---------- | -------------------------------- |
| `command`         | widestring | 提交的管理员命令串               |
| `timeout`         | integer    | 命令超时的毫秒数                 |
| `no_data_timeout` | integer    | 收到首个数据后无数据等待的毫秒数 |
| `recv_string`     | olevariant | 输出参数，返回命令结果串         |
| `broad_string`    | olevariant | 输出参数，返回广播消息串         |
| `err_msg`         | olevariant | 输出参数，发生错误时返回错误信息 |

返回：olevariant

返回 `0` 表示成功，其他值为错误码

### `getSysParam(param_name)`

声明：function

返回系统参数的值

<!-- tags: COM 返回 获取 OLE 自动化 -->

可见性：`public`

| 参数         | 类型       | 说明       |
| ------------ | ---------- | ---------- |
| `param_name` | widestring | 系统参数名 |

返回：olevariant

### `localCallFunc(func_name, params)`

声明：function

利用本地解释器执行一个函数

<!-- tags: COM OLE 自动化 -->

可见性：`public`

| 参数        | 类型       | 说明                        |
| ----------- | ---------- | --------------------------- |
| `func_name` | widestring | 需要调用的函数名            |
| `params`    | olevariant | 保存调用参数的 Variant 数组 |

返回：olevariant

### `localExecute(execute_str)`

声明：function

利用本地解释器执行一段 TSL 脚本

<!-- tags: COM OLE 自动化 -->

可见性：`public`

| 参数          | 类型       | 说明           |
| ------------- | ---------- | -------------- |
| `execute_str` | widestring | 需要执行的脚本 |

返回：olevariant

### `remoteCallFunc(func_name, params)`

声明：function

利用平台执行一个函数

<!-- tags: COM OLE 自动化 -->

可见性：`public`

| 参数        | 类型       | 说明                        |
| ----------- | ---------- | --------------------------- |
| `func_name` | widestring | 需要调用的函数名            |
| `params`    | olevariant | 保存调用参数的 Variant 数组 |

返回：olevariant

### `remoteExecute(execute_str)`

声明：function

利用平台执行一段 TSL 脚本

<!-- tags: COM OLE 自动化 -->

可见性：`public`

| 参数          | 类型       | 说明           |
| ------------- | ---------- | -------------- |
| `execute_str` | widestring | 需要执行的脚本 |

返回：olevariant

### `resetSysParam()`

声明：function

清除重置系统参数

<!-- tags: COM 清除 重置 OLE 自动化 -->

可见性：`public`

时间重置为当前时间，证券重置为上证指数，周期重置为日线，复权类型重置为不复权，复权基准日重置为 `0`，保留小数位数重置为 `4`，股票列表和时间列表重置为空

### `setSysParam(param_name, param_value)`

声明：function

设置系统参数，对本地执行和平台执行均有效

<!-- tags: COM 设置 修改 OLE 自动化 -->

可见性：`public`

| 参数          | 类型       | 说明           |
| ------------- | ---------- | -------------- |
| `param_name`  | widestring | 系统参数名     |
| `param_value` | olevariant | 要设置的参数值 |

### `simplyAdminCommand(command, timeout, no_data_timeout)`

声明：function

提交管理员命令并返回命令结果串

<!-- tags: COM OLE 自动化 -->

可见性：`public`

| 参数              | 类型       | 说明                             |
| ----------------- | ---------- | -------------------------------- |
| `command`         | widestring | 提交的管理员命令串               |
| `timeout`         | integer    | 命令超时的毫秒数                 |
| `no_data_timeout` | integer    | 收到首个数据后无数据等待的毫秒数 |

返回：olevariant

### `bk`

声明：property

获取或设置默认板块系统参数

<!-- tags: COM 获取 查询 OLE 自动化 -->

可见性：`public`

类型：widestring

访问：read / write

### `bks`

声明：property

板块组参数，批量调用时使用；取消批量板块时设置 `bk`

<!-- tags: COM OLE 自动化 -->

可见性：`public`

类型：olevariant

访问：read / write

### `computeBitsOption`

声明：property

计算位数选项，`0` 表示自动选择，`1` 表示 32 位服务器，`2` 表示 64 位服务器

<!-- tags: COM 计算 求解 OLE 自动化 -->

可见性：`public`

类型：byte

访问：read / write

### `computeService`

声明：property

计算服务群组，空字符串表示默认服务，`auto` 表示自动选择，其他值表示指定服务群组

<!-- tags: COM 计算 求解 OLE 自动化 -->

可见性：`public`

类型：string

访问：read / write

### `cycle`

声明：property

获取或设置当前周期系统参数

<!-- tags: COM 获取 查询 OLE 自动化 -->

可见性：`public`

类型：widestring

访问：read / write

### `i64Trans`

声明：property

TSL `Int64` 到 COM 的转换规则：`0` 转为 64 位整数，`1` 转为 32 位整数，`2` 转为双精度浮点数

<!-- tags: COM OLE 自动化 -->

可见性：`public`

类型：integer

访问：read / write

### `keepRawData`

声明：property

二维数据转换规则：`0` 将单行和单列转为一维数组，`1` 保留原始结构，`2` 仅转换单列，`3` 仅转换单行

<!-- tags: COM 转换 编码 OLE 自动化 -->

可见性：`public`

类型：integer

访问：read / write

### `logined`

声明：property

指示是否已经登录成功

<!-- tags: COM 连接 登录 OLE 自动化 -->

可见性：`public`

类型：olevariant

访问：read

### `nDay`

声明：property

获取或设置`NDAY` 默认返回的点数系统参数

<!-- tags: COM 获取 查询 OLE 自动化 NDAY -->

可见性：`public`

类型：integer

访问：read / write

### `nilTrans`

声明：property

获取或设置TSL `NIL` 到 COM 的转换规则

<!-- tags: COM 获取 查询 OLE 自动化 NIL -->

可见性：`public`

类型：integer

访问：read / write

取值规则：

- `0` — `Unassigned`
- `1` — `Empty`
- `2` — `NULL`
- `3` — `NAN`
- `4` — 整数 `0`
- `5` — 浮点数 `0`
- `6` — 空字符串
- `7` — 字符串 `NIL`
- `8` — 字符串 `NULL`
- `9` — 字符串 `-`
- `10` — 字符串 `/`

其他值转换为 `Unassigned`

### `precision`

声明：property

返回结果保留的小数位数

<!-- tags: COM 返回 获取 OLE 自动化 -->

可见性：`public`

类型：integer

访问：read / write

### `rate`

声明：property

获取或设置当前复权类型系统参数

<!-- tags: COM 获取 查询 OLE 自动化 -->

可见性：`public`

类型：integer

访问：read / write

### `rateDay`

声明：property

获取或设置复权基准日系统参数

<!-- tags: COM 获取 查询 OLE 自动化 -->

可见性：`public`

类型：tdatetime

访问：read / write

### `resultFileName`

声明：property

结果文件名，非空时将结果写入文件；扩展名为 `.csv` 或 `.xml` 时使用对应格式，其他扩展名使用 Excel 格式

<!-- tags: COM 写入 保存 OLE 自动化 -->

可见性：`public`

类型：widestring

访问：read / write

### `standardArray`

声明：property

标准数组返回类型：`0` 表示任意类型，`1` 表示浮点数组，`2` 表示字符串数组，`3` 表示整数数组

<!-- tags: COM OLE 自动化 -->

可见性：`public`

类型：integer

访问：read / write

### `stock`

声明：property

获取或设置当前证券代码系统参数

<!-- tags: COM 获取 查询 OLE 自动化 -->

可见性：`public`

类型：widestring

访问：read / write

### `stocks`

声明：property

股票组参数，批量调用时使用；取消批量证券时设置 `stock`

<!-- tags: COM OLE 自动化 -->

可见性：`public`

类型：olevariant

访问：read / write

### `textResult`

声明：property

文本结果模式，设置为 `1` 时将任意返回值转换为 TSL 可解析的数据结构文本

<!-- tags: COM OLE 自动化 -->

可见性：`public`

类型：integer

访问：read / write

### `time`

声明：property

获取或设置当前环境时间系统参数

<!-- tags: COM 获取 查询 OLE 自动化 -->

可见性：`public`

类型：tdatetime

访问：read / write

### `times`

声明：property

时间组参数，批量调用时使用；取消批量时间时设置 `time`

<!-- tags: COM OLE 自动化 -->

可见性：`public`

类型：olevariant

访问：read / write
