当前位置: 代码网 > 科技>电脑基础>电脑常识 > 电脑中扩展名dll和ocx文件的区别

电脑中扩展名dll和ocx文件的区别

2023年02月25日 电脑常识 我要评论
电脑中扩展名dll和ocx文件的区别ActiveX,OLE是基于COM的一种应用,其文件后缀一般以dll和ocx结尾;ocx作为一种特殊的dll文件,具有一定的用户界面和事件响应,而dll文件只是方法和属性的集合... 23-02-25

ctivex,ole是基于com的一种应用,其文件后缀一般以dll和ocx结尾;ocx作为一种特殊的dll文件,具有一定的用户界面和事件响应,而dll文件只是方法和属性的集合。

一、关于dll的介绍

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

通俗的说,在windows操作系统中,许多应用程序并不是一个完整的可执行文件,它们的正确执行需要调用一些相对独立的动态链接库,即dll文件。一个应用程序可以调用多个dll文件,一个dll文件也可能被几个应用程序所共用,这样的dll文件被称为共享 dll 文件。[2]dll 文件一般被存在c:\windows\system 目录下,也可能放在应用程序所在的目录或是子目录中。

提到动态链接,先说明一下静态连接。什么是静态连接呢?在程序链接的过程中,需要将编译后的二进制代码链接成目标代码,链接器从静态链接库中获得所有被引用的函数,并将这些被引用的函数同代码一起放到可执行文件中。那么关于 dll 的静态连接则是指链接器将被引用的库函数的代码复制到调用 dll 的可执行模块(.dll 文件或 .exe 文件)中。

什么是动态链接呢?动态链接是系统允许可执行模块(.dll 文件或 .exe 文件)在运行程中,只需要包含在定位 dll 函数的可执行代码所需的信息。换句话说,可执行模块(.dll 文件或 .exe 文件)在运行时加载这些模块(亦即所需的模块映射到调用进程的地址空间)。[3]

那么动态链接和静态连接 相比,优点有哪些呢?

(1)节省内存,减少交换操作。使用动态链接,多个进程可以同时使用一个 dll,在内存中共享该 dll 的一个副本。使用静态链接,每个应用程序都包含被引用的库函数的代码,那么windows 必须在内存中为每个应用程序加载引用的库函数的代码的一个副本。
(2)节省磁盘空间。使用动态链接,在磁盘上仅需要 dll 的一个副本。使用静态链接,每个应用程序都包含被引用的库函数的代码。
(3)更易于升级。使用动态链接,dll 中的函数发生变化时,只要函数的参数和返回值没有更改,就不需重新编译或重新链接使用它们的应用程序。使用静态链接,在函数发生变化时,需要重新链接来生成应用程序。
(4)支持多语言程序,只要程序遵循函数的调用约定,用不同编程语言编写的程序就可以调用相同的dll 函数。
(5)提供扩展 mfc 库类的机制。可以从现有 mfc 类派生类,并将它们放到 mfc 扩展 dll 中供 mfc应用程序使用。
(6)支持多语言程序,并使国际版本的创建轻松完成。通过将资源放到 dll 中,创建应用程序的国际版本变得容易得多。可将用于应用程序的每个语言版本的字符串放到单独的 dll 资源文件中,并使不同的语言版本加载合适的资源。[4]

dll 中包含下面两类函数的定义:
导出函数:这些函数由可执行模块(.dll 文件或 .exe 文件)调用。
内部函数:这些函数仅从定义它们的 dll 中调用。dll 还导出数据。不过,这些数据由相应的函数使用。

可以通过下列方式调用 dll 中的函数:
加载时动态链接:可执行模块执行显式调用以导出 dll 函数。为 dll 创建导入库,然后将 dll 链接到应用程序。在加载应用程序时,导入库提供加载 dll 和查找导出的 dll 函数所需的信息。
运行时动态链接:在运行时加载 dll 时,可执行模块使用 loadlibrary 函数或 loadlibraryex 函数。可执行模块调用 getprocaddress 函数以获取导出的 dll 函数的地址。在链接时,windows 搜索预安装的一组 dll,例如性能库 (kernel32.dll) 和安全库 (user32.dll)。然后,windows 按以下顺序搜索dll:

1.当前进程的可执行程序所在的目录。
2.当前目录。
3.windows 系统目录。(getsystemdirectory 函数获取 windows 系统目录的路径。)
4.windows 目录。(getwindowsdirectory 函数获取 windows 目录的路径。)
5.path 环境变量中列出的目录。注意:libpath 环境变量不用于搜索。[3]

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

(1)将程序划分为可按需加载的单独模块。
(2)存储特定于语言或特定于区域的资源。
(3)使您自己的应用程序能够使用核心代码库。
(4)生成进程内 com 对象或 activex 控件 (ocx)。
(5)将 ole 对象用作进程内 dll。这一用法可改进 ole 链接的性能。
(6)使用控制面板扩展或使用某些类型的驱动程序。 [3]

二、关于以.ocx为后缀名的activex控件

刚才提到过,文件扩展名为 .ocx、.cpl 和 .drv 的文件类型也是 dll。

现在的activex 控件等价与以前的ole控件或ocx,一个典型的控件包括设计时和运行时的用户界面,唯一的idispatch接口定义了控件的属性和方法,唯一的 iconnectionpoint接口定义控件可引发的事件。一个控件可以在容器中运行,所以从运行的角度看它类似与一个dll。[5]

尽管 activex 和 ole 都基于组建对象模型(component object model,com),它们为程序员提供的却是截然不同的服务。com提供的是低级的对象捆绑机制,该机制支持对象之间的交互通讯。ole使用com来提供低级的应用服务,例如采用连接和嵌入机制,支持用户创建复合文档。与之不同,activex提供更精细的结构,用以支持在网络站点上嵌入控件,以及对事件的交互反应。优化activex,目的是为了提高时间和空间效率,而优化ole,是为了便于终端用户的使用和集成台式系统的应用程序。activex还为internet技术带来了一些技术上的变革,例如,activex大大减小了代码量(代码量减少了百分之五十到七十),支持更多的提交和异步连接。 [6]

activex的基础是ole和com,但是通过ms的各种开发工具可以屏蔽掉com模型中许多另人费解的技术细节。activex组件技术包括以下一些方面:(1)自动化服务器 (2)自动化控制器 (3)控件 (4)com对象 (5)文档 (6)容器 。

以.ocx为后缀名的activex控件主要应用在web上和window forms程序开发上。应用程序使用activex/com组件来扩展自身的业务逻辑、事务处理和应用服务的范围。

顺便提一下以.ocx为后缀名的activex控件的注册和卸载方法,在“开始”菜单的“运行”输入以下代码完成任务:
regsvr32 path & "\xxx.ocx" '注册
regsvr32 /u path & "\xxx.ocx" '卸载

其中path代表该xxx.ocx所以在的目录的路径。

三、ocx和dll的区别

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

ocx需要一个载体,但dll不需要。

ocx是一个对象类扩展;它是一种可执行文件,但不能直接执行;;是ocx控件的扩展。

dll是动态链接库的缩写,意思是动态链接库。在windows中,很多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,也就是dll文件,并放置在系统中。

ocx

对象类别扩充组件
ocx 是对象类别扩充组件(object linking and embedding (ole) control extension);是可执行的文件的一种,但不可直接被执行; 是 ocx 控件的扩展名,与 .exe、.dll 同属于pe文件。
如果你用过 visual basic 或者 delphi 一类的可视化编程工具,那么对控件这个概念一定不会陌生,就是那些工具条上的小按钮,如 editbox,grid,imagebox,timer 等等。每个控件都有自己的事件、方法和属性。
使用了控件的编程非常容易。在程序的设计阶段可以设置一些属性,如大小,位置,标题(caption)等等,在程序运行阶段,可以更改这些属性,还可以针对不同的事件,调用不同的方法来实现对该控件的控制。控件就好像一块块的积木,程序要做的事只是将这些积木搭起来。控件的最大好处是可以重复使用,甚至可以在不同的编程语言之间使用,例如,你可以在 vb 中嵌入用 vc 开发的控件。

注册方式

ocx控件的安装方式有很多种,这里介绍最简单的一种。
步骤:
1.进入开始,点击运行。
2.在出现的框中键入regsvr32 c:\xxxx.ocx 。(xxxx为控件名, c:\为目录))(regsvr32e:\控件的制作\myocxtest\debug\myocxtest.ocx)
3.点击确认后等待出现提醒注册成功即可。
oca 文件
oca文件不是控件,其中保存ocx控件的属性
ocx的注销
1.进入开始,点击运行。
2.在出现的框中键入regsvr32 /u c:\xxxx.ocx 。(xxxx为控件名, c:\为目录)(regsvr32 /u e:\控件的制作\myocxtest\debug\myocxtest.ocx)
3.点击确认后等待出现提醒注销成功即可。

到此这篇关于电脑中扩展名dll和ocx文件的区别的文章就介绍到这了,更多相关ocx控件与dll区别内容请搜索代码网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com