首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

引来库LIB的原理 (求详解)

2013-08-09 
引入库LIB的原理 (求详解)求助学术型选手问题有些不太好描述引入库.LIB文件在编译连接的时候,是否是相当于

引入库LIB的原理 (求详解)
求助学术型选手
问题有些不太好描述

引入库.LIB文件在编译连接的时候,是否是相当于在程序刚启动时
增加了一段 LoadLibrary  其对应的.dll文件的代码?
同时在调用其包涵的函数时,CALL 此函数的地址?

问题来了,函数地址随着加载的时间不一样是会发生变化的,如何保证其准确性
不同版本的导入库,如:
V1.0中 有 fun1,fun2,
V2.0中 有 fun1, fun2,fun3
我程序使用的是V1.0的lib,用到了fun2函数
运行该程序的机器上只有V2.0的DLL,可以正常使用,这样使用是否正确,为什么?

[解决办法]
只要V1.0中的fun2与V2.0中fun2,函数名(C风格)相同并且参数列表完全一致,那就可以正常使用
[解决办法]
  你说的lib应该不是通常所说的静态链接库,而是动态链接库附带生成的导入库文件lib,使用dll的方式采用静态加载。
  原则上,只要到处函数(dll中)的签名没有更改,就不用重新编译调用程序,上例中如果v2版本的fun2签名没变,只是多了一个fun3,那么宿主调用程序可以正常使用v1版本的fun2,但是fun3报错
[解决办法]
关键看你的V1.0,和V2.0 有何不同,如果只是修改了Bug,逻辑不变,结果相同,那没有问题。
如果你的程序改变了逻辑,相应的exe 没有改变使用方式,那就是不兼容的代码。
如果你的不同版本的exe,都没有问题,而且符合要求,只要你的DLL和Windows版本不冲突;
和MFC,VC不冲突。
那么用哪个 lib都没有问题。

v1.0和v2.0的lib 的主要不同,是你的DLL可能会增加函数;
正常情况下,为了保持DLL的兼容性,你是不会删除导出函数的,也不会改变函数的导出位置的。
这样生成的v1.0和v2.0的lib也是兼容的。即相同函数的导入表也是相同的。 

所以使用v1.0 的lib编译的exe 是完全可以,直接调用V2.0的DLL的。

如果 .exe 处理界面 .dll 处理逻辑, 这就是模块化开发了。
那么 .exe 和  .dll 可以分别开发,互不影响。

旧版本的 exe 可以使用新版本的 dll
新版本  exe 也可以使用旧版本的 dll
条件是逻辑不能变,互相间是兼容的。

当然最新版本的 exe 当然还是要使用最新版的 dll的,导入库自然,也要用最新版的了。
这样才能够增加,软件的加新功能嘛。

热点排行
Bad Request.