社区
ATL
帖子详情
请教tlb文件和lib文件的区别
gooore
2010-01-25 08:27:20
在下手抄了一个COM,不是用ATL做的,也没有写idl
编译之后不能注册,加载library失败。但是工程生成了lib文件,没有生成tlb文件。我一直理解的是这两个文件一样。
请教这两个文件有什么区别?
如果不用idl,怎样去给dll加library信息?
谢
...全文
838
8
打赏
收藏
请教tlb文件和lib文件的区别
在下手抄了一个COM,不是用ATL做的,也没有写idl 编译之后不能注册,加载library失败。但是工程生成了lib文件,没有生成tlb文件。我一直理解的是这两个文件一样。 请教这两个文件有什么区别? 如果不用idl,怎样去给dll加library信息? 谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
StrokeAce
2012-04-27
打赏
举报
回复
正解
[Quote=引用 5 楼 的回复:]
lib文件得看你是静态库还是动态库了,
如果是静态库,编译后所有的二进制文件都在LIB文件里
动态库的话,编译后的代码放在DLL中,LIB只是起个索引
TLB是组件服务的接口
而DLL包含了接口和实现
有些情况下,比如客户方需要远程调用,那么在客户机上部署dll是没有意义的,因为dll所需的环境在服务器上,而客户只需要dll里的接口定义部分,这个时候tlb就派上用场了……
[/Quote]
gooore
2010-01-26
打赏
举报
回复
是不是不导出自注册的两个函数,编译出来就是静态库?文件编译总会有lib和dll吧?
[Quote=引用 5 楼 zoulie 的回复:]
lib文件得看你是静态库还是动态库了,
如果是静态库,编译后所有的二进制文件都在LIB文件里
动态库的话,编译后的代码放在DLL中,LIB只是起个索引
TLB是组件服务的接口
而DLL包含了接口和实现
有些情况下,比如客户方需要远程调用,那么在客户机上部署dll是没有意义的,因为dll所需的环境在服务器上,而客户只需要dll里的接口定义部分,这个时候tlb就派上用场了
[/Quote]
gooore
2010-01-25
打赏
举报
回复
如果直接import tlb,是不是和vb里面的添加引用一个意思?程序运行的时候会调用相关的dll?
import tlb和import dll是一回事吧?
zoulie
2010-01-25
打赏
举报
回复
lib文件得看你是静态库还是动态库了,
如果是静态库,编译后所有的二进制文件都在LIB文件里
动态库的话,编译后的代码放在DLL中,LIB只是起个索引
TLB是组件服务的接口
而DLL包含了接口和实现
有些情况下,比如客户方需要远程调用,那么在客户机上部署dll是没有意义的,因为dll所需的环境在服务器上,而客户只需要dll里的接口定义部分,这个时候tlb就派上用场了
gooore
2010-01-25
打赏
举报
回复
拜托啊,这些网上考下来的话我也查到啦。
请问下是不是这样的,
lib实际上就是组件的二进制代码,在编译的时候如果有需要用到就会被编译器调用。
tlb只包含了接口信息,编译后的 dll也会包含的一些接口信息,所以tlb不是必须的。
如果直接import tlb,是不是和vb里面的添加引用一个意思?程序运行的时候会调用相关的dll?
xwsn007
2010-01-25
打赏
举报
回复
再介绍一下DLL的概念:
动态链接库(Dynamic Link Library,缩写为DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。动态链接库文件的扩展名一般是dll,也有可能是drv、sys和fon,它和可执行文件(exe)非常类似,区别在于DLL中虽然包含了可执行代码却不能单独执行,而应由Windows应用程序直接或间接调用。
动态链接是相对于静态链接而言的。所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。而动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息(往往是一些重定位信息)。仅当应用程序被装入内存开始运行时,在Windows的管理下,才在应用程序与相应的DLL之间建立链接关系。当要执行所调用DLL中的函数时,根据链接产生的重定位信息,Windows才转去执行DLL中相应的函数代码。
一般情况下,如果一个应用程序使用了动态链接库,Win32系统保证内存中只有DLL的一份复制品,这是通过内存映射文件实现的。DLL首先被调入Win32系统的全局堆栈,然后映射到调用这个DLL的进程地址空间。在Win32系统中,每个进程拥有自己的32位线性地址空间,如果一个DLL被多个进程调用,每个进程都会收到该DLL的一份映像。与16位Windows不同,在Win32中DLL可以看作是每个进程自己的代码。
xwsn007
2010-01-25
打赏
举报
回复
.lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib文件,就必须:
1 包含一个对应的头文件告知编译器lib文件里面的具体内容
2 设置lib文件允许编译器去查找已经编译好的二进制代码
如果你想从你的代码分离一个dll文件出来代替静态连接库,仍然需要一个lib文件。这个lib文件将被连接到程序告诉操作系统在运行的时候你想用到什么dll文件,一般情况下,lib文件里有相应的dll文件的名字和一个指明dll输出函数入口的顺序表。如果不想用lib文件或者是没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress。
附注:
TLB是COM/ActiveX/Ole的类型信息,DLL中也可以包含,包含的就叫Active Library,只要支持MS的COM的东东都有TLB,ActiveX可以用工具import activeX library导出。
TLB是开发期的东东,可以作early binding前期bind,里面一般有IXXXX: COM interface这个只能用作early binding,说白了就是在程序编译时就知道接口函数在dll中的相对位置,调用起来当然快啦,但, 组件更新后,调用的程序就不一定能用的啦。IxxxDisp: COM dispatch interface这个是IDispatch 的子类,注意下函数有个disp id(声明的最后),这个是相对的id,使用接口时用这个相对id查一个dispatch table找到函数入口地址,
注: IxxxDisp调用是一次进程间交换数据就可以得到入口地址,进程间交换数据是很慢的一种操作IDispatch中有三个方法Invoke,GetDSOfNames.(忘了), 更过分,可以在之后用函数名查所有的id,invoke则是用id得到相对地址...这种应用很广的啦,比方VB,Delphi的Variant,ASP/IIS,
注:IDispatch要二次进程间交换
总结一下IDispatch,用IDispatch的叫late binding,用IxxxDisp的叫smart binding(不知是不是,中文智能调用,真不知哪智能了),用法不同,同时有上面两个接的dual interface。
xwsn007
2010-01-25
打赏
举报
回复
lib: dll导入库文件
tlb: com组件的类型库文件
【Armv8/Armv9架构】-MMU专题
stage1和stage2的
区别
和使用?Descriptor:啥是Descriptor、页表项、entry、条目、页表条目? Descriptor的格式是怎样的?每一个属性位是怎样的?MMU除了完成地址转换,属性权限的控制/cache的缓存策略是怎样配置的...
Visual C++ 使用的
文件
(转)
问:我们的项目采用VSS管理,在项目结束时发现工程
文件
大多没有更新,比如.ncb, .aps等
文件
在提交时我们删除了.ncb
文件
,保留了旧版本的.aps
文件
,在目标机上重新编译时发现Dialog资源是旧的,如果编译前删除了.aps
文件
,那么编译出来的Dialog资源就是新的。
请教
发生这个的原因是什么?是否有保留.aps
文件
的必要,如果可以删除,还有哪些工程
文件
可以删除? 答:.C
使用 /sys
文件
系统访问 Linux 内核
AlanTu 随笔 - 953, 文章 - 0, 评论 - 16, 引用 - 0 使用 /sys
文件
系统访问 Linux 内核 使用 /sys
文件
系统访问 Linux 内核 sysfs 虚拟
文件
系统提供了一种比 proc 更为理想的访问内核数据的途径 sysfs 与 /sys sysfs
文件
系统总是被挂载在 /sys 挂载点上。虽然在较早期的2.6内核系统上并没有规定 ...
proc
内容摘要:Linux系统上的/proc目录是一种
文件
系统,即proc
文件
系统。 Linux系统上的/proc目录是一种
文件
系统,即proc
文件
系统。与其它常见的
文件
系统 不同的是,/proc是一种伪
文件
系统(也即虚拟
文件
系统),存储的是当前内核运行状态的一系列特殊
文件
,用户可以通过这些
文件
查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些
文件
来改变内核的运行状态。 ...
哈工大计算机系统大作业——程序人生-Hello’s P2P
哈工大计算机系统大作业,本文通过分析hello程序在Linux系统中的一生,进一步认识hello程序从hello.c经过预处理、编译、汇编、链接生成可执行
文件
,并由操作系统OS进行进程管理、存储管理和I/O管理的全过程。以此全面复习、总结和梳理课程内容,加深对计算机系统的理解与体会。
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章