VB6中自动引用某些库的问题的原因
作者:admin 日期:2007-12-20
其实这个真让我郁闷了一下子.
我给朋友写了一个报警软件,功能上非常简单,就是检测指定的进程是否存在,以及网络是否有连接.
如果有不符合的,就在托盘弹出提示,同时可以以系统的打开方式执行一个指定的文件.
程序分为主界面与一个设置界面.
可是,拿到朋友那里用时,只要一点击设置按钮,就会报"类未注册,需要在机器中安装下列文件:MSSTDFMT.DLL"
我就郁闷了.我根本没有引用过这个DLL啊.
我甚至连它有什么用我都不知道......真是怪事.
打开工程一看,哎,果然,引用里面是多了一个"Microsoft Data Formatting Object Library 6.0 (SP6)"
取消,保存,编译.
发给朋友,回曰"照旧"
火了.
再打开工程一看,嘿!!这个引用自己又回来了?!
再次取消,保存,然后再打开引用列表,确认没有再回来后,又一次编译发给朋友.
满以为这下OK了~~结果朋友还是说老样子.
我这下真大火了~~~~~还没遇到过这等事!!这不是有鬼嘛!!!
今天我就不信这个邪了!!!
然后再次地打开,看引用:咦,竟没有!!真是怪了!!
非常非常的莫名其妙!!
然后N次地打开,关闭,编译,保存...终于让我发现了一个规律:
只要对设置窗体内的代码有任何改动,那个引用就会自动加上.
真是怪了.难道代码里面使用了那个库里的某个类型?
那也不对啊,如果是那样,编译时肯定会报错的~~
现在编译又不报错!!而且一动代码,那引用还会自动被添加!!
一时没了主意.
将那个窗体从工程里移除,然后关闭工程,闭着眼想了一下:会不会是窗体里面有什么引用?
应该不可能呀,引用只会存在于VBP文件里面...管它,打开FRM文件看看先.
于是就用记事本打开设置窗体的FRM文件frmOption.frm,发现了一个古怪的地方,如下:
Begin VB.TextBox txtTestTime
Appearance = 0 'Flat
BeginProperty DataFormat
Type = 1
Format = "0"
HaveTrueFalseNull= 0
FirstDayOfWeek = 0
FirstWeekOfYear = 0
LCID = 2052
SubFormatType = 1
EndProperty
Height = 285
Left = 1935
TabIndex = 14
Top = 765
Width = 690
End
Begin VB.TextBox txtPop
Appearance = 0 'Flat
Height = 2265
Left = 135
MultiLine = -1 'True
TabIndex = 9
Top = 945
Width = 3255
End
这分别是两个文本框的描述代码,上面那个怎么就多了点什么....??
一想,才记起,我为了让那个文本框只能输入数字,就在DataFormat属性里设置了Number值.
难道是这个原因?
当下去除属性,还原为默认值,再改动代码,编译,哈哈,果然没有再回来了!!
原来是这样!!
VB6的工程里面一旦有控件使用了未引用的枚举类型,IDE就会自动尝试引用此类型所在的库....
看来,我对VB6的了解还不够,还得继续学习啊~~~~
这个事件算是搞定了!!
我给朋友写了一个报警软件,功能上非常简单,就是检测指定的进程是否存在,以及网络是否有连接.
如果有不符合的,就在托盘弹出提示,同时可以以系统的打开方式执行一个指定的文件.
程序分为主界面与一个设置界面.
可是,拿到朋友那里用时,只要一点击设置按钮,就会报"类未注册,需要在机器中安装下列文件:MSSTDFMT.DLL"
我就郁闷了.我根本没有引用过这个DLL啊.
我甚至连它有什么用我都不知道......真是怪事.
打开工程一看,哎,果然,引用里面是多了一个"Microsoft Data Formatting Object Library 6.0 (SP6)"
取消,保存,编译.
发给朋友,回曰"照旧"
火了.
再打开工程一看,嘿!!这个引用自己又回来了?!

再次取消,保存,然后再打开引用列表,确认没有再回来后,又一次编译发给朋友.
满以为这下OK了~~结果朋友还是说老样子.
我这下真大火了~~~~~还没遇到过这等事!!这不是有鬼嘛!!!

今天我就不信这个邪了!!!
然后再次地打开,看引用:咦,竟没有!!真是怪了!!
非常非常的莫名其妙!!
然后N次地打开,关闭,编译,保存...终于让我发现了一个规律:
只要对设置窗体内的代码有任何改动,那个引用就会自动加上.
真是怪了.难道代码里面使用了那个库里的某个类型?
那也不对啊,如果是那样,编译时肯定会报错的~~
现在编译又不报错!!而且一动代码,那引用还会自动被添加!!
一时没了主意.
将那个窗体从工程里移除,然后关闭工程,闭着眼想了一下:会不会是窗体里面有什么引用?
应该不可能呀,引用只会存在于VBP文件里面...管它,打开FRM文件看看先.
于是就用记事本打开设置窗体的FRM文件frmOption.frm,发现了一个古怪的地方,如下:
Begin VB.TextBox txtTestTime
Appearance = 0 'Flat
BeginProperty DataFormat
Type = 1
Format = "0"
HaveTrueFalseNull= 0
FirstDayOfWeek = 0
FirstWeekOfYear = 0
LCID = 2052
SubFormatType = 1
EndProperty
Height = 285
Left = 1935
TabIndex = 14
Top = 765
Width = 690
End
Begin VB.TextBox txtPop
Appearance = 0 'Flat
Height = 2265
Left = 135
MultiLine = -1 'True
TabIndex = 9
Top = 945
Width = 3255
End
这分别是两个文本框的描述代码,上面那个怎么就多了点什么....??
一想,才记起,我为了让那个文本框只能输入数字,就在DataFormat属性里设置了Number值.
难道是这个原因?
当下去除属性,还原为默认值,再改动代码,编译,哈哈,果然没有再回来了!!
原来是这样!!
VB6的工程里面一旦有控件使用了未引用的枚举类型,IDE就会自动尝试引用此类型所在的库....
看来,我对VB6的了解还不够,还得继续学习啊~~~~
这个事件算是搞定了!!

评论: 5 | 引用: 0 | 查看次数: 1683


老马,我是google搜索到你站点的,你VB程序写的这么好,怎么不从事软件业了呢?能不能把你写的报警软件代码发给我学习下。谢谢了,老马。



没有明白你是什么意思.


我的vb程序不响应ActiveX事件,您好象解决了,能帮帮我不,谢谢


还有这回事 学习了
这个代码很简单的,就是不断PING一些大型网站,比如YAHOO,GOOGLE,163等
如果所有网站都超时,就证明断网了.
进程方面,就是不断地枚举进程而已.
相关的代码都封闭成了函数调用,早发在论坛里面了.