一个不知道是否荒诞的想法???!

lesong 2003-08-18 05:23:47
既然控件都可以动态生成,那可否动态生成代码?
例如:运行时动态生成一个函数或过程,生成以后还可以调用?
...全文
70 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
lesong 2003-08-20
  • 打赏
  • 举报
回复
谢谢各位,抱歉这次给分太少,下次多给些!
Thanks4Help 2003-08-20
  • 打赏
  • 举报
回复
up
limd 2003-08-20
  • 打赏
  • 举报
回复
可以的,这些要人为的控制一下程序的执行路径,先在内存中分配一点空间放生成的代码,然后修改堆栈里的返回地址,当然在被调用的代码中,也要有返回地址的,这个返回地址是原来被修改的返回地址,意思是说当一个函数返回时,就调用了动态生成的代码,执行完后就返回原来的程序执行.如原来是A->B->A 动态生成C,现在修改堆栈后,就变成了A->B->C->A的调用方式了。
自己没有去试过,但看过这方面的书,应该可以的,因为有很大有名的程序,都这样做的,包括一些病毒程序和黑客程序。
祝你好运了。
叶帆 2003-08-20
  • 打赏
  • 举报
回复
to yunok(杨云鹏)

运鹏兄太谦虚了,大家一起交流么!
tanyx 2003-08-20
  • 打赏
  • 举报
回复
不可以,这想法是半夜生成的,天亮就知道错了。就像我半夜发明了把我传真到另外一个地方去。
前面说的解决办法都违背了提问的初衷。
lesong 2003-08-20
  • 打赏
  • 举报
回复
好的,谢谢各位关注。现在稍微有点忙,晚上结贴。
还有一问to (叶帆):
确实可以用集合解决。但有人说用集合会大大降低系统性能,效率很低。不知道用集合后跟我以前用的select case结构比起来谁的效率高些,如果比那个效率还低,那就违背了我的初衷了!
since1990 2003-08-20
  • 打赏
  • 举报
回复
up
lesong 2003-08-19
  • 打赏
  • 举报
回复
我想做的事情就是从文件读取一系列的“赋值语句”,用Ebexecutline执行一下就实现对程序中的变量赋值!如果不能做到这一点,我就必须从文件中读取“赋值字串”,然后做繁琐串操作,匹配程序中的对应变量,才能实现赋值,很繁琐且效率不高。
叶帆 2003-08-19
  • 打赏
  • 举报
回复
我想只能用变通的方法了,把它写在文件里,在读取出来。

一时我也想不出有什么好办法。
lesong 2003-08-19
  • 打赏
  • 举报
回复
yefanqiu(叶帆) :你好,我是说动态执行的代码能否与动态代码外的变量传值?
例如:
Private Sub Command1_Click()
Dim res As Boolean
dim var as single
res = ExecuteLine("var=1.7:msgbox var") '这里面msgbox引用var可以成功(=1.7)
msgbox var '这里仍然是var=0!!!我想要的就是这里var也被赋值1.7
End Sub

yunok 2003-08-19
  • 打赏
  • 举报
回复
叶帆兄也来了!呵呵.本来想说两句的.现在不敢狂妄了. :)
Alicky 2003-08-19
  • 打赏
  • 举报
回复
可以。
叶帆 2003-08-19
  • 打赏
  • 举报
回复
可以,不过效率要低的多

Option Explicit

' ¶ÔÓÚ VB6
Private Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long

' ¶ÔÓÚ Access 97/VBE.dll clients like Word 97 and Excel 97
' Private Declare Function EbExecuteLine Lib "vba332.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long

Private Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
End Function


Private Sub Combo1_Click()
Text1 = Combo1.Text
End Sub

Private Sub Command1_Click()
Dim res As Boolean
res = ExecuteLine(Text1.Text)
End Sub


Private Sub Form_Load()
' Chr$(34)ÊÇË«ÒýºÅ
Combo1.AddItem "Var = msgbox(" & Chr$(34) & "¿´µ½ÁË£¿ºÜºÃÓá£" & Chr$(34) & " & vbCrLf & " & Chr$(34) & "ÊÇ·ñ¼ÌÐøʵÑé?" & Chr$(34) & ", vbYesNo + vbInformation)" & ":" & "If var = vbNo Then End"
Combo1.AddItem "shell " & Chr$(34) & "calc.exe" & Chr$(34) & ",vbNormalFocus"
Combo1.AddItem "msgbox SecretFunction(2,2),vbInformation"
Combo1.AddItem "Form1.BackColor = vbRed"
Combo1.AddItem "var = 3^2 + sin(3.1415926/4):msgbox var"
Combo1.ListIndex = 0
End Sub
叶帆 2003-08-19
  • 打赏
  • 举报
回复
to lesong(lesong)
你的问题,用集合可以很好的解决你的问题,你的帖子已回复。
lesong 2003-08-19
  • 打赏
  • 举报
回复
to (叶帆):
谢谢,你的意思我明白!我之所以想动态执行代码,就是想避免if strName(i)=abc$判断,因为如果文件中有很多参数的话,每个参数都要判断若干次。
有空的话看看我下面这个帖子:
http://expert.csdn.net/Expert/topic/2154/2154627.xml?temp=.121731
叶帆 2003-08-19
  • 打赏
  • 举报
回复
to lesong(lesong)
我的意思是对 dim DEN as single ,EMI as single,你直接定义为数组
如 dim v(100) as single
dim strName(100) as string - 存放名称 ,它两一一对应

如果:a$="DEN=1.2,EMI=11.7",
for i=1 to 100
if strName(i)=abc$ then v(i)=变量值 abc 为从a$取得的变量名,变量值也是从a$取得
next
hc_z 2003-08-19
  • 打赏
  • 举报
回复
好像不是什么新想法吧。
以前听一个高手说过,有一种语言就是这样的,他是在执行时才编译的,借以跨平台。有点走题,这确实时软件的一个发展方向。现在一些设计工具,象rose都可以将流程图翻译成相关的语言代码。这应该看成时向这方面前进吧。
lesong 2003-08-19
  • 打赏
  • 举报
回复
to:yefanqiu(叶帆)
或者我举这样一个例子:
有两个变量: dim DEN,EMI as single
两变量初值: DEN=33.7:EMI=1.25
现在有一个字符串a$(从文件中读出来),从a$中去读取参数值赋给定义的同名变量:
例如:
1.如果:a$="DEN=1.2,EMI=11.7",赋值后结果应该为:DEN=1.2:EMI=11.7
2.如果:a$="EMI=80",仅给定DEN值,则赋值后结果: DEN=1.2(仍为初值): EMI=80
我文件中读出来的串可能只对部分变量赋值,而不是所有变量的都赋值,没有赋值的仍然为初始值!我的意思是想“按名赋值”,a$中没有赋值的变量,我就不管它。如果我能实现动态执行代码且传参数的话:我读出来的a$是那些赋值语句,结果就只影响这些参数。
叶帆 2003-08-19
  • 打赏
  • 举报
回复
to lesong(lesong)
我很奇怪,你的变量命名可以用相应数组
一个数组放变量名
一个数组放变量

没有必要如你那样命名


六脉神剑绝学 2003-08-19
  • 打赏
  • 举报
回复
还是研究一下SCRIPT控件比较好。
加载更多回复(9)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧