YStudio Y++

子程序指针 / 回调(基础支持库)

Y++ / YStudio 开发文档 · 一点滴

路径:支持库 → 基础支持库 → 回调 / 子程序指针。

硬约束

  1. 把用户函数交给热键、线程、DLL、监听等 API。
  2. 取址:&函数名(必须带 &,不要加括号)。
  3. 签名必须与接收方约定一致;默认回调为无参、无返回。
  4. 回调内避免长时间阻塞 UI。
  5. 可选回调:子程序指针须在形参最后,并写 = 0。

快速开始

函数 热键回调() {
    输出("triggered")
}
启动() {
    注册热键(2, 65, &热键回调)
}

回调函数

本分类共 10 条。

取子程序地址

  • 签名:子程序指针 &被调的回调函数
  • 说明:取已定义用户函数的地址,作为 子程序指针 实参传入。写法:在函数名前面加 &。函数名写错或尚未定义时,编译会报「未知函数」。
  • 函数名│必须是本文件已用「函数」定义的无参函数
  • 用法│调用宿主时写 &被调的回调函数,不要加括号

可选回调

  • 签名:子程序指针 回调函数 = 0
  • 说明:回调形参默认是必传的。若希望调用时可省略第二个参数,须把 子程序指针 放在参数列表最后,并写默认值 = 0(表示空回调)。宿主内写 回调函数() 时会自动判断非空,未传入时安全跳过。不写 = 0 时,调用方必须传 &函数名,不能省略第二个参数。;省略回调时只写前面的普通参数,例如 带回调演示(2),不要写逗号占位。;有回调时仍须 &取址:&被调的回调函数。
  • 位置│子程序指针 必须是最后一个形参,才能省略实参
  • 默认值│写 = 0,表示未传回调(空指针)
  • 调用│带回调演示(1) 省略回调;带回调演示(1, &被调的回调函数) 传入回调

多个回调切换

  • 签名:无 带回调演示(整数 模式, 子程序指针 回调函数)
  • 说明:根据不同条件传入不同的 &函数名,实现切换回调逻辑。子程序指针不能赋给 整数 或 文本 变量,只能通过参数传递。;带回调演示(, &)

子程序指针

  • 签名:子程序指针 形参名
  • 说明:自定义函数的回调形参类型。默认表示「无参数、无返回值」的用户函数指针;若需回调返回值,在 子程序指针 后写返回类型(见「有返回值的回调」)。在函数体内用 形参名() 调用。形参名│自定义名称,如 回调函数、处理、完成 等
  • 位置│写在函数参数列表中,可与 整数、文本 等普通参数混用

完整示例

  • 签名:无 带回调演示(参数, 子程序指针 回调函数)
  • 说明:典型写法:定义「宿主函数」接收子程序指针,再定义「被调用的回调函数」,最后在按钮单击等事件里用 &函数名 把回调地址传进去。宿主函数可同时有普通参数(如 整数 demo)和 子程序指针 参数。;传回调时必须写 &,例如 &被调的回调函数,不能省略 &。;被调用的回调函数本身不能再带参数,也不能写返回类型。
  • 步骤一│定义宿主函数,形参写 子程序指针 回调函数
  • 步骤二│定义被调用的回调函数(无参、无返回)
  • 步骤三│在事件或启动函数里调用宿主,第二个参数写 &被调函数名
  • 步骤四│宿主函数体内写 回调函数() 触发回调

宿主内调用回调

  • 签名:无 回调函数()
  • 说明:在声明了 子程序指针 形参的函数体内,直接写 形参名() 即可执行传入的回调。形参名│与函数声明中的名称一致,如 回调函数、处理。子程序指针回调不能传参:不能写 回调函数(123)。;写 回调函数() 时会自动判断非空;可选回调(= 0)未传入时不会执行。;回调函数()

宿主函数返回值

  • 签名:整数 函数 带回调演示(...) 整数
  • 说明:带 子程序指针 参数的宿主函数本身可以声明返回类型(整数、文本、逻辑、小数等),与是否传入回调、回调是否有返回值无关。在函数体内照常 返回(表达式)。返回类型│写在参数列表 ) 之后,如 整数、文本、逻辑。宿主返回的是宿主自己的 返回(…) 值,不是回调函数的返回值。;无返回时省略返回类型:函数 带回调演示(…) { }
  • 回调│仍可写 子程序指针 回调函数 或 子程序指针 回调函数 = 0

有返回值的回调

  • 签名:子程序指针 整数 回调函数
  • 说明:若希望回调函数向宿主返回一个值,在 子程序指针 后写回调的返回类型,再写形参名。被调用的用户函数须声明相同返回类型;宿主内用 整数 x = 回调函数() 或 返回(回调函数()) 接收。可选时同样写 = 0,未传入时按该类型的空值处理(整数为 0,文本为空串)。返回类型│支持 整数、逻辑、文本、小数 等标量,须与被调函数一致;被调函数│须无参,且声明相同返回类型,如 函数 回调() 整数;回调仍不能带参数:不能写 回调函数(123)。
  • 语法│子程序指针 [返回类型] 形参名 [= 0]

注意事项

  • 签名:子程序指针 使用限制
  • 说明:常见错误与当前版本约束。被调用的回调函数必须无参:不能写 函数 回调(整数 x);无返回回调:子程序指针 回调函数;有返回:子程序指针 整数 回调函数 等;宿主函数可以有自己的返回类型,与回调是否返回值无关(见「宿主函数返回值」)

监听剪贴板

  • 签名:无 监听剪贴板(&剪贴板变化)
  • 说明:剪贴板内容变化时,系统自动调用指定的用户函数。这是支持库提供的回调用法,同样通过 &函数名 传入。回调函数│无参无返回的用户函数。建议在 启动() 或程序初始化处注册监听。;回调可能在系统线程触发,函数体内避免长时间阻塞。

易错对照

错误 正确
回调写成有参函数(无约定时) 默认无参;有返回见「有返回值的回调」
传函数名不加 & 必须 &函数名
可选回调不放最后 须末尾且 = 0

相关

热键支持库 · 多线程 · 定时器类 · DLL