比如说在文本框里输入 MsgBox "OK" 就能直接执行这句。(仅限于简单命令)
这在IDE环境下应该很容易实现的,应该是EbExecuteLine那个吧?但请问——本主题,如何在编译后的程序里执行简单的VB源码?
或者说,对被编译的程序要做哪些改动,才能实现?
这在IDE环境下应该很容易实现的,应该是EbExecuteLine那个吧?但请问——本主题,如何在编译后的程序里执行简单的VB源码?
或者说,对被编译的程序要做哪些改动,才能实现?
而这个解释工作,是由VB编译器完成的(猜,应该主要是以代码行,为单位进行的部分编译执行)现在,希望在编译后的程序里,调用此功能,执行实时生成的部分简单语句!
无聊?太没想象力了吧!能执行简单源码的话,10K的程序就能做Windows上所有能做的事情!
想想VBS能做的事情吧,只有想不到的To iambluebird(胡搅蛮缠):已有人很好的解释了这样做的后果;但好像很麻烦,要先识别输入的命令,再分析出参数,再以这些参数来执行真正的命令......
而且,每个命令都要做一个识别,麻烦ing.......
还别说一个命令有NNNNN个参数......(连MsgBox函数都有N多的参数)
VBS能执行吗?
能在程序运行中实时生成代码,能利用现有程序的资源,比如运行某个类的函数,调用内部某个窗体,这些仅在程序内部有效。
这不同于VBS脚本,那是运行于进程外的,无法利用内部资源!这不仅仅是想像,VBIDE有很多人觉得不是很方便,所以很多高手自己开发过IDE,在那里面执行VB源码你以为是怎么办到的?难道是自己重新写了个编译器吗?没必要吧,总是调用了现有VB的资源。在VBIDE环境下,它也提供实时生成的单句源码执行的功能,这是调用了VBA5。DLL中的库
但到了编译后的程序就不行了。我的想法是以一个最小的模拟IDE环境(只需要模拟,不需要其它任何功能,仅为了骗过VBA5。DLL)
来执行代码。
Option ExplicitPrivate Sub Form_Load()Dim scr As New ScriptControl
Dim mycode As Stringscr.Language = "vbscript"
mycode = "public function Test()" + vbCrLf
mycode = mycode + "MsgBox ""Hello VB""" + vbCrLf
mycode = mycode + "End function"scr.AddCode (mycode)
scr.Eval ("Test()")End Sub
快给我分儿...........
太依赖控件了,这也是VB被人骂的某些原因,并不是每台机子上都能运行脚本的!
VBS是完全重写的另一个东东,和VB无关,更不用谈与VB程序的交互!编译执行VB源码应该只和VB、VBA有关,至少打个End 就能退出当前程序,这才是真正的编译(或伪编译)执行了当前源码。最主要原因——这里没有Microsoft Script Control,根本无法运行!
可以执行简单VBS语句,网上有一个完整范例自己找找
//凡事切合实际一点嘛...别总想着天上有神仙,说不定某天就来打救世人!晕,社会上的事,咱不予评价,没人能知道全部的事。但在电脑上,咱只知道,现在很多人都忘记了电脑的本名——电子数字计算机。
充其量,它是人类在几十年前(呵呵,那时,我党应该有了吧)发明创造的。
是为人类实现某种目的而造的工具。哪来的神仙?
有了计算机后,我们自己就是神仙(或魔鬼)!
现在计算机里运行的电子数字世界对以前的人来说还不就是神仙/魔鬼才能创造的吗?
对于“神仙”来说,只要问一个他想做什么!
上帝说要有光,于是有了光。对于计算机的“上帝”——人类来说,不也是这样吗?
大到运行模拟宇宙演化、核武器模拟试验,小到开个作弊器,与机器人打CS,那不都是“上帝”创造的世界吗?
呵呵,真的扯远了,让我们“神仙”自己来解救一下自己。本主题不是不可能做到,事实上早已做到了。
大家都知道VB代码在IDE里是解释型的执行,可以做到边写边执行,这一切是怎么做到的?
是IDE自己做到的吗?不是!不信?!你试试把VBA5。DLL删掉看看还能运行不?
IDE主要提供一个方便的集成编辑环境,当调试时其后台也是调用VB本身的核心库,来解释执行当前语句行,这样看来,只要我们能直接调用到这些库,也就能实现本主题,但说一个很烂的想法,IDE不是允许我们进行扩展吗?(用的也是VB代码)那我们就做个能和自己程序交互的代码,当要执行语句时,由主程序发给代理插件,再交给VBIDE后台去执行,这样也可算是一个办法吧不过呢诶,因为那是其它“神仙”编的,俺不知道到底怎么做?请各位高手,“神仙”指教,谢谢! :)
不是范例问题,而是俺机子上没有Microsoft Script Control 所以无法运行!(PWin98SE)能说说它的具体文件名吗?
这要对VB内部做大量分析,这个太费时间了,我是菜鸟没这个水平,看看有没有高手愿意做
'不用,自己用VB构造一个虚拟的环境就行了比如:
'-------------------------------
dim a as long
a = 100
msgbox a
'-------------------------------
dim 是一个关键字,然后a是变量的名字,long是变量的类型(动态生成一个这样的变量)
= 是一个关键字,前面的是要赋值的对像,后面是要赋予的值
msgbox是一个函数(弹出式对话框),a(这个地方是取a的值)我说的是解释器,也就是一行一行的分析可以不用编译就能执行
但是对于内部类模块函数的调用就一定要在编译状态下了!
VB的立即窗口就是这样,甚至当工程未运行时,立即窗口也能执行类模块里的函数,这是实时的编译,靠自己的字符串分解命令串,根本就不可能!渐渐的,本主题都趋向于做个伪编译器(不管自己解释也好,后台调用编译器也好,都属于伪编译,VB源码本身就是伪代码嘛:)
自己解释命令行,我个人觉得有点吃力不讨好,一方面VB本身对于字符串的处理是最慢的,另一方面,自己做的解释器只能是有限的几个命令,这样就把自己也局限于里面了。
我原来的目的,并不是为了写这个程序的代码而写代码,而是为了有这个功能的程序能做更多的事情而写的程序。想想吧,即使网管把电脑的大部分功能都封了,但留给你一个VB的立即窗口,那你能做些什么呢?(或者说,只要能上网,哪些做不到呢?)欢迎继续讨论,谢谢!
请问,有哪位高人能详细的分析一下这个函数是如何执行的?
一旦了解它的运行机理,我们是否也能造一个模拟的运行环境?
不过,真不知道VBS能和已编译的VB程序内部函数交互?
请问,TalentAyee(天才阿义)如何做?谢谢!
至于它能和已编译的VB程序内部交互?有点怀疑?好吧,就说个VB中最简单的命令End,执行它,能让VBS的宿主程序退出吗?(不是自己分解字符串后用命令提换,而是实时编译后执行的指令)不用怀疑,这个在VB的立即窗口中,当主程序正在运行时,它是有效的!
请哪位好心人,帮忙传个过来,谢谢!不过它还是有些限制的,End能用吗?
至于楼主的问题,刚好在这里看到答案:《谈谈如何象VB IDE的Immediate一样不使用工程,可以单独执行代码片断》
http://dev.csdn.net/Develop/article/15/article/19/19413.shtm
麻烦啊,以后都要拖个小尾巴咯(不好意思,目前就是编给98用户专用的,暂时坚持不支持2K,呵呵)