游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5344|回复: 17

真没想到VB也可以这样用之VB能做什么

[复制链接]

56

主题

758

帖子

768

积分

高级会员

Rank: 4

积分
768
发表于 2007-7-31 16:17:00 | 显示全部楼层 |阅读模式
真没想到VB也可以这样用之VB能做什么

--------------------------------------------------------------------------------

http://Tech.acnow.net 05年02月14日 12:12 Blog



  但是为什么同样是MATH模块中的函数,abs是关键字,rnd却不是,VB文档里是不会告诉你为什么的,但如果你认真的看了我上面的实验分析,我们就能猜想这是因为VB对需要进一步优化的函数已经做了高度优化处理,VB开发小组为了保护他们的劳动成果,并显示他们对自己优化技术的自信,而禁止我们重写这些函数,同时VB开发小组也承认还有些函数有待进一步优化,所以准许我们重写之。在这里我要提出一个伟大的猜想:凡是能够被重写的函数就能够被优化,就象凡是大于2的偶数就能够被分解成两个质因数的和一样。

  说到优化,还应该谈谈直接API调用和使用API类型库的差别,还必须谈谈VB所使用的后端优化器(和VC用的是一样的优化器),还想谈谈如何尽最大可能来使用vTable绑定……

  看了本地代码,我们再来看看p-code,要是你看了MSDN中关于p-code的原理,你肯定会头大。平心而论p-code真是一个了不起的技术,代码大小平均可以缩小50%。我们把程序2编译成p-code看看,还是用DEPEND来观察,发现它并没有引入__vba开头函数(没有使用优化的VBA函数?),却引入了CallEngine这样的东西(肯定是为了调用p-code伪码解释引擎),而且和Native Code一样都引入了rtcMsgBox(编译生成的p-code在调用MsgBox时应该比在IDE环境中运行的p-code快)。

  如果你迫不及待地运行了程序2,你就会发现它将弹出一个应用程序错误对话框,说程序发生异常。别怕,这是因为调用了DebugBreak这个API的缘故,这个API其实就是产生一个Int 3中断,使得我们能够中断程序执行。如果你装了VC这样的支持即时调试的调试器,你可以在错误对话框中点击"取消",这样可以起动调试器来调试程序。我就是这样跟踪程序运行的。如果你想看看VB生成的程序反汇编代码可以自己试试,我们可以用同样的技术在VB或VBA的IDE中来中断程序执行,比如我们完全可以在Word的VB编辑器中运行上面程序2的代码,从而中断于Word的进程中,并可观察到VBA生成的p-code代码。比如VB和VBA在IDE中生成的p-code代码就会发现它们这间有很大的不同。

  所以,IDE中运行的程序和最终生成的程序是完全不同的。用SPY++看看你在IDE中运行的窗体,你会发现它在VB的主线程下,也就是说在IDE中你用程序做出的窗体和VB IDE工作窗口一样属于VB IDE,你的程序在IDE中运行时申请的资源也属于VB IDE。有些程序在IDE中运行会让IDE死掉(在VB5中写纯API多线程就千万别在IDE中运行,定死无疑,相比之下VB6的IDE健壮得多)。还有些程序可能在IDE中能正常工作,但生成EXE后就工作不了。总之,在写系统程序时要考虑到这种不同可能引起的问题。

  3)VB的编译技术,要我怎么夸你,又要我怎么骂你。

  看了上面对Native Code的高度评价,你可能会对VB做出的东西更有信心了,腰板更直了。是的,作为VB程序员没有什么需要害羞的,一个功力深厚的VB程序员理应拿比普通VC程序员更多的工资,因为他的生产力是VC程序员的好几倍,而做出的程序在质量上和VC做的相差无几。

  甚至有大师开玩笑说VB的内置对象就是用VB写出的,比如我们可以自己写Form.cls、Label.ctl,呵呵,我们还真不能排除这种可能性(虽然用VB不可能直接生成vb6.olb)。如果真是这样,看来VB小组自己都对自己的编译优化技术非常有信心。

  实际上我们看看VB安装目录下的C2.exe的属性,再看看VC的C2.DLL的属性,就会发现它们是同一个东西,同样Link.exe也是VC的,所以我们完全可以对VB程序的后端优化编译器以及联结放心了。它们根本就是VC开发小组东西,或者VB、VC都是同一个编译器开发小组在做编译模块。总之,我们可以壮着胆说我们VB做的程序其二次优化和联结用的是和VC一样的技术,嘿嘿,你有的我也有,我有的你没有的(纯属诡辩)。

  还有,没有任何编译器比VB编译器更快,因为在IDE中VB就是一种解释型语言,这才是VB开发效率高的关键,快得几乎感觉不得编译过程。其请求时编译,后台编译技术更是一只独秀,厉害啊!想想看,别的语言的程序员有多少时间花在了等待代码编译和重新联结上啊!

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2007-7-31 18:37:00 | 显示全部楼层

Re:真没想到VB也可以这样用之VB能做什么

vb6.olb是干啥的?

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2007-8-1 14:12:00 | 显示全部楼层

Re:真没想到VB也可以这样用之VB能做什么

好像是“真是意想不到”系列的第一章。

话说VB6的编译器真的很强大啊,我曾经为了优化一段代码速度,搞了很多天,最后连汇编都嵌进去了,表面上看比之前写的代码要高效很多,最后编译出来还是没有多少速度差别。

56

主题

758

帖子

768

积分

高级会员

Rank: 4

积分
768
 楼主| 发表于 2007-8-1 14:20:00 | 显示全部楼层

Re:真没想到VB也可以这样用之VB能做什么

VB编译器不是比C编译器要慢好多吗?

5

主题

972

帖子

975

积分

高级会员

Rank: 4

积分
975
发表于 2007-8-1 17:23:00 | 显示全部楼层

Re:真没想到VB也可以这样用之VB能做什么

guguai de bianyiqi.
vb zai yiban qingkuang xia zhishi jieshi zhixing a, kanshangqu dangran juede bijiao kuai la.

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
发表于 2007-8-5 22:28:00 | 显示全部楼层

Re:真没想到VB也可以这样用之VB能做什么

VB真的很不错啊

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2007-8-6 11:25:00 | 显示全部楼层

Re:真没想到VB也可以这样用之VB能做什么

高级语言向来都是这样,外表简单,内在复杂。

不像汇编,外表复杂,内在简单。

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
发表于 2007-8-6 17:00:00 | 显示全部楼层

Re:真没想到VB也可以这样用之VB能做什么

VB也很复杂啊……

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2007-8-12 12:01:00 | 显示全部楼层

Re:真没想到VB也可以这样用之VB能做什么

实行优化手段的时候也是有损耗的~~~~

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
发表于 2007-8-12 14:31:00 | 显示全部楼层

Re:真没想到VB也可以这样用之VB能做什么

那是因为优化的手段有问题……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 09:18

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表