当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: VB一直以来被认为有以下优缺点:优点是上手快、开发效率高;缺点是能力有限,运行效率低。
 

 

 ·为您的图片添加电灯光照效果    »显示摘要«
    摘要:为您的图片添加电灯光照效果 http://www.syszedu.net/jiang/dragon/1537.htm--------------------------------------------------------------------------------   下面便给您设计这种加电灯光照效果的addlightctrol控件。其原理是这样的:图片区域用黑色填充,并在内存中读......
    摘要:one of the easiest ways to speed up your graphics is to use the native api calls rather than the built in graphical methods. for example, using the api functions getpixel and setpixel is about 3x fast......


删除自己

vb一直以来被认为有以下优缺点:优点是上手快.开发效率高;缺点是能力有限,运行效率低.vb被其它语言的拥护者诟病的有很多,不支持指针,不支持重载,不支持内联汇编等等等等.当我们享受着vb的简单时,却发现我们的发挥空间越来越小.的确,简单与功能强大这两者本身就是一对矛盾.那怕一行代码不写,仅仅起动运行一个空窗体这样简单动作,vb在底下就为我们做了大量复杂的工作(决不仅仅是注册窗口类.显示窗口.起动消息循环这么简单),而这些工作对程序员来说是透明的.

 好了,开始吧!我们需要的软件,vb6+sp6,反编译软件w32dsm89(vc也行);相关知识:熟悉vb,最好知道c语言中的指针,堆栈,当然,不懂也不要紧,相关知识笔者都会一一给出解释的. 【程序编程相关:ASP与ActiveX控件交互实战(三)

 由于本人的水平有限,以及相关硬件的制约(我的台式电脑cpu还是pii450,只能装win2000),以下的结论没特殊声明只对win2000有效. 【推荐阅读:ASP与ActiveX控件交互实战(二)

 1.copymemory 【扩展信息:给网站添加一个注册表 之 “类的应用”

一.基本概念

如copymemory的声明,它是定义在kernel32.dll中的rtlmovememory这个api,32位c函数库中的memcpy就是这个api的包装.它的功能是将从source指针所指处开始的长度为length的内存拷贝到destination所指的内存处.它不会管我们的程序有没有读写该内存所应有的权限,一但它想读写被系统所保护的内存时,我们就会得到著名的access violation fault(内存越权访问错误),甚至会引起更著名的general protection (gp) fault(通用保护错误) .所以,在进行本系列文章里的实验时,请注意随时保存你的程序文件,在vb集成环境中将"工具"->"选项"中的"环境"选项卡里的"启动程序时"设为"保存改变",并记住在"立即"窗口中执行危险代码之前一定要保存我们的工作成果.

2.vatptr/strptr

它们是vb提供给我们的宝贝,它们是vba函数库中的隐藏函数.varptr返回的是变量的地址,strptr返回的是bstr指向的unicode字符数组的地址.下面详细阐述一下bstr.

假设变量str位于地址aaaa处,而这个字符数组在地址xxxx处,它是变量str的内容.

为了看到以下的内容:

  varptr=aaaa

  strptr=xxxx

我们只要运行以下的代码:

 dim lng as long

 dim i as integer

 dim s as string

 dim b(1 to 10) as byte

 dim sp as long, vp as long

 

 s=”help”

 

 sp=strptr(s)

 debug.print “strptr:” & sp

 

 vp=varptr(s)

 debug.print “varptr:” & vp

 ‘验证vp=aaaa与sp=xxxx

 copymemory lng,byval vp,4

 debug.print lng=sp

 ‘查看sp包含的字符数组的地址,从那个地址复制一个字节数组然后打印

 copymemory b(1),byval sp,10

 for i=1 to 10

  debug.print b(i)

 next i

输出结果是:

 strptr=xxxx

 varptr=aaaa

 true

 104   0   101   0   108   0   112   0   0   0

为什么要隐藏vatptr/strptr?因为vb开发小组不鼓励我们用指针.以下就是varptr函数在c与汇编语言里的样子:

    在c里样子是这样的:

    long varptr(void* pv){

        return (long)pv;

    }

    所对就的汇编代码就两行:

    mov         eax,dword ptr [esp+4]

    ret         4           ´弹出栈里参数的值并返回.

之所以让大家了解varptr的具体实现,是想告诉大家它的开销并不大,因为它们不过两条指令,即使加上参数赋值.压栈与调用指令,整个获取指针的过程也就六条指令.当然,同样的功能在c语言里,由于语言的直接支持,仅需要一条指令即可.
...   下一页
 ·turbo c(v2.0)使用指南    »显示摘要«
    摘要:turbo c(v2.0)使用指南(本文的许多命令或方法同样适用于tc3)  在开始看本文以前,我先说明一下c语言的安装和使用中最应该注意的地方:许多网友在下载turbo c 2.0和turbo c++ 3.0后,向我问得最多的是在使用过程中碰到如下问题:1)出现找不到 stdio.h conio.h等include文件;2)出现cos.obj无法连接之类的错误  这些问题是由于没有设置好路径引起......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE