# 库信息文件
库信息文件记录了该支持库提供的所有命令的参数信息、所有类型的成员信息(类似于 TypeScript 的 `*.d.ts`),同时提供了对应的C++标识符,是保证EplOnCpp正确运行并不可少的内容
库信息文件的文件名固定为`info`,根据格式的不同,扩展名可以为`json`(JSON格式)或`yml`(YAML格式)
关于JSON格式的介绍请参考[json.org](https://www.json.org/),关于YAML格式的介绍请参考[yaml.org](https://yaml.org/)。通常来说,YAML格式相比JSON更加简洁、易用
在库信息文件中,所有数据类型均使用C++全限定名称,有关基本类型的C++全限定名称,请参考:[数据类型内部名称](../Reference/DataTypes/InternalNames.md)
## 库信息格式
### CMakeName (string)
该描述库在CMake配置文件中的名称,***应与`config.cmake`中信息相匹配***
### SuperTemplate (string)
该字段指定了 SuperTemplate 的位置 有关更多信息,请参考 SuperTemplate 注意:该字段为不稳定接口,随时可能删除,一般情况下请勿使用。
### Cmd (map)
该字段为Map类型,提供了库命令的信息 其 Key 为 命令中文名,Value 为 命令信息
### Type (map)
该字段为Map类型,提供了库自定义类型的信息 其 Key 为 类型中文名,Value 为 自定义类型信息
### Constant (map)
该字段为Map类型,提供了库常量的信息 其 Key 为 常量中文名,Value 为 库常量信息
### Enum (map)
枚举类型,该字段为Map类型,提供了枚举信息 其 Key 为 枚举类型中文名,Value 为 另一个Map Value.Key 为枚举值中文名 Value.Value 为枚举值信息,格式同常量信息
## 方法信息格式
### CppName (string)
表示C标识符 对于全局命令,应为C全限定名称(通常含`::`) 对于成员方法,应为成员名称(不含`::`)
### ReturnDataType (string)
表示命令的返回值类型(C++全限定名称),使用`null`(或省略字段)表示无返回值
### Parameters (array)
表示参数信息,是一个数组
## 参数信息格式
### DataType (string)
表示数据类型(C++全限定名称)
### Optional (bool)
表示是否为可空参数
### ByRef (bool)
表示是否为传址参数 仅用于非常量引用(`T&`),对常量引用(`const T&`)应设置为`false`以提高运行速度(避免生成中间对象)
### VarArgs (bool)
表示是否为可变长参数,仅用于末尾 C++层面可以配合使用变长参数模板(Variadic Templates)接收信息
## 自定义类型信息格式
### CppName (string)
表示C++标识符
### Method (map)
该字段为Map类型,提供了成员方法的信息 其 Key 为 成员方法中文名,Value 为 成员方法信息
### Member (map)
该字段为Map类型,提供了成员属性的信息 其 Key 为 成员方法中文名,Value 为 成员属性信息
## 成员属性信息格式
### CppName (string)
表示C++标识符
### DataType (string)
表示数据类型(C++全限定名称)
### Getter (string)表示获取属性值的函数的C++全限定名称,可选
### Setter (string)
表示设置属性值的函数的C++全限定名称,可选
### Referencable (bool)
当设置为`false`时,**强制**该属性无法被按 参考 方式传递给用户定义的子程序 注:即使设置为`true`,当你使用 `Getter` & `Setter` 时可能仍然无法按 参考 方式传递
## 常量信息格式
### CppName (string)
表示C++标识符 可选,若不存在,则`Value` / `Getter`必须存在
### DataType (string)
表示数据类型(C++全限定名称)
### Getter (string)
表示获取常量值的函数的C++全限定名称,可选,若不存在,则`CppName` / `Value`必须存在
### Value (any)
表示常量的值,可选,若不存在,则`CppName` / `Getter`必须存在 为了便于优化,如非特殊情况,请提供此字段
## 内容示例
YAML格式:
```yaml
CMakeName: EocKrnln
SuperTemplate: SuperTemplateForKrnln.dll
Cmd:
通信测试:
CppName: e::lib::krnln::NetworkUtils::ICMPPing
ReturnDataType: int32_t
Parameters:
- DataType: e::system::string
- DataType: int32_t
Optional: true
Type:
对象:
CppName: e::lib::krnln::COMObject
Method:
是否相等:
CppName: ReferenceEquals
ReturnDataType: bool
Parameters:
- DataType: e::lib::krnln::COMObject
Constant:
自年首天数:
CppName: e::lib::krnln::DateTimeUtils::CalcDayOfYear
DataType: int32_t
Value: 10
```
JSON格式:
```json
{
"CMakeName": "EocKrnln",
"SuperTemplate": "SuperTemplateForKrnln.dll",
"Cmd": {
"通信测试": {
"CppName": "e::lib::krnln::NetworkUtils::ICMPPing",
"ReturnDataType": "int32_t",
"Parameters": [
{
"DataType": "e::system::string"
},
{
"DataType": "int32_t",
"Optional": true
}
]
}
},
"Type": {
"对象": {
"CppName": "e::lib::krnln::COMObject",
"Method": {
"是否相等": {
"CppName": "ReferenceEquals",
"ReturnDataType": "bool",
"Parameters": [
{
"DataType": "e::lib::krnln::COMObject"
}
]
}
}
}
},
"Constant": {
"自年首天数": {
"CppName": "e::lib::krnln::DateTimeUtils::CalcDayOfYear",
"DataType": "int32_t",
"Value": 10
}
}
}
```