当前位置:首页 >> 机械/仪表 >>

动态连接库与UG二次开发


动态连接库与 UG 二次开发 2009-06-03 02:16:29 来源: 作者: 【大 中 小】 浏览:10 次 评论:0 条 一开始,接课题啥都不懂,跑到这里问了一些问题,许多网友很热心,名字记不 住,但心里挺感激他们。现在混到这份上了,从一穷二白,到多少懂了些东西, 所以想搞一点东西出来回报社会。呵呵。。 UG 自身的功能,我不熟悉,但首 。。 先要肯定,它们不难。就是个

门槛的问题。UG 二次开发的门槛算是比较高的。 WIN32 API,MFC,DLL,C/C++,要想做高层次的开发,这些多少得懂一些。否则, 就老老实实的呆在 UG 的环境里做个良民。而第一道门槛,就是动态连接库的问 题。开发出来的东西,就是以 DLL 装到 UG 中的,理解 DLL,很有必要。如果觉 得没必要,看到这儿,兄弟您就可以打住了。 1。静态连接库

想先做个比喻来说这个事。 食堂里给 1000 个人做好了相同的午餐之后,是把它 们逐份送到这 1000 个人手中, 还是召集这些人到食堂里吃? 倘若采用第一种方 式,那么需要考虑的问题有两个: (1) 效率问题:送饭的人得够数,倘若派 俩小伙去送,送到黄昏也不见得就送完。 (2) 意外问题:假如饭都送出去了, 突然发现厨师误在饭菜中放了些亚硝酸盐。及时通知吃饭的兄弟也不是件易事, 总会有许多人死翘翘。 倘若采用第二种方式,那么上面这两个问题都可以很容 易的得到解决。只不过想吃午饭的个别懒人得动弹动弹走走路了。

言归正传: 一开始没有动态连接库,只有静态连接库(再往前了说,也没有静 态连接库) 。不知道各位有多少人在 DOS 系统上写过程序,我上学的时候用 TC 写过 hello world,但那时没有人跟俺讲静态连接库是啥,估计和我们老师有点 菜有关系,自己不努力看书更有关系。所以现在如果还有同志不懂,那么就往下 看看吧。讲的不对的地方,请发悄悄话给俺,偷偷指正。

静态连接库:程序员可以将公用模块的代码写成一个一个子程序(函数) ,编译 成 obj 文件,最后将多个 obj 文件连接成一个 lib 文件。当用户程序中需要使用 这些公用模块时,就包含它们的 lib 文件包进去,用户在自己的程序中只需要指 定所需要的函数名称, 编译器会在编译时, lib 中抽出对应的子程序代码----从 复制到用户程序中去。这样搞的最大的好处就是不必一遍遍重写相同功能的代 码 。 这 种 连 接 方 法 就 是 静 态 连 接 。 回 想 一 下 , 第 一 次 在 Turbo C 下 , ( printf(“Hello,World!!!”)时的情景,printf 从哪来?是从 lib 中来的) 。

Lib 应该是一群懒惰的程序员想出来的。说白了,就是让编译器替我们 copy 别 人写过的代码!正是因为这种 copy,暴露了 Lib 显而易见的缺点。

缺点 1:试想假如你的机器上有 1000 个程序需要用到同一个静态连接库中的某 个函数,由于静态连接库中的函数代码是复制到用户可执行文件中的,所以这 1000 个可执行文件中就会重复包含 1000 份相同的代码,硬盘空间就被浪费了。 由于 DOS 系统是单任务系统,静态连接库的使用只表现在硬盘空间的浪费上了。 而 Windows 系统是多任务的,假如把这 1000 个程序都装到内存中,那么就会装 入 1000 份相同的代码!要是有象硬盘那么大的内存就好了!

缺点 2:如果 1000 个程序需要用到同一个静态连接库中的某个函数。后来发现 这个函数有问题,需要修正。改就改吧,于是就把静态连接库文件改改,编译一 下。完事了么?没有!还得把这 1000 个程序全部重新编译一遍!

看到这儿,再回头看看前面的比喻,是不是有点贴切了。用食堂来比喻,还是不 太对,应该用看电影来比喻!! !

2。动态连接库: 动态连接库(DLL)应该是随着 windows95 的出现而出现的。它的出现,恰恰弥 补了静态连接库的缺点。 动态的连接库在程序设计过程中所起的作用与静态连接库的作用相同, 都是提供 一大堆函数供不爱写重复代码的程序员们使用, 另外操作系统也是以 DLL 的形式 提供接口函数的。 UG OPEN/API 是什么?就是一群 DLL 提供的一大堆函数。 动态连接库与静态连接库,是以不同的手段来达到相同的目的。 静态连接库是将库中的代码复制到它的可执行文件中, 首先它要占用多余的磁盘 空间。而动态连接库只是在可执行文件运行时,才将库的代码调入内存。如果许 多程序共用一个同一个动态连接库时,WINDOWS 操作系统会在内存中仅保留一份 库代码,通过分页机制,将这份代码映射到不同的进程空间中。这样,无论多少 程序使用这样的一个库,库代码实际占用的内存永远只有一份。

让那 1000 个人到食堂里去吃饭吧,安全,而且效率高,浪费的资源亦少。

内存分页机制: 大家应该明白, 程序运行时是需要操作系统的内存管理机制为其分配一段连续的 程序(进程)空间,这就象一个人如果要跑步,那么你得给他安排一个操场。但 是 DOS 操作系统对程序的空间分配是个很让当时的程序员头疼的问题。那时,他 们的全部程序活动空间最多拥有 600KB 左右的内存可以使用。 也许对 DOS 程序不 太熟悉的兄弟不知道 DOS 中还有一种叫做“内存驻留”程序的东西,这种程序只 要不释放,它就固定在内存中,倘若这种东西驻留在内存的中间位置,那么它就

会将内存一分为二,这样程序员所写的程序,其活动空间也就 300K 左右。如果 内存驻留程序再多一些,内存就被它们给搞的 7 零 8 乱,也许会导致程序员所写 的程序没有足够的运行空间了!把一个人囚禁在小于他躯体体积的空间,这个人 会怎样?

Windows 系统不害怕内存被切割的破碎,它在内存碎片的基础上创建一个逻辑结 构来管理。村民们可以居住在村子的任意角落,但是村长手里的名册上,他们是 挨个被列出来的。DOS 系统好象是直接到一个村子中去寻找某个村民,它在乱七 八糟的街巷中迷路之后,就放弃寻找了。而 windows 系统要聪明一些,它会首先 拜访这个村子的村长,村长去查他掌管的村民花名册,然后就能找到这个村民的 家庭住址,最后就可以揪出这家伙。

WINDOWS 系统中,所谓的内存分页,就是内存被分割成 4KB 大小(我记得是这个 数)的 N 个页面,每个页面都可以类比为一个村民的住址。村长和他手里的花名 册,就是内存分页机制。 总结一下,内存分页机制,就是在物理内存的基础上创建一个逻辑结构来管理它 们。无论内存有多碎,但是在这个逻辑结构上,它们是连续的。

动态连接库是被映射到其他应用程序空间中执行的, 它和连接它的应用程序可以 看成是一体的。 WINDOWS 系统中,每个程序都可以拥有自己的 4G 空间(实际上也就 2G) ,而动态 连接库没有自己的私有空间,它们扮演人民公仆的角色。

在 32 位的 windows 操作系统中,每个进程都可以有 4GB 的运行空间。该空间中 可以存放操作系统代码,系统 DLL,还有用户自己开发的 DLL 的代码,再除去其 他一些乱七八糟的空间,最后剩下的,就是程序自己的私有空间了。说它是私有 空间, 就是说只有这个运行中的程序 (进程) 自己可以访问, 其他的进程靠边站。 DLL 是没有私有空间的,它们是公仆啊,所有进程都可以访问它们。所以它们和 内存映射文件,全局共享变量等等东西一起呆在内存公共区域中。

另外应当注意,DLL 中的非共享变量不会被映射到各进程中去,而是被分配在各 进程的私有空间中!这是因为 DLL 只有自己的代码段,而没有数据段。这就是说 你在 DLL 中做了一个全局的数据对象,应用程序加载这个 DLL 时,会把 DLL 中的 全局对象 copy 到自己的数据段中(这里,应该深刻体会一下映射是个什么概念)

还有,系统 DLL 要被映射到所有进程中。而用户自己开发的 DLL,谁用它,就被 映射到相应的进程中。


相关文章:
动态连接库与UG二次开发
动态连接库与UG二次开发_机械/仪表_工程科技_专业资料。动态连接库与UG二次开发动态连接库与 UG 二次开发 2009-06-03 02:16:29 来源: 作者: 【大中小】 浏...
NX二次开发(非常有用)
环境的基本命令和功能键; 3、 掌握 UG 二次开发工程项目创建过程和方法; 4、...其中 ACTIONS 后 面跟的是需要调用的动态连接库或对话框文件(本例为 DianQuan....
图解VS2008进行UG二次开发向导建立过程
图解VS2008进行UG二次开发向导建立过程_机械/仪表_工程科技_专业资料。 最后在 VS2008 新建项目即有下图所示向导。 最后在 VS2008 新建项目即有下图所示向导。 ...
NX二次开发工具--日志
如果需要开发其他语言的应用程序,可以编译日志生成动态链接库,并与 创建的 NX 二次开发应用程序连接起来。 2. 一个日志中可能无法调用其他日志中的方法。如果一个...
第10章 UG二次开发入门
第10章 UG二次开发入门_计算机软件及应用_IT/计算机_专业资料。介绍UG二次开发入门的文档,内容还是很不错的。第10 章本章导读 UG 二次开发入门 二次开发,就一...
UG二次开发入门
UG二次开发入门_信息与通信_工程科技_专业资料。UG原来是由工作站上移植过来的...应用程序也可以分为内部应用程序和外部应用程序两种 下的动态连接库。 事实上是...
NX二次开发应用
NX 二次开发应用 一、NX API 简介 NX 是一款功能...、对话框、二次开发应用程序以及 UDO 用户自定义库...编写程序实现代码并编译生成动态链接库(DLL)文件。 ...
NX二次开发习题及源码
NX二次开发习题及源码_院校资料_高等教育_教育专区。为初学NX二次开发的朋友提供...数据库类对象Databse // SQL查询语句 // 设置连接的建立方式 // 数据库数据...
UG二次开发的环境设置
启动 VC6.0 New→project 新建一个动态链接库 输入 Project 名称 MyProject,...UG NX 二次开发程序中需要用到许多头文件和库文件,这些文件 的存放位置需要在...
手把手教你做ug二次开发
UG二次开发论文集 226页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出...改变输出文件名,加入连接库文件(ug17 之前的库名字不同) ///...
更多相关标签:
ug二次开发 | ug二次开发视频教程 | ug二次开发招聘 | ug二次开发技术基础 | ug二次开发用什么语言 | 基于c语言ug二次开发 | ug二次开发实例 | ug 二次开发 选择对象 |