比如:
procedure buttonclick(sender:Tobject);
var
   do:String;
Begin
   do:='showmessage('你好,你是高手')';
   // 怎样把'你好,你是高手'这个字符串显示出来end

解决方案 »

  1.   

    1.定义一个TXXXParser类
    2.写一个简单的词法分析器
    3.写一个执行器执行语义
    这样一个简单的解释器就产生了.   :)
      

  2.   

    要做这种事情如果你不是一定要Delphi的语法的话可以使用Windows的脚本引擎来做1、系统有COM对象
    2、Dream Collection有一个script组件
    3、MS有一个Script Control OCX都可以使用,可以同时支持VBscript,Javascript等语言
      

  3.   

    利用VirtualAlloc分配虚拟内存,并指定这块内存为可读写并可执行,然后在该块内存中加入代码(机器语言),利用嵌入ASM跳转到刚才分配的内存地址,执行其中动态加入的代码相应汇编代码对应的机器代码
    call : $E8
    xor eax, eax : $33C0
    ret : $C3type
      PCode = ^TCode;
      TCode = packed record
        Code: array[0..2] of Byte;
        Prc: Pointer;
        Ret: Byte;
      end;
    const
      BlockCode: array[0..2] of Byte = ($33,$C0,$E8);
    var
      Block:PCode;Block:=VirtualAlloc(nil, 7, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    Move(BlockCode, Block^.Code, SizeOf(BlockCode));
    Block^.Prc:=Pointer(Longint(@Showmessage) - (Longint(@Block^.Code[2]) + 5));//计算Showmessage的相对地址
    Block^.Ret:=$C3;//执行
    asm
    call Block
    end;
      

  4.   

    这时的do不就是个函数了吗?楼主的意思就是说怎么让delphi的编译器把一个string类型的变量当成一个函数
      

  5.   

    刚才找了一下新版本的Dream Collection里面的DCScript支持DelphiScriptDelphiScript支持大部分的Standard Pascal 语法看看这个地方可能也有点用处:http://www.dwscript.com
      

  6.   

    Component->Import ActiveX Control->Microsoft Script Control
    //添加ActiveX控件MS Script ControlScriptControl.Language:='VBScript';//也可以是JScript等ScriptControl.ExecuteStatement('MsgBox("你好,你是高手")');//执行脚本
      

  7.   

    借问一下,delphi里面有没有缓冲区溢出攻击?
      

  8.   

    如果问题解决了的话,能否也给我一份。
    [email protected]强烈关注!
      

  9.   

    please CC to me :)
    TKS
      

  10.   

    Script方法应该不行,因为无法解释API调用,建议启动WSH脚本解释,但是对于禁止脚本解释的无效,可以尝试自己包装WSH的功能
      

  11.   

    我说,如果这个功能得以实现的话,是不是要把delphi编译器打包在你的软件中一起发布啊?
      

  12.   

    Delphi Interpreter
    就是你所要的了     Delphin (pascal interpreter)
    Version 1.21 
    Copyright (c) 1997,1998 S.Kurinny & S.Kostinsky
    D2 D3 CPB1 CPB3
    -----------------------------------------------------If you want to integrate pascal scripting language into your 
    application this component is for you.* Can load and execute DFM+PAS files
    * Any VCl component/procedure/function can be used in scripts
    * Automatical unit import
    * Supports subset of Object Pascal language-----------------------------------------------------
    e-mail: Sergey Kurinny  [email protected]
       WWW: http://www.brama.com/dream-co 
      

  13.   

    www.smiling.com.cn下superDelphi电子小组中有Light Script Engine(我编的),能够轻松胜任你的要求。
      

  14.   

    我认为就你提出的问题里,除了再技术细节上讨论这个问题有意义之外,没有别的实质意义。我去年的时候也是疯狂找这方面解决方案,希望可以象脚本语言可以再Runtime的时候运行一个有字符串方式提供的方法,呵呵,当然我最后找到了楼上所说的dws。用了之后除了惊奇的它存在之外,还发现原来解决我原来的问题是可以采用别的非解释性的途径来解决的。不过说实话,用dws来解决上面提到的解释性运行的问题,实在是麻烦不行。所以我建议楼主,还是再考虑一下有没有其他方法来解决。不要栓死在一棵树上。
      

  15.   

    ehom(?!) 你的代码如何使用,我试了下,最后执行时报错
      

  16.   

    ehom(?!)可以执行,在窗体上加一个 MS Script ControlScriptControl1.Language:='VBScript';//也可以是JScript等ScriptControl1.ExecuteStatement('MsgBox("你好,你是高手")');//执行脚本
    不能执行是没有加1
      

  17.   

    Delphi是编译语言, 所以它所有的关键字是在发布前编译成二进制代码的。所以这个功能是绝对不可能会实现。
        VF有如此的功能,是因为它是解释语言。 VF的程序执行时才利用解释器作语法解释。
        不仅Delphi,任何编译语言都不可能实现动态组合关键字,请不要再费力气了。
      

  18.   

    to cxjLike(清风吹) :你说的一点都没有错,不过确实有人写出出这样的组件包,比如dws.通过这样的组件确实可以将符合pascal(甚至是object pascal )语法的代码作为脚本的方式存储在编译文件之外的文件上.不过使用起来还是麻烦的很,尤其是调用控件或者使用Ole的时候都支持不是很完善.
      

  19.   

    我好像上一次在哪里有下关于PARSER的资料..
    下次我找找..找到的话会发出来共享的..
      

  20.   

    To 楼主~  我记的Ehom以前发过一个专门的帖子介绍的就是你这个功能的实现,用他的名字查查吧!
      

  21.   

    推荐使用脚本引擎
    DelphiWebScript
    全部源码,还有例子,和Delphi很般配哟。
      

  22.   

    http://expert.csdn.net/Expert/topic/1711/1711667.xml?temp=.2812311
      

  23.   

    TScriptControl控件就可以作到这一点,他可以把字符串解释成JavaScript语言和VBScript语言。引入类型库Microsoft Script Control 1.0  安装完毕,该控件就出现在控件板上