递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 188|回复: 8
打印 上一主题 下一主题

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

[复制链接]

2

主题

16

帖子

57

积分

注册会员

Rank: 2

积分
57
跳转到指定楼层
楼主
发表于 3 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nybc114 于 2025-9-23 11:50 编辑

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

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

使用道具 举报

24

主题

370

帖子

1768

积分

金牌会员

Rank: 6Rank: 6

积分
1768
沙发
发表于 3 天前 | 只看该作者
取静态方法地址 直接传变整数也行
回复

使用道具 举报

2

主题

16

帖子

57

积分

注册会员

Rank: 2

积分
57
板凳
 楼主| 发表于 3 天前 来自手机 | 只看该作者
wangvoldp 发表于 2025-9-23 12:28
取静态方法地址 直接传变整数也行

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

使用道具 举报

2

主题

16

帖子

57

积分

注册会员

Rank: 2

积分
57
地板
 楼主| 发表于 3 天前 来自手机 | 只看该作者
wangvoldp 发表于 2025-9-23 12:28
取静态方法地址 直接传变整数也行

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

使用道具 举报

24

主题

370

帖子

1768

积分

金牌会员

Rank: 6Rank: 6

积分
1768
5#
发表于 3 天前 | 只看该作者
对回调指针也不很熟, 我是方法接收变整数, 然后在嵌入里用强制类型转换为原来的

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

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

复制代码
回复

使用道具 举报

24

主题

370

帖子

1768

积分

金牌会员

Rank: 6Rank: 6

积分
1768
6#
发表于 3 天前 | 只看该作者
本帖最后由 wangvoldp 于 2025-9-23 12:41 编辑

我也不很熟我是这样用的, 变整数接收, 嵌入调用再转换为方法lua_CFunction是定义的回调方法, 只需给变整数转换成这个就行了typedef int (*lua_CFunction)(lua_State *L);

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

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

复制代码

回复

使用道具 举报

2

主题

16

帖子

57

积分

注册会员

Rank: 2

积分
57
7#
 楼主| 发表于 3 天前 | 只看该作者
wangvoldp 发表于 2025-9-23 12:40
我也不很熟我是这样用的, 变整数接收, 嵌入调用再转换为方法lua_CFunction是定义的回调方法, 只需给变整数 ...

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

使用道具 举报

29

主题

2517

帖子

8912

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
8912
8#
发表于 3 天前 | 只看该作者
用变整数就行了啊,类型强转一下 @<p> = (INT_P)p1;
火山可以用“调用静态方法”调用这个函数指针,注意这个命令只支持 stdcall 的调用约定,你要 cdecl 就自己改一个好了,把代码里的 CALLBACK 改成 __cdecl
回复

使用道具 举报

2

主题

16

帖子

57

积分

注册会员

Rank: 2

积分
57
9#
 楼主| 发表于 3 天前 | 只看该作者
Xelloss0618 发表于 2025-9-23 14:57
用变整数就行了啊,类型强转一下 @ = (INT_P)p1;
火山可以用“调用静态方法”调用这个函数指针,注意这个命 ...

好的  谢谢  我研究研究
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2025-9-26 07:43 , Processed in 0.083623 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表