比如:
procedure buttonclick(sender:Tobject);
var
do:String;
Begin
do:='showmessage('你好,你是高手')';
// 怎样把'你好,你是高手'这个字符串显示出来end
procedure buttonclick(sender:Tobject);
var
do:String;
Begin
do:='showmessage('你好,你是高手')';
// 怎样把'你好,你是高手'这个字符串显示出来end
解决方案 »
- delphi8中express组件在哪呢?为什么控件工具中找不到呢?
- 線程相關問題?
- 關于 windows.pas
- 如何能使程序启动时使用参数?-----------30分
- 新手求delphi+MSSQLSERVER的范例!
- 找程序员工作,地方:广州,vc delphi bcb orace mssql都可以
- 关于一个错误!
- DBGridEH数据刷新问题
- 我是用ADO连接数据库,那么我怎么对数据库进行操作呢?比如查找、删除、更新、插入。最好能不能给些源代码。。。。。。。。。。。。
- 一个问题请教
- 在TStringGrid/TDBGrid中,我用了行复选功能(MultiRowSelected),在程序中怎样判定哪些行是选中的行?
- 如何实现每次只显示20行记录
你能不能说说你具体要实现什么功能,看有不有其它什么方法。
//添加ActiveX控件MS Script ControlScriptControl.Language:='VBScript';//也可以是JScript等ScriptControl.ExecuteStatement('MsgBox("你好,你是高手")');//执行脚本
mov eax : $B8
call : $E8
ret : $C3type
PCode = ^TCode;
TCode = packed record
Code: array[0..2] of Byte;
Prc: Pointer;
Ret: Byte;
end;
var
Block:PCode;Block:=VirtualAlloc(nil, 11, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
Block^.Moveax:=$B8;//mov eax
Str:='你好,你是高手';
Block^.Str:=Pointer(PChar(Str));//字符串地址
Block^.Call:=$E8;//Call
Block^.Prc:=Pointer(Longint(@ShowMessage) - (Longint(@Block^.Call) + 5));//计算Showmessage的相对地址
Block^.Ret:=$C3;//Ret动态生成的代码为:
mov eax,[字符串地址]
call ShowMessage
ret//执行
asm
call Block//Block指向动态生成代码的首地址
end;
是解释的啊
怎么可能搬到编译的程序里
上面有很多控件可以以pascal形式写script,
并由该控件解释执行,
并且有不少是开发源码的,
即使你不想用别人的东西,
也可以拿来参考一下
mov eax : $B8
call : $E8
ret : $C3type
PCode = ^TCode;
TCode = packed record
Code: array[0..2] of Byte;
Prc: Pointer;
Ret: Byte;
end;
var
Block:PCode;Block:=VirtualAlloc(nil, 11, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
Block^.Moveax:=$B8;//mov eax
Str:='你好,你是高手';
Block^.Str:=Pointer(PChar(Str));//字符串地址
Block^.Call:=$E8;//Call
Block^.Prc:=Pointer(Longint(@ShowMessage) - (Longint(@Block^.Call) + 5));//计算Showmessage的相对地址
Block^.Ret:=$C3;//Ret动态生成的代码为:
mov eax,[字符串地址]
call ShowMessage
ret//执行
asm
call Block//Block指向动态生成代码的首地址
end;
呵呵,高。
if text ='showmessage' then showmessage(string);
呵呵另,对想自己做编译器的同志表示敬意啊!
你会找到很多解决方案
PCode = ^TCode;
TCode = packed record
Moveax: Byte;
Str: Pointer;
Call: Byte;
Prc: Pointer;
Ret: Byte;
end;
var
Block: PCode;
Str: String;Block:=VirtualAlloc(nil, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
Block^.Moveax:=$B8;//mov eax
Str:='你好,你是高手';
Block^.Str:=Pointer(PChar(Str));//字符串地址
Block^.Call:=$E8;//Call
Block^.Prc:=Pointer(Longint(@ShowMessage) - (Longint(@Block^.Call) + 5));//计算Showmessage的相对地址
Block^.Ret:=$C3;//Ret//调用
asm
call Block//Block指向动态生成代码的首地址
end;