# 外
**声明外部 C 函数(C-FFI),供玄铁直接调用。**
```xuantie
外 函 XT_InitWindow(w: 整, h: 整, title: 字): 空
```
## 你可以……
- **声明后像普通函数一样调用**:
```xuantie
外 函 XT_GetFPS(): 整
设 帧率 = XT_GetFPS()
```
- **包一层中文名再对外开放**——库的常见写法:
```xuantie
外 函 XT_InitWindow(w: 整, h: 整, title: 字): 空
公 函 初始化窗口(宽, 高, 标题) {
XT_InitWindow(宽, 高, 标题)
}
```
## 注意
- 参数与返回类型必须逐一标注;签名若与 C 侧实现不符,问题要到链接或运行期才暴露。
- 符号必须真实存在于所链接的 C 库或 runtime 中,否则链接失败。
- **返回值必须符合玄铁值编码**(issue #44):只能是 ① 玄铁对象指针(`xt_string_new` 等,带 `XTObject` 头与 magic)② 标记整数 `XT_FROM_INT(值)` ③ 真/假/空小常量。**不得返回裸 C 指针**——它 LSB=0 且 >4096,玄铁侧 ARC 会按堆对象校验 magic,读到 C 结构体即误报「堆损坏或非法指针访问」并退出。
- **资源句柄要用"槽位池 + `XT_FROM_INT(槽号+1)`",`0` 表示失败**:句柄是资源编号,不是内存地址。渲染桥的纹理/字体/音效/音乐流四处都是这个约定,可作参考实现。
## 相关
[函](函.md) · [引](引.md)