OCX控件的注册

================================================

最简单的方法:
(1)先把"OCX文件名"拷贝到WINDOWS\system目录下;
(2)再点击"开始"的"运行"项,在"运行窗口"中键入:regsvr32 ocx_name.ocx;
(3)解除netshare.ocx控件的注册:regsvr32 /u ocx_name.ocx

如果ocx_name.ocx文件不在system目录时,还必须在文件名前加上完整的路径。

================================================

一篇巨详细的讲解OCX控件注册的文章
作者:黄昱
来源:http://tech.sina.com.cn/c/2001-12-26/8118.html

使用ActiveX控件可快速实现小型的组件重用、代码共享,从而提高编程效率,降低开发成本。但是ActiveX控件对于最终用户并不能直接使用,因为ActiveX控件必须先在Windows中注册。注册ActiveX控件一般来说有六种途径,它们有各自的优点,运用范围也不同。

Regsvr32.exe注册
Regsvr32.exe位于Windows目录的system子目录下。点击Windows的“开始→运行”菜单,在对话框中输入以下命令:

regsvr32 netshare.ocx &&注册netshare.ocx控件

regsvr32 /u netshare.ocx &&解除netshare.ocx控件的注册

如果netshare.ocx文件不在system目录时,还必须在文件名前加上完整的路径。除了regsvr32应用程序之外,Microsoft在它的Web站点上还提供了一个称为regclean.exe的程序,可以检查注册表并去掉丢失的组件在注册表中的条目。 regclean.exe除了可以删除“悬挂”的条目,它还提供一个“undo”文件帮助恢复错误的删除。

卧龙传说提醒:用regsvr32.exe注册ActiveX控件虽然简单,但需要用户手工进行注册,在不用时还需手工解除注册。

VFP环境注册
在我们进行程序设计时,VFP本身提供一个注册ActiveX控件的方法。

进入VFP环境,选择“工具→选项”菜单,点击“控件”页,选中“ActiveX控件”单选按钮,在列表框里显示所有已经注册的ActiveX 控件,这时,点击右边的“添加”按钮,选择需要注册的ActiveX控件文件,“确定”后完成注册。也可以在表单设计器的表单控件工具栏里拖动“OLE” 按钮到表单,在弹出的选择框里选中“插入控件”单选钮,同样点击右边的“添加控件”按钮,来完成新控件的注册。

卧龙传说提醒:本方法仅适合程序员在设计程序过程中手工进行,对用户而言,并没有实现在本地机上自动注册。

安装程序注册
大型应用软件一般都有一个安装程序,在安装程序中解决ActiveX控件的注册是较为理想的一种方案。

在用户执行安装程序时,这些ActiveX控件将自动在用户机器上安装并注册。

VFP7.0光盘所带的InstallShield是目前较为流行的制作安装程序的工具,使用它可以制作出专业级的Setup安装程序,还可以注册应用程序使用到的ActiveX控件。而且,在以后使用控制面板的“添加/删除程序”卸载该软件时,安装程序会自动注销掉以前注册的ActiveX控件。

加入代码注册
首先,定义一个注册控件的函数:

Function MyRegsvr ( lpcRegFilename, lplIsreg )

If File(lpcRegFilename)

lpcRegFilename = iif(llisreg, lpcRegFilename, [ /u ] + lpcRegFilename)

Run /n regsvr32 &&lpcRegFilename

Endif

Return

Endfunc

然后就可以通过以下语句来调用该函数,并完成ActiveX控件的注册了(卧龙传说提醒:一定要注意控件文件的路径哦)。

= MyRegsvr( "netshare.ocx", .T.) &&注册netshare.ocx控件

= MyRegsvr( "netshare.ocx", .F.) &&解除netshare.ocx控件的注册

注册函数注册
上面提到运行regsvr32.exe应用程序将弹出注册是否成功的对话框,注意看内容“DllRegisterServer in netshare.ocx succeeded”或“UnDllregisterServer...”,其实,通常每个可用的ActiveX控件都有 DllRegisterServer、UnDllregisterServer这两个自注册函数包含在其中,我们可以用定义API函数的方法 (Declare <函数名> in <文件名> ... )来定义它,然后直接使用该函数来进行注册和反注册。

同样,我们先自定义一个注册函数(卧龙传说提醒:请注意DllRegisterServer、UnDllregisterServer的大小写):

Function DllRegister (lpLibFileName,isReg)

isReg = iif(type("isReg")="U", .T., isReg)

lpProcName = iif(isReg, "DllRegisterServer", "DllUnregisterServer" )

Declare INTEGER (lpProcName) in (lpLibFileName)

return &&lpProcName.()

Endfunc

然后,就可以通过该函数来完成ActiveX控件的注册了。

= DllRegister( "netshare.ocx", .T.) &&注册,返回0表示成功

= DllRegister( "netshare.ocx", .F.) &&注销,返回0表示成功

Clear Dlls

试试,是不是没有了弹出框的烦恼!

卧龙传说提醒:该方法没有对ActiveX控件文件的验证,假如该控件没有有效的DllRegisterServer功能(即不具有自注册功能),也就找不到以上的两个API函数,照样会有错误信息弹出。

API函数注册
此方法的设计思路是:先将ActiveX控件载入内存,然后验证其有效性,最后直接在内存地址中执行其注册函数(DllRegisterServer、UnDllregisterServer)。其编程方法是:

1、使用Windows API函数LoadLibrary载入ActiveX控件;

2、使用GetProcAddress函数获取ActiveX控件中注册函数DllRegisterServer(注销函数为DllUnregisterserver)指针;

3、使用CallWindowProc函数执行已载入内存的ActiveX控件注册函数(DllRegisterServer、UnDllregisterServer)。

上面所述的ActiveX控件注册方法各有特点。经实际使用,效果良好。您可根据实际情况灵活选用。

================================================

OCX控件是什么东东

英文定义:
An OCX is an Object Linking and Embedding (OLE) custom control, a special-purpose program that can be created for use by applications running on Microsoft's Windows systems. OCXs provide such functions as handling scroll bar movement and window resizing. If you have a Windows system, you'll find a number of files in your Windows directory with the OCX file name suffix.
from:http://searchwinit.techtarget.com/sDefinition/0,,sid1_gci212689,00.html

如果你用过Visual Basic或者Delphi一类的可视化编程工具,那么对控件这个概念一定不会陌生,就是那些工具条上的小按钮,如EditBox,Grid,ImageBox,Timer等等。每个控件都有自己的事件(事件) 、方法(方法)和属性(属性)。使用了控件的编程非常容易。首先,在程序的设计阶段可以设置一些属性,如大小,位置,标题(caption)等等;在程序运行阶段,可以更改这些属性,还可以针对不同的事件,调用不同的方法来实现对该控件的控制。控件就好象一块块的积木,程序要做的事只是将这些积木搭起来。控件的最大好处是可以重复使用,甚至可以在不同的编程语言之间使用,例如你可以在VB中嵌入用VC开发的控件。

控件的本质是微软公司的对象链接和嵌入(OLE)标准。由于它充分利用了面向对象的优点,使得程序效率得到了很大的提高,从而得到了广泛的应用。国外有很多公司就是专门制作各种各样控件的。控件的最早形式是以.VBX的格式出现的,后来变成了.OCX。由于Internet的广泛流行,微软公司推出了ActiveX技术,就是从OLE发展起来的,加入了WWW上的功能。所以目前最流行的是ActiveX控件。

对象链接和嵌入用户控件(OCX)是一种可以由在微软的Windows系统中运行的应用软件创建使用的特殊用途的程序。OCX提供操作滚动条移动和视窗恢复尺寸的功能。如果你有Windows系统,你会发现在你的Windows地址录里有大量OCX文件名后缀的文件。 对象链接和嵌入(OLE)被设计来支持混合文档(包含多种资料类型,比如文本、绘画图像、声音、动画)。Windows桌面就是一个混合文档的范例,微软使用OLE来建立的。OLE和组件对象模型(COM继OLE后的更常用的概念)支持“即插即用”程序的发展,“即插即用”程序在系统中可以用任何语言写入并可以由任何应用程序动态地使用。这些程序被认为是他们在其上运行的container的组建和应用程序。这种基于组件的近似应用程序的发展缩减了程序调试时间并改善了程序的性能和品质。Windows应用发展程序(比如PowerBuilder和Microsoft
Access)具有OCX的优势。

OCX控件与DLL的关系是什么

An OCX or ActiveX control is actually implemented as a dynamic link library DLL module. (You can think of a DLL program as a "subprogram" that can be used by any number of application programs, each of which is a "container" for the DLL or OCX/ActiveX control "object.") Visual Basic and C++ are commonly used to write OCX or ActiveX controls.

DLL的定义:A dynamic link library (DLL) is a collection of small programs, any of which can be called when needed by a larger program that is running in the computer. The small program that lets the larger program communicate with a specific device such as a printer or scanner is often packaged as a DLL program (usually referred to as a DLL file). DLL files that support specific device operation are known as device drivers.
from:http://searchwinit.techtarget.com/sDefinition/0,,sid1_gci213902,00.html

================================================

什么是ActiveX插件(控件)?

根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中。

ActiveX(COM)技术是一种嵌入式程序技术,它其实就是OLE和 OCX的融合。 ActiveX是Microsoft提出的一组使用COM(Component Object Model,部件对象模型)使得软件部件在网络环境中进行交互的技术。 它与具体的编程语言无关。作为针对Internet应用开发的技术 ,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。同时,ActiveX技术也被用于方便地创建普通的桌面应用程序。在Applet中可以使用ActiveX技术 ,如直接嵌入 ActiveX控制,或者以ActiveX技术为桥梁,将其它开发商提供的多种语言的程 序对象集成到Java中。与Java的字节码技术相比,ActiveX提供了“代码签名 ”(Code Signing)技术保证其安全性。

ActiveX是Microsoft的元素软件标准。简单地说,ActiveX技术是一种共享程序数据和功能的技术。它由微软提出并大力推广,并已成为事实上的标准。

ActiveX技术是Microsoft对OLE技术的更新和发展,Microsoft公司为了适应网络的高速发展把它的OLE技术和OCX技术融为一体并加以改进形成联合标准,改进之后赋予新名字ActiveX。也就是说,ActiveX中涵盖了OLE的所有技术和功能,同时又具有许多新的特性,以适应网络发展的需要。

ActiveX指的是一组包括控件、DLL和ActiveX文档的组件,它通常以动态链接库的形式存在,其设计思想是将一个程序(比如Flash动画)嵌入到另一个程序中(这个程序通常被称做容器,比如Authorware、Delphi、VB、VC、Internet Explorer等)。借助这种技术使得用户在一个程序中所创建的信息可以被集成到其它程序所产生的文档中。.这样就可使它(如Flash动画)可以随意地应用到各种场合。

ActiveX控件的数据输入和函数功能执行都必须通过容器,因此ActiveX控件和容器之间必须有一些特定的接口协议。ActiveX控件必须具备如下的性能机制:

属性和方法:ActiveX控件必须提供属性的名称、方法的名称及参数,通过这项机制,容器可以存取和改变ActiveX控件的属性参数。

事件:ActiveX控件由这项机制通知容器在ActiveX控件中发生的事件,比如属性参数的改变,用户按下鼠标左键等。

虽然在本质上ActiveX和OLE是同一种技术(实现不同程序的数据和功能的共享),但其目的有所差别。ActiveX的目的主要是共享程序模块之间的计算功能,生成一些专门的可以嵌入其他程序中的“小程序”,例如Microsoft web浏览器控件可以使得别的应用程序能够浏览(仅仅是浏览而不是创建)Web网页。

ActiveX控件是一个模块化的灵活对象,如果某个应用程序或网页需要增加一项特殊的功能,则无须重写整个程序,只要灵活地插入一个具有此项功能的ActiveX控件即可实现,ActiveX的优势还在于它的动态可交互性,用户可以动态地在使用过程中,通过改变它的属性和参数,在应用程序中实现自己的特殊要求。

================================================
什么是COM?

为了提供使对象能够与主应用程序通信的一种标准,微软原来引入了对象链接和嵌入(OLE)。原来规范的目标是提供一种途径,使应用程序,如Excel能够将电子表格嵌入到其他支持OLE标准的应用程序中。那时,人们认识到,OLE支持一种技术的基础,这种技术使得能够共享类属的对象,即组件对象模型(COM)。这种概念用于为OCX组件创建一种组件规范。这将我们带到了当前的标准ActiveX和ActiveX控件,OLE和OCX的发展最终形成了COM的顶尖产物。

可以将COM看作是在两块代码之间共享组件的二进制标准。COM根据对象可以完成的功能使得对象实现抽象化。对象可以完成的功能在其接口部分描述。接口就是对象可以实现的一组在逻辑上相关功能的访问方法。每个对象都拥有一个唯一的类ID(CLSID),它使用任意的一组接口。所有类必须具有IUNKNOWN接口,这个接口又可以被用于访问这个类支持的任何接口。这是一种功能强大的对象模型,因为它使应用程序能够在运行过程中确定任意一个对象是否可以完成某一项任务。

COM对象是通过几个方法来实现的。可以将COM对象编译成DLL或OCX,它们可以与调用应用程序在相同的进程空间中运行。COM对象还可以象编译过的可执行文件一样在它自己的进程空间中运行。利用分布式COM(DCOM),对象可以运行在不同的机器上,即可以运行在世界的任何位置。尽管COM对象的实现代码可能处于不同的进程中或不同的机器上,但COM对象系统服务去除了调用COM对象的复杂性。ActiveX组件是COM对象,这些对象实现了一套基本的接口,使组件能够被嵌入到可以主控ActiveX组件的应用程序中去。

OLE与COM的关系是什么?

组件对象模型COM(Component Object Model)是OLE的心脏,它不但提供了一个实现OLE的框架,还为一整类新软件提出了一种全新的设计思想。它是一种面向对象的结构,定义了一套对象间相互通信的标准方式,规定了如何使一些小的、定义良好的软件模块在系统中共存并充分地相互作用。依照这种结构,可以将若干元件组合起来,以建立更大的和更复杂的系统。

================================================

此条目发表在os/software分类目录,贴了, , , 标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据