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为后缀名的文件是一个包含函数和数据的模块集合,可以被其它应用程序共享的程序模块。      

 

你可能感兴趣的:(VB)