怎样将OCX植入VB.NET执行文件内
创始人
2024-06-10 10:41:44
0

在VB中怎么样很好的使用第三方控件呢?在工作中我积累了许多经验,这里我们来谈谈关于第三方控件的理解,让大家在以后的编程中更方便。但是使用第三方控件也有不好的地方,那就是为了保证程序正常运行,必须使程序能够在系统目录或程序目录下找到所用的第三方控件。要做到这一点通常有两种办法:一是把控件和程序制成一个压缩包发行,这样的缺点是有可能导致在程序传播过程中丢失控件文件。二是制作安装程序,缺点是制作过程烦琐。而且上面两种办法也不符合绿色软件的要求。所谓的绿色软件是指软件只有单个可执行文件且无须安装,目前很受用户欢迎。那么有没有办法在使用了第三方控件的情况下实现绿色软件梦呢?答案是有。

#T#做法是,将第三方控件以自定义资源文件方式保存在程序中,程序运行之后使用控件之前将所用到的控件生成到该程序目录下,完成控件从VB.NET执行文件中的金蝉脱壳。

VB.NET执行文件具体做法如下:

第一步:将要用到的控件拷贝到当前工程目录下,右键单击该控件,选择属性,记下文件大小。注意,应记下以字节为单位的具体数字,而不是多少K,以备编程使用。

第二步:引用并正常使用该控件。

第三步:新建资源文件加入工程,在资源文件编辑器中添加所使用的第三方控件为自定义资源(CUSTOM),资源号使用默认的101。如果使用了多个控件则分别添加到资源文件的101、102......资源项中,脱壳代码也要作相应的修改。

第四步:编写控件脱壳代码,使其读取资源文件的数据,在程序当前目录下生成控件。

代码如下:

  1. Private Const OCXSIZE = 57344 '欲生成的控件大小是57344Byte,名字为CoolToolBar.ocx  
  2.  
  3. Sub Main()  
  4. Dim Ocx() As Byte 'OCX是个Btye类型的数组  
  5. Dim Counter As Long  
  6. Ocx = LoadResData(101, "CUSTOM") '将自定义资源中101号资源读入数组OCX  
  7. '注意,微软的帮助中对加载自定义资源的说明有错误,自定义资源标识为"CUSTOM"而不是帮助所说的数字10  
  8.  
  9. If Right(App.Path, 1) = "($%$43%^#ASD#2@$#f$%^) Then '读取程序所在路径,判断是否为根目录并分别处理  
  10. '程序在根目录下  
  11. If Dir(App.Path & "CoolToolBar.ocx") = "" Then '程序路径下有无控件,无则生成控件  
  12. '以二进制方式写(生成)控件(CoolToolBar.ocx)到主程序所在的目录   
  13. Open App.Path & "CoolToolBar.ocx" For Binary As #1   
  14. For Counter = 0 To OCXSIZE - 1 '注意因为从0 Byte开始因此以文件大小 - 1Byte 为终值  
  15. Put #1, , Ocx(Counter)  
  16. Next Counter  
  17. Close #1  
  18. End if   
  19. Else  
  20. '程序不在根目录下  
  21. If Dir(App.Path & "\CoolToolBar.ocx") = "" Then '程序路径下有无控件,无则生成控件  
  22. '以二进制方式写(生成)控件(CoolToolBar.ocx)到主程序所在的目录   
  23. Open App.Path & "\CoolToolBar.ocx" For Binary As #1  
  24. For Counter = 0 To OCXSIZE - 1 '注意因为从0 Byte开始因此以文件大小 - 1Byte 为终值  
  25. Put #1, , Ocx(Counter)  
  26. Next Counter  
  27. Close #1  
  28. End if  
  29. End if  
  30. Form1.Visible = True '主程序所用控件已经生成,显示主窗体,进入主程序。  
  31. End Sub    

注意:将以上代码作为一个模块添加到工程中,并在工程-工程属性设置中将启动对象选为Sub Main,即上面的脱壳代码。然后编译生成EXE文件,将该EXE文

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...