# 庫信息文件
庫信息文件記錄了該支持庫提供的所有命令的參數信息、所有類型的成員信息(類似于 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
}
}
}
```