nybc114 发表于 2025-9-23 11:47:42

[新手]请教关于嵌入式函数指针回调问题

本帖最后由 nybc114 于 2025-9-23 11:50 编辑

比如像这种函数指针 void* (*Func)(int,int);
Func p1;
如果我想要用火山的变量接收这个P1那要用什么类型呢 @<p>=p1; 也就是说我在火山要把这个p变量定义成什么类型才能接收这个嵌入式中的p1

还有像 void* 这样的值是不是也是同理

wangvoldp 发表于 2025-9-23 12:28:23

取静态方法地址 直接传变整数也行

nybc114 发表于 2025-9-23 12:30:28

wangvoldp 发表于 2025-9-23 12:28
取静态方法地址 直接传变整数也行

传变整数报错 0000005
取那个什么地址最终还是要一个变量接收
主要是嵌入后能正常接收

nybc114 发表于 2025-9-23 12:35:30

wangvoldp 发表于 2025-9-23 12:28
取静态方法地址 直接传变整数也行

还有嵌入语句不能用火山的方法

wangvoldp 发表于 2025-9-23 12:38:47

对回调指针也不很熟, 我是方法接收变整数, 然后在嵌入里用强制类型转换为原来的

<火山程序 类型 = "通常" 版本 = 1 />

方法 注册函数 <公开 注释 = "注册全局函数" @禁止流程检查 = 真>
参数 FuncName <类型 = 文本型>
参数 Func <类型 = 变整数>
{
    变量 Text <类型 = 字节集类 @输出名 = "Text">
    Text = 文本到多字节 (FuncName)
    @ lua_register((lua_State *)@<L>, (char*)Text.GetPtr(), (lua_CFunction)@<Func>);
}

wangvoldp 发表于 2025-9-23 12:40:20

本帖最后由 wangvoldp 于 2025-9-23 12:41 编辑

我也不很熟我是这样用的, 变整数接收, 嵌入调用再转换为方法lua_CFunction是定义的回调方法, 只需给变整数转换成这个就行了typedef int (*lua_CFunction)(lua_State *L);
<火山程序 类型 = "通常" 版本 = 1 />

方法 注册函数 <公开 注释 = "注册全局函数" @禁止流程检查 = 真>
参数 FuncName <类型 = 文本型>
参数 Func <类型 = 变整数>
{
    变量 Text <类型 = 字节集类 @输出名 = "Text">
    Text = 文本到多字节 (FuncName)
    @ lua_register((lua_State *)@<L>, (char*)Text.GetPtr(), (lua_CFunction)@<Func>);
}


nybc114 发表于 2025-9-23 13:58:15

wangvoldp 发表于 2025-9-23 12:40
我也不很熟我是这样用的, 变整数接收, 嵌入调用再转换为方法lua_CFunction是定义的回调方法, 只需给变整数 ...

你这方案我不会用也可能是跟我这个需求不一样 我翻了翻官方的基础类封装发现可以用通用指针接收   但目前不知道怎么用这个通用指针调用方法

Xelloss0618 发表于 2025-9-23 14:57:44

用变整数就行了啊,类型强转一下 @<p> = (INT_P)p1;
火山可以用“调用静态方法”调用这个函数指针,注意这个命令只支持 stdcall 的调用约定,你要 cdecl 就自己改一个好了,把代码里的 CALLBACK 改成 __cdecl

nybc114 发表于 2025-9-23 19:31:56

Xelloss0618 发表于 2025-9-23 14:57
用变整数就行了啊,类型强转一下 @ = (INT_P)p1;
火山可以用“调用静态方法”调用这个函数指针,注意这个命 ...

好的谢谢我研究研究
页: [1]
查看完整版本: [新手]请教关于嵌入式函数指针回调问题