VB——对象库未注册

由于前两天在清理文件的时候,不小心把C盘系统文件删了,今天打开vb6遇到了一个很顽固的问题,如下:

解决方法1:

打开frmMain.log发现如下问题:

行 12: 控件 sbStatusBar 的类 MSComctlLib.StatusBar 不是一个已加载的控件类。
行 19: 属性名 _ExtentX 在 sbStatusBar 中是无效的。
行 20: 属性名 _ExtentY 在 sbStatusBar 中是无效的。
行 21: 属性名 _Version 在 sbStatusBar 中是无效的。
行 40: 属性名 Panels 在 sbStatusBar 中是无效的。
行 19: 属性名 _ExtentX 在 sbStatusBar 中是无效的。
行 20: 属性名 _ExtentY 在 sbStatusBar 中是无效的。
行 21: 属性名 _Version 在 sbStatusBar 中是无效的。
行 40: 属性名 Panels 在 sbStatusBar 中是无效的。

然后我打开部件,引用这个控件

于是确定了这个控件没有注册上,被我删了,注册:

出现下面问题,

出现这个问题是因为没有引用这个控件,通过工程,引用菜单,可加载DLL文件,然后就引用了一个ActiveX控件,然后再添加上部件microsoft windows common controls 6.0 的时候就可成功了,再打开vb的时候没有问题出现了。

解决方法2:

先关闭VB,再打开cmd,输入下面的语句:

regsvr32 /u %windir%\system32\mscomctl.ocx

regsvr32 %windir%\system32\mscomctl.ocx

输入第一句会成功,第二句就会出现一下错误:

运行的时候还是出现这个错误,是vb的一个公用控件库,去搜索一下vb6运行库,下载安装就可以了。

小知识补充:

一、关于DLL的介绍
 
DLL,动态链接库,Dynamic Link Library的缩写,是一个包含函数和数据的模块集合,可以被其它应用程序共享的程序模块。DLL作为共享函数库的可执行文件,封装了一个或多个已被编译、链接的函数。多个进程可以同时使用一个 DLL,在内存中共享该 DLL 的一个副本。DLL 还有助于共享数据和资源。 它和可执行文件(.EXE文件)非常类似,他们的区别在于 DLL 中虽然包含了可执行代码却不能单独执行,只能由需要使用它的应用程序来直接或间接调。

  DLL 有一个特殊的入口点(DllMain 函数),它在附加和分离进程和线程时运行。此行为允许根据需要创建和销毁数据结构。文件扩展名为 .ocx、.cpl 和 .drv 的文件类型也是 DLL,尽管文件扩展名已改变。

二、关于以.ocx为后缀名的ActiveX控件
刚才提到过,文件扩展名为 .ocx、.cpl 和 .drv 的文件类型也是 DLL。
现在的ActiveX 控件等价与以前的OLE控件或OCX,一个典型的控件包括设计时和运行时的用户界面,唯一的IDispatch接口定义了控件的属性和方法,唯一的 IConnectionPoint接口定义控件可引发的事件。一个控件可以在容器中运行,所以从运行的角度看它类似与一个DLL。

.ocx为后缀名的ActiveX控件的注册和卸载方法,在“开始”菜单的“运行”输入以下代码完成任务:
regsvr32 path & "\" '注册
regsvr32 /u path & "\" '卸载
其中path代表该所以在的目录的路径。

三、OCX和DLL的区别
  
以.ocx为后缀名的ActiveX控件是一种比较特殊的DLL,它的基础是OLE和COM,是有交互界面的可视化控件,定义了控件的属性和方法,定义控件可引发的事件的响应。我们通常说的.DLL为后缀名的文件是一个包含函数和数据的模块集合,可以被其它应用程序共享的程序模块。

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...