# Builtin - 外部交互 / COM

## `cverrget(v)`

获取NAN数据的错误号，出来的结果仅应使用低32位，也就是需要用 .& 0xFFFFFFFF，因为高字的数据是无法确定的。

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

返回：int64

## `cverr(v)`

将错误号转为包含错误号的特殊的NAN数据。

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

返回：real

### 示例

```tsl
return cverr(0x800A07E7); // 返回结果NAN
```

## `coInitialize()`

Ole初始化。

返回：any

## `coUnInitialize()`

Ole结束。

返回：any

## `pyPutVar(var_name, var_value)`

送入python变量

| 参数        | 类型   | 说明 |
| ----------- | ------ | ---- |
| `var_name`  | string |      |
| `var_value` | any    |      |

返回：integer

## `pyGetVar(var_name)`

从python 获得变量

| 参数       | 类型   | 说明 |
| ---------- | ------ | ---- |
| `var_name` | string |      |

返回：any

## `pyRun(python_code, flag)`

简单运行Python的代码

| 参数          | 类型    | 说明                                                                                                                      |
| ------------- | ------- | ------------------------------------------------------------------------------------------------------------------------- |
| `python_code` | string  | 字符串类型，Python代码串，可执行多行代码。注意，使用空格对齐来确定逻辑层级，相同空格数代表同一层级，一般推荐使用4个空格。 |
| `flag`        | integer | 整型，可选参数，默认不被指定，该含义由PyCompileFlags指定组合的状态，处理UTF-8源代码等问题。具体请参考Python手册。         |

返回：integer

### 示例

```tsl
s := "a=1
b=1
if a==1:
b=2
";
pyRun(s);
return array("a": pyGetVar("a"), "b": pyGetVar("b"));
// 本地执行返回结果：
```

## `pyCall(call_flag)`

调用python 模块中的函数

| 参数        | 类型    | 说明                                                                                                                  |
| ----------- | ------- | --------------------------------------------------------------------------------------------------------------------- |
| `call_flag` | integer | 结果输出方式与参数输入方式的设置，是一个按位（2位二进制）的状态组合值，即取值为二进制的00,01,10,11组合，具体含义如下: |

返回：any

### 示例

```tsl
rdo2 pyRun("import numpy");
// 不给状态值，默认方式下调用python的randint函数
return rdo2 pyCall('numpy.random', 'randint', 6, 9);
// 参数通过数组方式传入
return pyCall(2, 'numpy.random', 'randint', array('high': 9, 'low': 6));
// 一个个指定参数方式传入
return pyCall('numpy.random', 'randint', high: 9, low: 6);
```

## `pyRelease()`

释放python资源,多线程的时候可以提高效率

返回：bool

## `pyEnsure()`

锁定python资源;由于pyrun和pyPutVar,pyGetVar会智能锁定，所以用户一般来说不需要调用该函数。

返回：bool

## `pyError()`

获取当前运行 Python 语句时的报错信息

返回：string

### 示例

```tsl
// 本地执行以下脚本
pyRun("a=math.pi"); // 此处会报错因为没有 import math
return pyError();
// 返回： name 'math' is not defined
```

## `rEval(eval_string, code)`

执行R的字符串。

| 参数          | 类型    | 说明                                      |
| ------------- | ------- | ----------------------------------------- |
| `eval_string` | string  | 执行的串，例如”a=b+1”。                   |
| `code`        | integer | 返回是否成功，为0表示成功过，否则为错误码 |

返回：any

## `rGetVar(var_name)`

获得一个R的变量的值。

| 参数       | 类型   | 说明                    |
| ---------- | ------ | ----------------------- |
| `var_name` | string | 设置的变量名，例如”a”。 |

返回：any

## `rPutVar(var_name, value)`

设置一个R的变量的值。

| 参数       | 类型   | 说明                    |
| ---------- | ------ | ----------------------- |
| `var_name` | string | 设置的变量名，例如”a”。 |
| `value`    | any    | 设置的变量的值          |

返回：any

## `rEnsure()`

锁定R资源;由于REval和RPutVar,RGetVar会智能锁定，所以用户一般来说不需要调用该函数。

返回：bool

## `rRelease()`

释放R资源,多线程的时候可以提高效率

返回：bool

## `mEval(eval_string)`

执行MatLab的字符串。

| 参数          | 类型   | 说明                    |
| ------------- | ------ | ----------------------- |
| `eval_string` | string | 执行的串，例如”a=b+1”。 |

返回：integer

## `mPutVar(var_name, value)`

设置一个MATLAB的变量的值。

| 参数       | 类型   | 说明                    |
| ---------- | ------ | ----------------------- |
| `var_name` | string | 设置的变量名，例如”a”。 |
| `value`    | any    | 设置的变量的值          |

返回：integer

## `mGetVar(var_name)`

获得一个MATLAB的变量的值。

| 参数       | 类型   | 说明                    |
| ---------- | ------ | ----------------------- |
| `var_name` | string | 要获得变量名，例如”a”。 |

返回：any

## `mGetBuf()`

返回MATLAB引擎的警告或者错误信息。

返回：string

## `mClose()`

关闭MATLAB引擎。

返回：any

## `mSetVisible(visible)`

设置MATLAB引擎是否可视。

| 参数      | 类型 | 说明                           |
| --------- | ---- | ------------------------------ |
| `visible` | bool | 如果为真，则显示，为假则隐藏。 |

返回：integer

## `stock()`

字符串类型，当前证券代码系统参数，读写。

返回：any

## `cycle()`

字符串类型，当前周期系统参数，读写。

返回：any

## `rate()`

整数类型，当前复权类型系统参数，读写。

返回：any

## `rateDay()`

日期类型，复权基准日系统参数，读写。

返回：any

## `precision()`

整数类型，保留小数位数系统参数，读写。

返回：any

## `bk()`

字符串类型，默认板块系统参数，读写。

返回：any

## `stocks()`

股票组参数，如果调用REMOTECALLFUNC需要一次性调用多个股票进行返回，则设置该参数为数组，取消则设置Stock属性。主要用于EXCEL的表格提取数据。

返回：any

## `times()`

时间组参数，如果调用REMOTECALLFUNC需要一次性调用多个时间进行返回，则设置该参数为数组，取消则设置Time属性。主要用于EXCEL的表格提取数据。

返回：any

## `bks()`

板块组参数，如果调用REMOTECALLFUNC需要一次性调用多个板块进行返回，则设置该参数为数组，取消则设置BK属性。主要用于EXCEL的表格提取数据。

返回：any

## `nilTrans()`

设置TSL语言的NIL和COM转换的规则。

返回：any

## `i64Trans()`

设置TSL语言的Int64和COM转换的规则。

返回：any

## `keepRawData()`

由于在EXCEL单元格中以及MATLAB中送入数据的时候，均为二维数据，但TSL很多函数的参数需要一维的参数，因此需要有一个转换的原则。数据转换规则如下：

返回：any

## `standardArray()`

TSL返回的数组是一种array of olevariant结构，允许混合数据类型，可以将字符串，整数浮点混合在一个数组中，这样在某些其他系统中，会存在处理上的难度，为了兼容这些系统，允许指定返回的结果集为一个标准的数组。当使用这个设置的时候，必需保障返回的数据结果集是规范的类型一致的结果集，否则可能会出现错误。可设置的值定义为：

返回：any

## `textResult()`

某些系统无法处理复杂的结果集，在这种情况下，可以使用文本来返回的结果集，文本格式是TSL可解析的数据结构文本串。设置为1则任意类型均以文本串的模式返回。

返回：any

## `resultFileName()`

某些系统无法处理COM返回的复杂的结果集，在这种情况下，可以指定一个文件来返回结果集，调用完成后再由该系统从文件中读取数据。设置该文件名为非空的串则打开该模式，如果文件名以.csv或.xml结尾，会以CSV或XML（XML为TSL语言的标准XML格式）格式写入文件，否则，会写入EXCEL格式结构的文件。

返回：any

## `computebitsoption()`

计算的位数选项。0：自动选择，1:32位服务器计算，2:64位服务器计算。

返回：any

## `computeservice()`

计算的服务群组选择。空字符串为默认，’auto’为自动选择，否则为指定的服务群组名。

返回：any

## `remoteCallFunc(func_name, params)`

利用平台执行一个函数。

| 参数        | 类型       | 说明                                                 |
| ----------- | ---------- | ---------------------------------------------------- |
| `func_name` | widestring | 字符串类型，需要调用的函数名。                       |
| `params`    | olevariant | Array of Variant的数组类型。用于存贮调用函数的参数。 |

返回：any

## `localCallFunc(func_name, params)`

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

| 参数        | 类型       | 说明                                                 |
| ----------- | ---------- | ---------------------------------------------------- |
| `func_name` | widestring | 字符串类型，需要调用的函数名。                       |
| `params`    | olevariant | Array of Variant的数组类型。用于存贮调用函数的参数。 |

返回：any

## `remoteExecute(execute_str)`

利用平台执行一段TSL脚本。

| 参数          | 类型       | 说明                           |
| ------------- | ---------- | ------------------------------ |
| `execute_str` | widestring | 字符串类型，需要执行的脚本串。 |

返回：any

## `localExecute(execute_str)`

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

| 参数          | 类型       | 说明                           |
| ------------- | ---------- | ------------------------------ |
| `execute_str` | widestring | 字符串类型，需要执行的脚本串。 |

返回：any

## `resetSysParam()`

重置系统参数。时间设置为当前时间，证券为上证指数，周期为日线，设置为不复权，复权基准日为0，返回保留小数点位数为4，股票列表为空，时间列表为空。

返回：any

## `adminCommand(command, time_out, recv_string, broad_string, err_msg)`

提交管理员命令。

| 参数           | 类型       | 说明                             |
| -------------- | ---------- | -------------------------------- |
| `command`      | widestring | 字符串类型，提交的管理员命令串。 |
| `time_out`     | integer    | 整数类型，命令超时的毫秒数。     |
| `recv_string`  |            | 返回的命令结果串。               |
| `broad_string` |            | 返回的广播消息串。               |
| `err_msg`      |            | 如果发生错误，返回的错误信息。   |

返回：olevariant

## `simplyAdminCommand(command, time_out, no_data_time_out)`

提交管理员命令。

| 参数               | 类型       | 说明                                             |
| ------------------ | ---------- | ------------------------------------------------ |
| `command`          | widestring | 字符串类型，提交的管理员命令串。                 |
| `time_out`         | integer    | 整数类型，命令超时的毫秒数。                     |
| `no_data_time_out` | integer    | 整数类型，收到第一个数据开始多久没有数据则返回。 |

返回：olevariant
