扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
1、主程序.EXE
用 VB6.0 编写的程序,调用了 Winsock 控件,如果在没有安装VB5.0、6.0 的机器上运行则会出现错误,导致程序运行失败,这时如果按一般的方法,只有把这个程序用VB5.0、6.0 的安装程序进行打包,不然只有用用2的方法来解决了。
2、注册程序.EXE
用 VB6.0 编写的程序,使用资源文件的方法,把 Winsock 控件封装到本程序中,在运行主程序.EXE之前,先运行本程序,通过API函数GetSystemDirectory取得系统的Winddows\System的目录,然后把Winsock控件复制到该目录下,并用Shell来完成控件的注册。
⑴启动 VB6.0,在“外接程序→外接程序管理器”中加载“Visual Basic 6 资源编辑器”
⑵在 VB 资源编辑器窗口中,点击“添加自定义资料”,增加 Winsock 控件(C:\Winddows\System\nsck.ocx),再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:
类型: “OCX”
标识号: 101
语言: 中文(中国)
⑶保存资源文件,写如下代码:
Option Explicit
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Const MAX_PATH = 260 注释:定义足够长的字符串
Private Sub Form_Load()
Dim TempFile() As Byte
Dim FileNum As Integer
Dim TempDir As String
TempDir = GetWinSysDir 注释:自定义函数取得系统的 Winddows\System 的目录
TempFile = LoadResData(101, "OCX") 注释:用以从资源 (.res) 文件装载若干可能类型的数据,并返回一个 Byte 数组
FileNum = FreeFile
Open TempDir & "\nsck.ocx" For Binary Access Write As #FileNum 注释:新建文件(把 Winsock 控件复制到指定目录下)
Put #FileNum, , TempFile
Close #FileNum
注释:Shell "regsvr32 " & TempDir & "\nsck.ocx ", vbNormalFocus 注释:注册控件,有弹出对话框
Shell "regsvr32 " & TempDir & "\nsck.ocx /s", vbNormalFocus 注释:注册控件,无弹出对话框
MsgBox "注册成功,现在本程序可正常运行了!!", vbOKOnly, "注册控件"
Unload Me
End Sub
Public Function GetWinSysDir() 注释:定义读取Winddows\System 的所在目录的函数
Dim S As String, Length As Long
S = String(MAX_PATH, 0) 注释:赋值
Length = GetSystemDirectory(S, MAX_PATH) 注释:S为取得目录,MAX_PATH 为长度
S = Left(S, InStr(S, Chr(0)) - 1) 注释:去掉多余的空格
GetWinSysDir = S
End Function
注释:补充:S 和 MAX_PATH 的值是可以随便赋的,
注释:如: Dim S As String * 20
注释: Length = GetSystemDirectory(S, 20)
3、补充说明
在用 VB6.0 保存上述两个程序后,请再使用 VB5.0 重新打开这两个程序,并编译为主程序.EXE、注册文件.EXE。(用 VB5.0 编译的程序,在 Win98、2000 下不需要任何 DLL 文件)
4、程序运行
将主程序.EXE、注册文件.EXE两个文件,复制到任意机器上,先运行注册文件.EXE注册第三方的控件,再运行主程序.EXE,就不会有任何的错误了,一个变通的“绿色”软件就完成了。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者