比如说在文本框里输入 MsgBox "OK" 就能直接执行这句。(仅限于简单命令)
这在IDE环境下应该很容易实现的,应该是EbExecuteLine那个吧?但请问——本主题,如何在编译后的程序里执行简单的VB源码?
或者说,对被编译的程序要做哪些改动,才能实现?

解决方案 »

  1.   

    我的意思是,可以用字符串识别命令,再在程序里给出相应的输出的方法吧但好像很麻烦,要先识别输入的命令,再分析出参数,再以这些参数来执行真正的命令......而且,每个命令都要做一个识别,麻烦ing.......还别说一个命令有NNNNN个参数......(连MsgBox函数都有N多的参数)
      

  2.   

    呵呵,是你的意思,不是我的意思!当然不是啦!我的意思是真正执行简单源码!在IDE里,VB本身就是解释型代码,执行一句解释一句(实际并没有这么简单,只是举个例子)
    而这个解释工作,是由VB编译器完成的(猜,应该主要是以代码行,为单位进行的部分编译执行)现在,希望在编译后的程序里,调用此功能,执行实时生成的部分简单语句!
      

  3.   

    用VB做VB的解释器~哈哈...多无聊!
      

  4.   

    To qyii(向范敬宜同志学习!) :
    无聊?太没想象力了吧!能执行简单源码的话,10K的程序就能做Windows上所有能做的事情!
    想想VBS能做的事情吧,只有想不到的To iambluebird(胡搅蛮缠):已有人很好的解释了这样做的后果;但好像很麻烦,要先识别输入的命令,再分析出参数,再以这些参数来执行真正的命令......
    而且,每个命令都要做一个识别,麻烦ing.......
    还别说一个命令有NNNNN个参数......(连MsgBox函数都有N多的参数)
      

  5.   

    楼上提到VBs,那就用VBs把,你写入的代码行,生成一个VBS文件件,执行,就得了。
      

  6.   

    最简单的命令 End 
    VBS能执行吗?
      

  7.   

    也有一种方式,可以采用后台编译的方式。比方说,让简单命令添加到一个module的sub main中,生成一个bas文件,后台用 vb6.exe编译,再执行,也能达到目的。
      

  8.   

    为了想实现本主题的一大原因,就是想达到动态交互的目的。
    能在程序运行中实时生成代码,能利用现有程序的资源,比如运行某个类的函数,调用内部某个窗体,这些仅在程序内部有效。
    这不同于VBS脚本,那是运行于进程外的,无法利用内部资源!这不仅仅是想像,VBIDE有很多人觉得不是很方便,所以很多高手自己开发过IDE,在那里面执行VB源码你以为是怎么办到的?难道是自己重新写了个编译器吗?没必要吧,总是调用了现有VB的资源。在VBIDE环境下,它也提供实时生成的单句源码执行的功能,这是调用了VBA5。DLL中的库
    但到了编译后的程序就不行了。我的想法是以一个最小的模拟IDE环境(只需要模拟,不需要其它任何功能,仅为了骗过VBA5。DLL)
    来执行代码。
      

  9.   

    看我的,这个是正解:'在工程里引用一下Microsoft Script Control然后,在窗体中:
    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
    快给我分儿...........
      

  10.   

    不是不想给你分,只是俺没有Microsoft Script Control,根本无法运行!
    太依赖控件了,这也是VB被人骂的某些原因,并不是每台机子上都能运行脚本的!
    VBS是完全重写的另一个东东,和VB无关,更不用谈与VB程序的交互!编译执行VB源码应该只和VB、VBA有关,至少打个End 就能退出当前程序,这才是真正的编译(或伪编译)执行了当前源码。最主要原因——这里没有Microsoft Script Control,根本无法运行!
      

  11.   

    引用一下Microsoft Script Control
    可以执行简单VBS语句,网上有一个完整范例自己找找
      

  12.   

    To qyii(向范敬宜同志学习!) 
    //凡事切合实际一点嘛...别总想着天上有神仙,说不定某天就来打救世人!晕,社会上的事,咱不予评价,没人能知道全部的事。但在电脑上,咱只知道,现在很多人都忘记了电脑的本名——电子数字计算机。
    充其量,它是人类在几十年前(呵呵,那时,我党应该有了吧)发明创造的。
    是为人类实现某种目的而造的工具。哪来的神仙?
    有了计算机后,我们自己就是神仙(或魔鬼)!
    现在计算机里运行的电子数字世界对以前的人来说还不就是神仙/魔鬼才能创造的吗?
    对于“神仙”来说,只要问一个他想做什么!
    上帝说要有光,于是有了光。对于计算机的“上帝”——人类来说,不也是这样吗?
    大到运行模拟宇宙演化、核武器模拟试验,小到开个作弊器,与机器人打CS,那不都是“上帝”创造的世界吗?
    呵呵,真的扯远了,让我们“神仙”自己来解救一下自己。本主题不是不可能做到,事实上早已做到了。
    大家都知道VB代码在IDE里是解释型的执行,可以做到边写边执行,这一切是怎么做到的?
    是IDE自己做到的吗?不是!不信?!你试试把VBA5。DLL删掉看看还能运行不?
    IDE主要提供一个方便的集成编辑环境,当调试时其后台也是调用VB本身的核心库,来解释执行当前语句行,这样看来,只要我们能直接调用到这些库,也就能实现本主题,但说一个很烂的想法,IDE不是允许我们进行扩展吗?(用的也是VB代码)那我们就做个能和自己程序交互的代码,当要执行语句时,由主程序发给代理插件,再交给VBIDE后台去执行,这样也可算是一个办法吧不过呢诶,因为那是其它“神仙”编的,俺不知道到底怎么做?请各位高手,“神仙”指教,谢谢! :)
      

  13.   

    To kmzs(.:RNPA:.山水岿濛) :
    不是范例问题,而是俺机子上没有Microsoft Script Control 所以无法运行!(PWin98SE)能说说它的具体文件名吗?
      

  14.   

    我觉得VB是先将源代码翻译成中间代码,可能就是P-CODE,然后再用VB的解释引擎来执行,
    这要对VB内部做大量分析,这个太费时间了,我是菜鸟没这个水平,看看有没有高手愿意做
      

  15.   

    zgd_post(无欲无戒)
    '不用,自己用VB构造一个虚拟的环境就行了比如:
    '-------------------------------
    dim a as long
    a = 100
    msgbox a
    '-------------------------------
    dim 是一个关键字,然后a是变量的名字,long是变量的类型(动态生成一个这样的变量)
     = 是一个关键字,前面的是要赋值的对像,后面是要赋予的值
    msgbox是一个函数(弹出式对话框),a(这个地方是取a的值)我说的是解释器,也就是一行一行的分析可以不用编译就能执行
      

  16.   

    boyzhang(张郎)(爱你爱到Windows没BUG的那天):
    但是对于内部类模块函数的调用就一定要在编译状态下了!
    VB的立即窗口就是这样,甚至当工程未运行时,立即窗口也能执行类模块里的函数,这是实时的编译,靠自己的字符串分解命令串,根本就不可能!渐渐的,本主题都趋向于做个伪编译器(不管自己解释也好,后台调用编译器也好,都属于伪编译,VB源码本身就是伪代码嘛:)
    自己解释命令行,我个人觉得有点吃力不讨好,一方面VB本身对于字符串的处理是最慢的,另一方面,自己做的解释器只能是有限的几个命令,这样就把自己也局限于里面了。
    我原来的目的,并不是为了写这个程序的代码而写代码,而是为了有这个功能的程序能做更多的事情而写的程序。想想吧,即使网管把电脑的大部分功能都封了,但留给你一个VB的立即窗口,那你能做些什么呢?(或者说,只要能上网,哪些做不到呢?)欢迎继续讨论,谢谢!
      

  17.   

    我做"VB函数添加大师"时为了知道VBIDE在编译DLL时都有些什么参数,自己做了一个LINK.EXE文件把参数保存下来,然后就对VBIDE编译DLL的过程有了一点的了解而做出了它;而为了知道EXPLORER相互调用时的参数,又自己做了一个EXPLORER来保存调用参数,后来对EXPLORER的调用也有了一点了解.而本次主题里,我觉得要是知道了VBIDE调用的是哪些文件来调试代码,以及都用了些什么参数来调用这些文件,就好办了.说到底,就如楼主所说,"渐渐的,本主题都趋向于做个伪编译器".就好像在做一个IDE一样.那么,分析IDE的工作过程就是重中之重了吧,大家觉得呢?
      

  18.   

    俺不懂汇编,但俺想可能命令行的调试应该用到VBA5。Dll的EbExecuteLine这个函数
    请问,有哪位高人能详细的分析一下这个函数是如何执行的?
    一旦了解它的运行机理,我们是否也能造一个模拟的运行环境?
      

  19.   

    你们看过超级绿豆做的一个叫 <<CVBAnyCall 调用任意代码(包括汇编及__cdecl调用约定的函数)>>的东东没有?http://supergreenbean.mblogger.cn/posts/5533.aspx可以在代码中动态调用API,还可以用VB调用汇编的代码,如果我们已经做了一个简单的解释器,可以调用API和汇编代码,解释器自身也可以做简单的运算,那不是就可以为所欲为了吗?Windows(32)里什么不是用API实现的?电脑里又有什么是汇编做不了的?
      

  20.   

    我还是觉得要实时运行代码,vbs脚本是一个不错的注意!
      

  21.   

    补充,vbs脚本文件中的代码中可以和已经编译好的vb程序中的函数\类等进行交互的!
      

  22.   

    走题了啦楼主现在要的不是"怎样实现运行代码",而是"怎样做一个简单的IDE"了
      

  23.   

    呵呵,其实目的都差不多,就是能运行实时的VB源码,最好还能与内部函数交互!
    不过,真不知道VBS能和已编译的VB程序内部函数交互?
    请问,TalentAyee(天才阿义)如何做?谢谢!
      

  24.   

    我觉得,VB在这方面就是一个大的优点.如果我们用C等语言开发,那为了调试程序一定要编译才行但是VB不用,可以直接在IDE里运行后跟踪就行了,呵呵
      

  25.   

    但VBS就不一样,它是完全重写的。必须依靠大量的自动化构件来实现其功能。
    至于它能和已编译的VB程序内部交互?有点怀疑?好吧,就说个VB中最简单的命令End,执行它,能让VBS的宿主程序退出吗?(不是自己分解字符串后用命令提换,而是实时编译后执行的指令)不用怀疑,这个在VB的立即窗口中,当主程序正在运行时,它是有效的!
      

  26.   

    Microsoft Script Control是vb带的呀,默认不安装的,为什么不用,要自己实现编译器呢?vb还带了许多好东西呢.Microsoft Script Control可以执行代码,可以操作对象,基本就是一个小型vb
      

  27.   

    要是能用的话,早就用啦,我没有没有!!!
    请哪位好心人,帮忙传个过来,谢谢!不过它还是有些限制的,End能用吗?
      

  28.   

    vb的安装盘里就有,找一个叫SCRIPT的东西(MSSCRIPT?反正类似)就可以了,还有中文帮助呢!
      

  29.   

    找找你的机器上是否有msscript.ocx
      

  30.   

    最近在考虑这个问题,因为我想把自己的程序做成插件形式,就不用老是增加一点内容就要重新编译了。
    至于楼主的问题,刚好在这里看到答案:《谈谈如何象VB IDE的Immediate一样不使用工程,可以单独执行代码片断》
    http://dev.csdn.net/Develop/article/15/article/19/19413.shtm
      

  31.   

    这不是答案,因为它不能在编译后的程序里用,谢谢参与!【问】如何在编译后的程序里执行简单的VB源码?俺的光盘里也没有msscript(VB5),估计在VB6的盘里,那也意味着默认98安装下是不带这个控件的。
    麻烦啊,以后都要拖个小尾巴咯(不好意思,目前就是编给98用户专用的,暂时坚持不支持2K,呵呵)