文号
t12734
阅读
24825
回复
4
收藏
4
解决发布VB程序时携带大量ocx、dll文件的问题
2009/02/16
IP:湖南
  有时一个使用了复杂控件的VB程序运行需要一些普通WindowsXP没有的ocx或者dll,在发布程序时往往需要将这些文件和exe文件一起打包,让一些程序看起来很不清爽,可不可以让我们的程序都只有一个exe文件没有其它的东西呢?
  其实VB程序可以包含各种资源文件,这就为创建一个只有exe文件的程序提供了可能。但当我尝试将ocx、dll以资源文件的形式包含在exe文件中,当程序运行的时候尝试释放时又遇到一个问题,程序加载窗体时因为没找到支持文件而出错中断,没等到释放文件就崩溃了。为了解决这个问题,我们需要在加载窗体之前执行一个main过程,释放ocx、dll等文件。
以我写的UDPFighter为例,本程序需要一个MSCOMCTL.OCX和一个MSWINSCK.OCX,将这两个文件添加为资源文件。
1.jpg
创建一个标准模块,并在其中写一个main过程。代码如下:
'UnRes和TeShuML为自己写的函数,详见源文件
Sub main()
If Dir(TeShuML(37) & "\MSCOMCTL.OCX") = "" Then
    Call UnRes(101, "CUSTOM", TeShuML(37) & "\MSCOMCTL.OCX")   '释放文件
  Sleep 500
End If
If Dir(TeShuML(37) & "\MSWINSCK.OCX") = "" Then
    Call UnRes(102, "CUSTOM", TeShuML(37) & "\MSWINSCK.OCX")   '释放文件
  Sleep 500
End If
Form1.Show   '加载并显示窗体
End Sub
将启动对像设为Sub main()
2.jpg
编译程序后就可以实现仅用一个exe文件了。
+738
科创币
chiataimakro
2009/02/16
极富意义
ldc作者
17年11个月前IP:未同步
76017
1楼
源文件

attachment icon 网络攻击器_KC.rar 1020.51KB RAR 116次下载
引用
评论
17年11个月前IP:未同步
76900
2楼
就是把引用的DLL放到资源里。。。

不过我觉得这样做更好。
把资源压缩一下,然后运行的时候解压出来。
引用
评论
17年11个月前IP:未同步
76903
3楼
RLPack=LS+LZ
引用
评论
17年6个月前IP:未同步
130111
4楼
引用第3楼fw。于2009-02-21 21:13发表的  :
RLPack=LS+LZ

好像真有RLPACK...
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的