VB执行动态代码的变量作用域问题

dragon_lzw 2016-09-24 06:29:12
小弟一个程序中需要实现动态代码,即在程序运行过程中生成代码,写成字符串,再用ExecuteStatement来执行字符串中的代码,如下所示,测试后发现可以运行,但是里面的变量的值不对,估计是作用域出了问题,如下,在ExecuteStatement “a=5”之后,外面更改了a=3,再运行ExecuteStatement "msgbox a"时a依旧是5,需求是在ExecuteStatement中更改了变量的值,在外面也跟着更改,而在外面更改了变量的值之后也一样,不知道该如何处理,非常感谢!

Private Sub Command1_Click()
Dim a As Integer
Dim ob As Object
Set ob = CreateObject("scriptcontrol")
ob.Language = "VBscript"
ob.ExecuteStatement "a = 5"
a = 3
ob.ExecuteStatement "msgbox a"
...全文
4824 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-11-08
  • 打赏
  • 举报
回复
引用 6 楼 vansoft 的回复:
赵4复读机果然名不虚传! 你得把变量A这个对象传进去才行。 写法不对。
过奖!过奖!
vansoft 2016-11-06
  • 打赏
  • 举报
回复
赵4复读机果然名不虚传! 你得把变量A这个对象传进去才行。 写法不对。
赵4老师 2016-11-02
  • 打赏
  • 举报
回复
里面/外面 底层/上层 本机/远程 国内/国外 Windows/Linux 通用OS/嵌入OS 英文/汉字 老旧环境/最新环境 8位/16位/32位/64位 …… 通吃!
赵4老师 2016-11-02
  • 打赏
  • 举报
回复
请自行将以下“A语言”替换为“VB6”,“B语言”替换为“VB6中的动态代码”: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
熊孩子开学喽 2016-11-02
  • 打赏
  • 举报
回复
直接改变量是不行的. 正好以前做过类似的一件事, 折腾了半天也算达到目的了. 你得先搞一个类, 把你需要改变的值定义为这个类的公有变量. 比如说: clase sss public a as string ... end clase 然后你在程序内部实例化: dim SS as new sss 然后你就可以script或者callbyname了, (实际上对着一个变量你能做的也就是赋值而已)
一如既往哈 2016-09-28
  • 打赏
  • 举报
回复
感觉楼主应该换个思路来解决问题。 这个动态代码估计有很大局限的
舉杯邀明月 2016-09-25
  • 打赏
  • 举报
回复
这恐怕不行,特别是“外面的”更不可能改到“里面的”。 用这种方法,就算“里面的改外面的”可能也比较难。 你那些“动态代码”明显是属性解释执行的代码, 而“外面的”变量,是编译时确定了内存地址的, 它们之间没有任何关联。 不知道scriptcontrol的脚本强大到何种地步, 反正觉得即使想实现“里面的改外面的”,也不是那么好办的事。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧