路径:支持库 → 基础支持库 → 回调 / 子程序指针。
硬约束
- 把用户函数交给热键、线程、DLL、监听等 API。
- 取址:
&函数名(必须带&,不要加括号)。 - 签名必须与接收方约定一致;默认回调为无参、无返回。
- 回调内避免长时间阻塞 UI。
- 可选回调:子程序指针须在形参最后,并写
= 0。
快速开始
函数 热键回调() {
输出("triggered")
}
启动() {
注册热键(2, 65, &热键回调)
}
回调函数
本分类共 10 条。
取子程序地址
- 签名:
子程序指针 &被调的回调函数 - 说明:取已定义用户函数的地址,作为 子程序指针 实参传入。写法:在函数名前面加 &。函数名写错或尚未定义时,编译会报「未知函数」。
- 函数名│必须是本文件已用「函数」定义的无参函数
- 用法│调用宿主时写 &被调的回调函数,不要加括号
可选回调
- 签名:
子程序指针 回调函数 = 0 - 说明:回调形参默认是必传的。若希望调用时可省略第二个参数,须把 子程序指针 放在参数列表最后,并写默认值 = 0(表示空回调)。宿主内写 回调函数() 时会自动判断非空,未传入时安全跳过。不写 = 0 时,调用方必须传 &函数名,不能省略第二个参数。;省略回调时只写前面的普通参数,例如 带回调演示(2),不要写逗号占位。;有回调时仍须 &取址:&被调的回调函数。
- 位置│子程序指针 必须是最后一个形参,才能省略实参
- 默认值│写 = 0,表示未传回调(空指针)
- 调用│带回调演示(1) 省略回调;带回调演示(1, &被调的回调函数) 传入回调
多个回调切换
- 签名:
无 带回调演示(整数 模式, 子程序指针 回调函数) - 说明:根据不同条件传入不同的 &函数名,实现切换回调逻辑。子程序指针不能赋给 整数 或 文本 变量,只能通过参数传递。;带回调演示(, &)
子程序指针
- 签名:
子程序指针 形参名 - 说明:自定义函数的回调形参类型。默认表示「无参数、无返回值」的用户函数指针;若需回调返回值,在 子程序指针 后写返回类型(见「有返回值的回调」)。在函数体内用 形参名() 调用。形参名│自定义名称,如 回调函数、处理、完成 等
- 位置│写在函数参数列表中,可与 整数、文本 等普通参数混用
完整示例
- 签名:
无 带回调演示(参数, 子程序指针 回调函数) - 说明:典型写法:定义「宿主函数」接收子程序指针,再定义「被调用的回调函数」,最后在按钮单击等事件里用 &函数名 把回调地址传进去。宿主函数可同时有普通参数(如 整数 demo)和 子程序指针 参数。;传回调时必须写 &,例如 &被调的回调函数,不能省略 &。;被调用的回调函数本身不能再带参数,也不能写返回类型。
- 步骤一│定义宿主函数,形参写 子程序指针 回调函数
- 步骤二│定义被调用的回调函数(无参、无返回)
- 步骤三│在事件或启动函数里调用宿主,第二个参数写 &被调函数名
- 步骤四│宿主函数体内写 回调函数() 触发回调
宿主内调用回调
- 签名:
无 回调函数() - 说明:在声明了 子程序指针 形参的函数体内,直接写 形参名() 即可执行传入的回调。形参名│与函数声明中的名称一致,如 回调函数、处理。子程序指针回调不能传参:不能写 回调函数(123)。;写 回调函数() 时会自动判断非空;可选回调(= 0)未传入时不会执行。;回调函数()
宿主函数返回值
- 签名:
整数 函数 带回调演示(...) 整数 - 说明:带 子程序指针 参数的宿主函数本身可以声明返回类型(整数、文本、逻辑、小数等),与是否传入回调、回调是否有返回值无关。在函数体内照常 返回(表达式)。返回类型│写在参数列表 ) 之后,如 整数、文本、逻辑。宿主返回的是宿主自己的 返回(…) 值,不是回调函数的返回值。;无返回时省略返回类型:函数 带回调演示(…) { }
- 回调│仍可写 子程序指针 回调函数 或 子程序指针 回调函数 = 0
有返回值的回调
- 签名:
子程序指针 整数 回调函数 - 说明:若希望回调函数向宿主返回一个值,在 子程序指针 后写回调的返回类型,再写形参名。被调用的用户函数须声明相同返回类型;宿主内用 整数 x = 回调函数() 或 返回(回调函数()) 接收。可选时同样写 = 0,未传入时按该类型的空值处理(整数为 0,文本为空串)。返回类型│支持 整数、逻辑、文本、小数 等标量,须与被调函数一致;被调函数│须无参,且声明相同返回类型,如 函数 回调() 整数;回调仍不能带参数:不能写 回调函数(123)。
- 语法│子程序指针 [返回类型] 形参名 [= 0]
注意事项
- 签名:
子程序指针 使用限制 - 说明:常见错误与当前版本约束。被调用的回调函数必须无参:不能写 函数 回调(整数 x);无返回回调:子程序指针 回调函数;有返回:子程序指针 整数 回调函数 等;宿主函数可以有自己的返回类型,与回调是否返回值无关(见「宿主函数返回值」)
监听剪贴板
- 签名:
无 监听剪贴板(&剪贴板变化) - 说明:剪贴板内容变化时,系统自动调用指定的用户函数。这是支持库提供的回调用法,同样通过 &函数名 传入。回调函数│无参无返回的用户函数。建议在 启动() 或程序初始化处注册监听。;回调可能在系统线程触发,函数体内避免长时间阻塞。
易错对照
| 错误 | 正确 |
|---|---|
| 回调写成有参函数(无约定时) | 默认无参;有返回见「有返回值的回调」 |
| 传函数名不加 & | 必须 &函数名 |
| 可选回调不放最后 | 须末尾且 = 0 |