如何在VB中加载OCX文件
来源:互联网 发布:centos 浏览器安装 编辑:程序博客网 时间:2024/06/11 09:52
近来写的不少文件都是用到系统的ocx文件,但是发现很多xp的精简系统中居然都没有这些ocx文件。搞得我的程序在许多人的机器上无法运行,这样我就找到如下的方法来解决这个问题。即:在exe文件中将ocx作为资源文件,外部有则不理,外部没有则自动生成。
做法是,将第三方控件以自定义资源文件方式保存在程序中,程序运行之后使用控件之前将所用到的控件生成到该程序目录下,完成控件从可执行文件中的金蝉脱壳。
具体做法如下:
第一步:将要用到的控件拷贝到当前工程目录下,右键单击该控件,选择属性,记下文件大小。注意,应记下以字节为单位的具体数字,而不是多少K,以备编程使用。
第二步:引用并正常使用该控件。
第三步:新建资源文件加入工程,在资源文件编辑器中添加所使用的第三方控件为自定义资源(CUSTOM),资源号使用默认的101。如果使用了多个控件则分别添加到资源文件的101、102......资源项中,脱壳代码也要作相应的修改。
第四步:编写控件脱壳代码,使其读取资源文件的数据,在程序当前目录下生成控件。
说一下如何加载资源吧:
外接程序->外接程序管理器->VB 6 Resource Editor 加载->在工具栏里会多一个按钮,点击它。
然后就如下面的图,点击红色圆圈部分,就可以加载custom 资源了。
代码如下:
Private Const OCXSIZE = 198456 '欲生成的控件大小是198456Byte,名字为MCI32.OCX
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) = "($%$43%^#ASD#2@$#f$%^)" Then '读取程序所在路径,判断是否为根目录并分别处理
'程序在根目录下
If Dir(App.Path & "MCI32.OCX") = "" Then '程序路径下有无控件,无则生成控件
'以二进制方式写(生成)控件(CoolToolBar.ocx)到主程序所在的目录
Open App.Path & "MCI32.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 & "/MCI32.OCX") = "" Then '程序路径下有无控件,无则生成控件
'以二进制方式写(生成)控件(CoolToolBar.ocx)到主程序所在的目录
Open App.Path & "/MCI32.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中加载OCX文件
- 如何在VB中使用OCX文件
- 自己在VB编程过程中遇到的--不能加载MSCOMCTL.OCX提示
- ocx文件如何加载到网页
- 在IE中如何调试OCX控件
- 在VC中如何使用OCX控件
- 在VC中如何使用OCX控件
- vb中如何加载vb mousewheel.dll
- 在EXE文件中注册OCX部件
- Html页中如何使用加载OCX控件详解
- VB.NET如何在程序中动态创建EXECL文件
- 如何在VB 中读取 UTF-8 格式的文件?
- 如何注册ocx文件
- [VB.NET]如何在VB.NET中画.wave文件的波形图
- 如何在js文件中动态加载另一个js文件?
- 如何在js文件中动态加载另一个js文件?
- 如何使用VB制作OCX控件
- 如何在Borland Delphi2005中安装OCX、COM 类组件?
- sql 常用语句积累收藏
- CS结构的程序作三层式架构(控制层的实现)
- MsSqlServer2000上的split函数
- 如何安装微软IIS5.1安装文件
- j2me MIDP2.0已移植到 MT6225 GEMINI 0812 版本上
- 如何在VB中加载OCX文件
- 94个比付费软件更好的免费软件
- Shell里的流程控制
- C#实现一个简单的HTTP服务器
- SQL如何备份到异机
- RMI调用的简单实例
- 整理学习笔记
- 1.2 《插件式应用框架》
- W77E58芯片介绍