1. LIB里定义的是DLL里的接口。
2. LIB的东西将会放到EXE文件中,DLL则不会。
3. lib只是一种二进制文件,记录的是dll中所导出的函数的信息,用于当你在应用中使用静态加载dll库时(即不通过LoadLibrary和
GetProcAddress来加载并使用函数),连接器能够定位使用了该lib库所对应的dll中的相应函数,如果连接器无法定位,则连接器就会报错。
4. 动态链接库(DLL)由可执行模块组成,为进程提供数据、代码和资源。编译时使用的静态链接库不同的是,动态链接库独立于激活它们的可执行文件,调用的地址转换是在加载 时解决的。这使DLL的故障查找和小的修改比较简单,不必重新编译调用它们的可执行模块。
5. lib在静态连接时使用,形象一点,可以看成一种"头文件".相应的dll可以看成"实现文件(二进制级别)".如果动态连接时不需要lib.
6. 显式调用与隐式调用:在进行隐式调用的时候需要在客户端引入头文件,并在链接时指明dll对应的lib文件(dll只要有函数输出,则链接的时候会产生一个与dll同名的
lib文件)位置和名称。然后如同调用api函数库中的函数一样调用dll中的函数,不需要显式的LoadLibrary和
GetProcAddress。使用最为方便。
7. VC开发的dll,已有.h .dll .lib文件。dll里面有很多类。如何在Qt中导出dll中的类,然后使用dll中类提供的方法?网上很多资料都是用QLibrary 去load dll, 然后去解析具体函数,但这些例子的dll里没有封装类。
只要是标准DLL,用隐式链接不就行了么,dll文件有没有提供入口的lib(一个很小的静态库),如果没有就只能显示连接了
一、开发和使用DLL需注意三种文件
1、 DLL头文件(.H)
它是指DLL中说明输出的类或符号(Symbols)原型或数据结构的.H文件。当其它应用程序调用DLL时,需要将该文件包含入应用程序的源文件中。
2、 DLL的引入库文件(.LIB)
它是DLL在编译、链接成功后生成的文件。主要作用是当其它应用程序调用DLL时,需要将该文件引入应用程序。否则,DLL无法引入。
3、 DLL文件(.DLL)
它是应用程序调用DLL运行时,真正的可执行文件。DLL应用在编译、链接成功后,.DLL文件即存在。开发成功后的应用程序在发布时,只需要有.EXE文件和.DLL文件,不必有.LIB文件和DLL头文件。