本文讲解程序自动监测系统是不是有此控件,如果没有,则自动注册此控件。这样就可以实现即使带控件也能实现做绿色软件。
VB编程中合理的使用第三方控件,往往能够事半功倍。但是使用第三方控件也有不好的地方,那就是为了保证程序正常运行,必须使程序能够在系统目录或程序目录下找到所用的第三方控件。要做到这一点通常有两种办法:一是把控件和程序制成一个压缩包发行,这样的缺点是有可能导致在程序传播过程中丢失控件文件。二是制作安装程序,缺点是制作过程烦琐。而且上面两种办法也不符合绿色软件的要求。所谓的绿色软件是指软件只有单个可执行文件且无须安装,目前很受用户欢迎。那么有没有办法在使用了第三方控件的情况下实现绿色软件梦呢?答案是有。
做法是,将第三方控件以自定义资源文件方式保存在程序中,程序运行之后使用控件之前将所用到的控件生成到该程序目录下,完成控件从可执行文件中的金蝉脱壳。
具体做法如下:
第一步:将要用到的控件拷贝到当前工程目录下,右键单击该控件,选择属性,记下文件大小。注意,应记下以字节为单位的具体数字,而不是多少K,以备编程使用。
第二步:引用并正常使用该控件。
第三步:新建资源文件加入工程,在资源文件编辑器中添加所使用的第三方控件为自定义资源(CUSTOM),资源号使用默认的101。如果使用了多个控件则分别添加到资源文件的101、102......资源项中,脱壳代码也要作相应的修改。
第四步:编写控件脱壳代码,使其读取资源文件的数据,在程序当前目录下生成控件。
代码如下:
Private Const OCXSIZE = 57344 '欲生成的控件大小是57344Byte,名字为CoolToolBar.ocx注意你的控件到底多大不一样的控件或不一样的版本
Sub Main() '注意要放到sub main中而不要放到form_load中,还要记得要把启动对象改成sub main
Dim Ocx() As Byte 'OCX是个Btye类型的数组
Dim Counter As Long
Ocx = LoadResData(101, "CUSTOM") '将自定义资源中101号资源读入数组OCX
'注意,微软的帮助中对加载自定义资源的说明有错误,自定义资源标识为"CUSTOM"而不是帮助所说的数字10
If Right(App.Path, 1) = "\") Then '读取程序所在路径,判断是否为根目录并分别处理
'程序在根目录下
If Dir(App.Path & "CoolToolBar.ocx") = "" Then '程序路径下有无控件,无则生成控件
'以二进制方式写(生成)控件(CoolToolBar.ocx)到主程序所在的目录
Open App.Path & "CoolToolBar.ocx" For Binary As #1
For Counter = 0 To OCXSIZE - 1 '注意因为从0 Byte开始因此以文件大小 - 1Byte 为终值
Put #1, , Ocx(Counter)
Next Counter
Close #1
End if
Else
'程序不在根目录下
If Dir(App.Path & "\CoolToolBar.ocx") = "" Then '程序路径下有无控件,无则生成控件
'以二进制方式写(生成)控件(CoolToolBar.ocx)到主程序所在的目录
Open App.Path & "\CoolToolBar.ocx" For Binary As #1
For Counter = 0 To OCXSIZE - 1 '注意因为从0 Byte开始因此以文件大小 - 1Byte 为终值
Put #1, , Ocx(Counter)
Next Counter
Close #1
End if
End if
Form1.Visible = True '主程序所用控件已经生成,显示主窗体,进入主程序。
End Sub
注意:将以上代码作为一个模块添加到工程中,并在工程-工程属性设置中将启动对象选为Sub Main,即上面的脱壳代码。然后编译生成EXE文件,将该EXE文件拷贝到其他没有安装所用控件的计算机上运行一下看看是否实现了控件携带之金蝉脱壳。如果是那么OK!以上为使用一个控件的情况,使用多个控件方法基本相同,大家可以自己做一下。
分享到:
相关推荐
这是使用VB 设计的注册ActiveX控件软件, 包含VB 调用系统命令的使用, 并使用了VB获取系统路径, 调用API函数, 复制文件等高级功能。 本资源还包含了一些VB常用的ActiveX控件, 如Flash8.ocx, comctl32.ocx, mci32.ocx,...
VB控件教程 VB控件大全 VB控件详解 VB控件用法 所有控件介绍
VB6.0 实现绘制曲线图控件,内含三个不同控件和实例
vb.net像VB6一样使用控件数组 像VB6一样用来保存对像的index值
vb控件大全vb控件大全vb控件大全vb控件大全vb控件大全
VB农历日期控件 VB农历日期控件
VB2008中使用SerialPort控件详解,从接收到发送。估计你看了就会用这个了,其实VB2008很简单哦~
利用vb中的串口通信控件进行串口连接,实现远程监控。 介绍了控件的属性及用法···
了解vb的深层架构vb6.0用户控件自定义控件
VB编写的CAD功能的软件,全部算法控件都有代码,对VB技巧与数学几何算法及VB绘图都是值得学习的地方
vb 画曲线的控件vb 画曲线的控件vb 画曲线的控件
C#变通方法实现VB6.0里面的控件数组,当然VB.net也可以用,,用了三种方法 ,代码添加事件,属性页里设置事件,判别并处理.
使用VB.NET写的CHART控件使用例程,简单易懂.
老外写的一个控件! 直接用 很简单!可以注册为普通的系统服务! VB 注册 系统服务 控件!
里边含有vb6.0软件按缺少的七八个控件以及控件的注册程序
工业控件,适用于vb工控编程的控件 简单易用
commondialog控件 vb中commondialog控件的使用方法 vb中commondialog控件的使用方法
VB media player 控件 VB media player 控件 VB media player 控件 VB media player 控件
vb6.0的皮肤控件的使用教程.rar vb6.0的皮肤控件的使用教程.rar vb6.0的皮肤控件的使用教程.rar
VB实现自动生成控件的程序语言.