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

解决方案 »

  1.   

    没有见过这个.如果只要showmessage这么简单的可以直接字符查找替换掉就可以了.
      

  2.   

    不可能,将字符串转变为命令字Function MyFun : Boolean ;
    begin
      Result := ... ;
    end ;s : String ;s := 'MyFun' ;通过 S 不可以调用 MyFun 的  ;
    --------------------------------------Study
      

  3.   

    不太可能吧,我也想过作类似的东西,不过到现在也没想到好办法,所以关注ing
      

  4.   

    利用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;
      

  5.   

    do:='showmessage('你好,你是高手')';就算是把 'showmessage(……)' 这个字符串的内容读入内存,也不可能执行,因为这个字符串根本不是可执行的机器代码。如果要执行它,肯定程序崩溃!  楼主要实现的这个功能,相当于做个编译器出来,根据一段源代码,生成可执行的机器码,然后动态运行。
      

  6.   

    可能说 解释器更恰当一些,就像 Basic 解释器那样的。
      

  7.   

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

  8.   

    乱说了:
    先将字符串代码保存。PAS文件,然后再在程序中调用DELPHI编译器打开那个文件执行,不知可以不可以
    学习!
      

  9.   

    不知道ehom(?!) ( ) 的方法怎么样?