|
本帖最后由 demon 于 2018-7-26 17:14 编辑
有人如是问:易语言支持库自带的 调用子程序() 无法传递参数指针
请问通过子程序指针调用子程序怎么样才能传递真实的参数指针, (实现被调用子程序修改对应参数时同时反应到调用子程序时所提供的参数数据上,和易语言的 "参考" 属性效果一样)具体想实现的效果: - .版本 2
- .支持库 spec
- .子程序 Main
- .局部变量 a, 文本型
- a = “1”
- 调用子程序 (&test, , , a)
- 调试输出 (a) ' 此处输出为1 需要实现的效果为 此处输出为2
- test (a)
- 调试输出 (a) ' 此处输出为2
- .子程序 test
- .参数 a, 文本型
- a = “2”
复制代码
以上是我截取某易论坛用户的提问,有兴趣的坛友不妨试试。环境是:多线程多并发
========
========
========
以下是我的解答:
代码文件:
实现(调用子程序)传参功能.rar
(1.27 KB, 下载次数: 78)
代码测试图片:
(未修改之前的结果图片就不传了,和问问题的那个易友在代码注释中说的一样。如果浏览器有乱码的可以复制代码到易语言中查看)
代码文本:- .版本 2
- .支持库 spec
- .子程序 Main
- .局部变量 a, 文本型
- a = “1”
- 调用子程序 (&test, , , a, 取变量地址 (a))
- 调试输出 (a) ' 此处输出为1 需要实现的效果为 此处输出为2
- test (a, 取变量地址 (a))
- 调试输出 (a) ' 此处输出为2
- .子程序 test
- .参数 a, 文本型
- .参数 指针, 整数型
- a = “2”
- 交换变量地址 (指针, 取变量地址 (a))
- ' 以下是分析过程
- ' 调试输出 (“想要改变的”, 指针)
- ' 调试输出 (“真有内容的”, 取变量地址 (a))
- .子程序 交换变量地址, , , 以变量地址和变量地址的交换方式,来交换两个变量数据,注意两变量要是相同类型的 [汇编版]
- .参数 变量地址1, 整数型, , 变量地址;可以用 取变量地址()或 取变量数据地址()取得地址
- .参数 变量地址2, 整数型, , 变量地址;可以用 取变量地址()或 取变量数据地址()取得地址
- 置入代码 ({ 139, 69, 8, 139, 77, 12, 139, 16, 135, 17, 137, 16 })
- ' mov eax,[ebp+08h]
- ' mov ecx,[ebp+0Ch]
- ' mov edx,[eax]
- ' xchg [ecx],edx
- ' mov [eax],edx
复制代码
有其他想法欢迎回帖讨论。
|
|