社区
其它技术问题
帖子详情
动态调用函数问题
wuti_pl
2011-03-07 09:58:29
我要设计一个程序,在程序中有一个被调用函数集合。用户可以根据自己的需要去选择对应的函数,将其函数名添加在执行列表里,同时输入函数所需的参数。
我考虑的方法是给每个函数定义一个对应编号,在用户选择函数时把该编号添加到一个执行链表里,同时给函数赋参数,保存在参数列表里。然后当用户执行这些函数时,通过查找执行链表里的编号,再进行开关语句的判断来调用函数。个人感觉这个方法很笨,可是又不知道怎么作才好,而且处理参数时也比较麻烦。请各位给予指导。谢谢。
...全文
289
17
打赏
收藏
动态调用函数问题
我要设计一个程序,在程序中有一个被调用函数集合。用户可以根据自己的需要去选择对应的函数,将其函数名添加在执行列表里,同时输入函数所需的参数。 我考虑的方法是给每个函数定义一个对应编号,在用户选择函数时把该编号添加到一个执行链表里,同时给函数赋参数,保存在参数列表里。然后当用户执行这些函数时,通过查找执行链表里的编号,再进行开关语句的判断来调用函数。个人感觉这个方法很笨,可是又不知道怎么作才好,而且处理参数时也比较麻烦。请各位给予指导。谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pathuang68
2011-03-07
打赏
举报
回复
函数指针的几种用法
有你想要的答案和代码。
微笑的鱼
2011-03-07
打赏
举报
回复
[Quote=引用 3 楼 wuti_pl 的回复:]
我想了一个思路就是参考VC++里的消息映射机制。但实现起来比较麻烦。谁能一起讨论一下?
[/Quote]
我做过类似的,并不麻烦,用std::map,用消息做键值,数据为函数指针就可以了。
赵4老师
2011-03-07
打赏
举报
回复
COM
xianguang321
2011-03-07
打赏
举报
回复
1、关于函数:由于放到动态库中的函数一般是不会重名的,建议放到一个map中,按照函数名字,函数地址配对存放,调用的时候只需要匹配函数名,然后取函数地址直接执行即可。
2、关于参数:参数可以模板化,这样就可以通用一些。不过得预先在动态库的函数中都应用起来。
至于如何加载动态库及存放到map中以及如何使用参数模板化我就不用说了吧?
实践是最好的学习
2011-03-07
打赏
举报
回复
[Quote=引用 7 楼 wuti_pl 的回复:]
但问题还是出自参数个数不固定上。
[/Quote]
你要模拟一次汇编调用压栈的做法
辰岡墨竹
2011-03-07
打赏
举报
回复
程序嵌入简单脚本用不着自己写,直接用Lua,可以利用C接口自定义解释过程
wuti_pl
2011-03-07
打赏
举报
回复
6楼老师的想法不错,但是对于函数参数个数不固定的如何处理呢?而且这种方法和我说的编号方法对于提高效率上起的作用好像都不大。1楼4楼说得用函数指针数组倒是一个不错的主意,但问题还是出自参数个数不固定上。
实践是最好的学习
2011-03-07
打赏
举报
回复
我曾经做过,但是很不通用,本来是想改善现有产品的,后来感觉也没多大的实用价值,就做了个半调子扔了
我当初的想法就只针对某一种调用方式,反正所有的函数都有个地址,所有的功能模块在加载的时候通过接口向系统提交它的函数名称、函数地址、函数序号和参数类型,保存在链表中
用户通过写脚本的方式调用其功能,根据名称找到功能模块,到链表里面比较一下参数类型是否匹配,匹配的就把函数序号存下来,执行的时候根据序号把地址取出来,再把参数压栈执行
ouyh12345
2011-03-07
打赏
举报
回复
同时输入函数所需的参数
可以用SetParameter(char *name, char *value)的方式输入参数
碎碎念
2011-03-07
打赏
举报
回复
用函数指针数组来做...
wuti_pl
2011-03-07
打赏
举报
回复
我想了一个思路就是参考VC++里的消息映射机制。但实现起来比较麻烦。谁能一起讨论一下?
wuti_pl
2011-03-07
打赏
举报
回复
可以说得具体点吗?
bdmh
2011-03-07
打赏
举报
回复
可用函数指针数组来做
wuti_pl
2011-03-07
打赏
举报
回复
谢谢大家给予指导。我决定结贴了。通过大家的提示发现没有什么好的方法去解决我想实现的功能。可能是我没说清楚,我的函数调用是动态的,不知道什么时候调用哪一个,所以在程序里无法用代码指定,开始我设想用一个函数对应一个标号,标号存储在list里。然后按顺序提出编号,查找对应的函数进行执行。利用开关语句。看样子这个方法是最可行的,包括参数也能处理。大家的方法真的不太有用。分数照给。还是学了很多方法。谢谢大家。
super_admi
2011-03-07
打赏
举报
回复
由上,当你需要增加一个功能函数的时候,则需要进行函数注册,以建立编号和函数入口的对应关系。
ACAD的ARX,NX的OPEN API,从表面上看,都是这么做的,内部如何实现,我就不知道了。
super_admi
2011-03-07
打赏
举报
回复
COM当然是个好办法,但那玩意,我觉得实在是难掌握,实现起来麻烦事情也多。
我的建议是,维护一个函数入口地址与自动编号的映射表。每次增加一个函数调用时,需要增加一个映射。
当需要调用函数时,先找到编号,再通过编号找到地址。
wuti_pl
2011-03-07
打赏
举报
回复
[Quote=引用 12 楼 huangjunyf2 的回复:]
引用 3 楼 wuti_pl 的回复:
我想了一个思路就是参考VC++里的消息映射机制。但实现起来比较麻烦。谁能一起讨论一下?
我做过类似的,并不麻烦,用std::map,用消息做键值,数据为函数指针就可以了。
[/Quote]
能否给个例子,我的邮箱wuti_pl@163.com
js使用
动态
添加的方式传函数参数不能
调用函数
的
问题
本文探讨了在使用jQuery
动态
添加页面元素时遇到的中文参数传递
问题
,详细分析了错误原因,并提供了一种有效解决方案,确保中文字符正确传递。
动态
调用函数
时的命令执行对于eval()和assert()的执行
问题
本文探讨了PHP中assert和eval函数在不同版本下执行代码的能力。解释了eval为何不能被可变函数调用,以及PHP7.1后assert默认禁用代码执行的原因。强调了了解服务和版本间安全更新的重要性。
C语言 指针相关
问题
--
调用函数
实现空间
动态
申请
本文探讨了C语言中通过指针进行内存分配的
问题
,并详细解释了如何正确地使用指针来申请和操作内存空间。文章对比了直接操作局部变量与通过指针传递的方式,并给出了正确的实践案例。
【PB】在PB中
动态
调用函数
本文详细介绍了在PowerBuilder中利用
动态
调用函数
解决多个可视对象执行Undo操作的
问题
,并通过实例代码展示了如何根据当前激活的对象类型进行区分调用,同时讨论了PowerBuilder5.0引入的允许
动态
调用函数
的功能及其对程序设计的积极作用。
Python之
动态
调用函数
本文介绍了Python中如何实现
动态
调用函数
,包括使用`__import__()`
动态
加载模块和`getattr()`获取对象属性值。通过这两个函数组合,可以在运行时根据字符串
动态
地
调用函数
。注意在使用`__import__()`时可能遇到模块找不到的
问题
,需要配置好模块搜索路径,而`getattr()`在对象属性不存在时,可以提供默认值或者避免抛出`AttributeError`异常。
其它技术问题
3,881
社区成员
9,044
社区内容
发帖
与我相关
我的任务
其它技术问题
C/C++ 其它技术问题
复制链接
扫一扫
分享
社区描述
C/C++ 其它技术问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章