标题:请教 关于动态链接库的问题
只看楼主
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
回复 49楼 hellovfp
呵呵 谢谢先 大哥你做的例子都很棒啊

梅尚程荀
马谭杨奚







                                                       
2012-05-20 10:58
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
回复 50楼 hellovfp
也就是说一个20M的文件可以分成4分 在一个回复框里 传输?

以前我是一个回复框传一个5M文件

梅尚程荀
马谭杨奚







                                                       
2012-05-20 11:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
以下是引用有容就大在2012-5-20 10:39:43的发言:

书浏览过了 不过看完就感觉没有实实在在的体会 所以到处去找代码看 看他们是如何组织书上的东西的。
老大 头文件 我还是用过一些 不过要我说出他的本质 我现在还归纳不下来 大致的应该是做为一个与其他 模块的接口吧
.h里声明函数和变量 在.cpp里实现后 就完成了一个模块的创建 当另外一个模块需要调用这个模块里的函数功能就只要包含他的头文件即可 当然前提是这两个模块应该在一个工程里 如果像#include 就牵扯到库 现在就是想弄明白下库 和动态 静态 库的一些东西 。

不知我上面说的对不对 ?

你这个理解是有偏差的,正是我说你其实没有搞清楚的原因,从你一直以来所问问题的对答中就看得出来了。让hellovfp跟你解释吧,我这些天正忙,没空。

授人以渔,不授人以鱼。
2012-05-20 11:28
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
回复 53楼 TonyDeng
这可能要归结lib库文件 去看了下VC6下的LIB文件 想打开来阅读里面写了些什么  但是不行 是乱码。 网上说要用dumpbin.exe 解析Lib文件 去找了个C:\Program Files\Microsoft Visual Studio\VC98\Bin下的DUMPBIN.EXE 双击后无效

梅尚程荀
马谭杨奚







                                                       
2012-05-20 12:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
.lib是编译后的目标代码(即.obj集合),相当于你平时编译程序时每个.cpp对应的.obj文件,是人无法阅读的,编译为本机非托管.exe程序的时候,是链接器(link.exe)把程序用到(在make file中指定)的所有相关.obj和.lib组合成.exe文件,后者才是所谓的二进制可执行文件。你打开自己写的程序的.obj文件看看,你看得到什么?

老式的非托管程序.exe,和新式的.net平台托管.exe,是完全不同的两回事,后者是伪代码,操作系统启动对应的.dll执行这些编译后的代码,在有需要时再临时编译为二进制机器码再执行,故后者的.exe比前者的.exe尺寸小得多,但执行较慢,因为有时需要临时编译(此即JIT机制)以及间接执行(仿似以前的解释语言),但这也是Java平台所采取的策略,这样是跨系统的(.NET比Java优越之处是它不局限在Java框架之下而允许多语言、多程序集联合解决方案)。

这就是我常常说你们现在总学老式的那种内嵌式编译程序原理,在将来会妨碍使用新手段的原因。固化了这种思维,将来再转过来就很艰难了,等微软像淘汰Win95/98那样彻底淘汰XP的时候,你就知道现在所学的东西有多少是会被废弃的。

授人以渔,不授人以鱼。
2012-05-20 12:18
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
我为什么想去看LIB文件的内容呢 是因为我看的MFC的很多头文件没有相应的.CPP文件 而是#pragma comment(lib, "***")导入了好多库 所以我想可能头文件声明的那些东西都在库里实现了,那怎么实现的呢?想阅读VC6不让

梅尚程荀
马谭杨奚







                                                       
2012-05-20 12:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
以下是引用有容就大在2012-5-20 12:18:25的发言:

我为什么想去看LIB文件的内容呢 是因为我看的MFC的很多头文件没有相应的.CPP文件 而是#pragma comment(lib, "***")导入了好多库 所以我想可能头文件声明的那些东西都在库里实现了,那怎么实现的呢?想阅读VC6不让

你就是以前从没了解过什么叫编译型语言和解释型语言,补习一下吧。以前的C教材,一开始就介绍C是编译型语言,告诉读者C程序的编译和运行机制,现在全都没有了,所以论坛上很多所问的问题,都透露着根本没搞清楚C语言和C语言程序编译和执行的关系,什么“在C语言中执行如何如何”之类的外门话,所在多有。

授人以渔,不授人以鱼。
2012-05-20 12:23
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
回复 57楼 TonyDeng
去看了 下 我说下自己的理解你砍对不对

比如一个人说三句话  I love you  xiaoming!   I love you  xiaohuang!  I love you  xiaofang!
如果是编译型语言来写 就可以把I love you 封装起来 先编译 成某个东东 dd 然后程序员写程序时只要写

dd xiaoming! 程序编译运行后就会得到 I love you xiaoming!的这个结果 爱不同的人就 换名字就成了
但解释型语言就是每爱一个人就要说一句I love you 因为解释是即说即翻的 对吗?

梅尚程荀
马谭杨奚







                                                       
2012-05-20 12:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
回复 58楼 有容就大
错的

授人以渔,不授人以鱼。
2012-05-20 12:43
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:0 
都说过了vc6下面的只是导入库,导入库里没有源代码的,代码在dll里面。静态库lib里面是带代码,二进制的,同样不能看。
你可以去网上下个libView程序,也只能看有哪些函数,参数问题目前只能通过反汇编推导。
这里有一个偶写的静态库的示例,里面包含了MFC中消息传递机制的一个基本模型。使用了数据结构链表。
你能把这个示例分析清楚也可以学到很多的东西。
mylib.rar (12.43 KB)

我们都在路上。。。。。
2012-05-20 12:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-367685-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.476306 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved