设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 4317|回复: 3
收起左侧

实现(调用子程序)传参功能

[复制链接]
发表于 2018-7-26 17:14:27 | 显示全部楼层 |阅读模式
本帖最后由 demon 于 2018-7-26 17:14 编辑

有人如是问:
易语言支持库自带的 调用子程序()  无法传递参数指针

请问通过子程序指针调用子程序怎么样才能传递真实的参数指针, (实现被调用子程序修改对应参数时同时反应到调用子程序时所提供的参数数据上,和易语言的 "参考" 属性效果一样)
具体想实现的效果:
  1. .版本 2
  2. .支持库 spec

  3. .子程序 Main
  4. .局部变量 a, 文本型

  5. a = “1”
  6. 调用子程序 (&test, , , a)
  7. 调试输出 (a)  ' 此处输出为1   需要实现的效果为 此处输出为2
  8. test (a)
  9. 调试输出 (a)  ' 此处输出为2

  10. .子程序 test
  11. .参数 a, 文本型

  12. a = “2”
复制代码

以上是我截取某易论坛用户的提问,有兴趣的坛友不妨试试。环境是:多线程多并发

========
========
========
以下是我的解答:
代码文件:
实现(调用子程序)传参功能.rar (1.27 KB, 下载次数: 78)
代码测试图片:
(未修改之前的结果图片就不传了,和问问题的那个易友在代码注释中说的一样。如果浏览器有乱码的可以复制代码到易语言中查看)
78910.png
代码文本:
  1. .版本 2
  2. .支持库 spec

  3. .子程序 Main
  4. .局部变量 a, 文本型

  5. a = “1”
  6. 调用子程序 (&test, , , a, 取变量地址 (a))
  7. 调试输出 (a)  ' 此处输出为1   需要实现的效果为 此处输出为2
  8. test (a, 取变量地址 (a))
  9. 调试输出 (a)  ' 此处输出为2

  10. .子程序 test
  11. .参数 a, 文本型
  12. .参数 指针, 整数型

  13. a = “2”
  14. 交换变量地址 (指针, 取变量地址 (a))
  15. ' 以下是分析过程
  16. ' 调试输出 (“想要改变的”, 指针)
  17. ' 调试输出 (“真有内容的”, 取变量地址 (a))

  18. .子程序 交换变量地址, , , 以变量地址和变量地址的交换方式,来交换两个变量数据,注意两变量要是相同类型的 [汇编版]
  19. .参数 变量地址1, 整数型, , 变量地址;可以用 取变量地址()或 取变量数据地址()取得地址
  20. .参数 变量地址2, 整数型, , 变量地址;可以用 取变量地址()或 取变量数据地址()取得地址

  21. 置入代码 ({ 139, 69, 8, 139, 77, 12, 139, 16, 135, 17, 137, 16 })
  22. ' mov eax,[ebp+08h]
  23. ' mov ecx,[ebp+0Ch]
  24. ' mov edx,[eax]
  25. ' xchg [ecx],edx
  26. ' mov [eax],edx
复制代码


有其他想法欢迎回帖讨论。

相关帖子

发表于 2018-7-26 18:57:02 | 显示全部楼层
我也占个位置
发表于 2018-7-26 19:32:41 | 显示全部楼层
我也看不懂,坐个飞机位。
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-25 17:38 , Processed in 1.262072 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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