dll文件和lib的区别,lib文件怎么编译成dll
一:隐式链接在加载时,有三种方式
1 LIB文件被直接添加到工程文件列表中。
在VC中打开文件查看页面,选择项目名称,单击鼠标右键,然后选择‘将文件添加到项目’菜单,在弹出的文件对话框中选择要添加到DLL的LIB文件。然后,在您希望首先使用该函数的地方添加LIB的头文件,例如#include .lib.h (没有头文件当然不需要)。
2设置项目的项目设置来加载DLL的LIB文件。
打开项目的项目设置菜单,选择Link,然后在对象/库模块下的文本框中输入DLL的lib文件,如you.lib(或LIB文件的路径,包括文件名)。然后,在您希望首先使用该函数的地方添加LIB的头文件,例如#include .lib.h (没有头文件当然不需要)。
3通过程序代码
添加预编译指令#pragma注释(LIB, *。lib’)。这种方法的优点是,您可以使用条件预编译指令来链接不同版本的lib文件。因为,在调试模式下,生成的LIB文件是调试版本,比如Regd.lib;在Release模式下,生成的lib文件是Release版本,比如Regr.lib,然后在你想首先使用函数的地方添加LIB的头文件,比如#include .lib.h (没有头文件当然不需要)。
当应用程序加载DLL的LIB文件时,它还需要包含头文件(*。h)对应于DLL。在这个头文件中,DLL中定义的函数原型被给出,然后被声明。
第二,显式运行时链接,(我使用这种方法)
尽管隐式链接的实现相对简单,但它需要*。h文件和*。除了必要的*。dll文件,所以它不能用于那些只有*。提供了dll文件,只能显式链接。这种方法可以通过调用API函数来加载和卸载DLL,可以更有效地利用内存。在编写大型应用程序时,经常使用这种方法。该方法编程的具体实施步骤如下:
使用MFC提供的Windows API函数Load Library或AfxLoadLibrary将DLL模块映射到进程的内存空间,动态加载DLL模块。
使用GetProcAddress函数获取要调用的DLL中函数的指针。
不使用DLL时,用Free库函数或AfxFreeLibrary函数从进程的地址空间显式卸载DLL。
示例:在应用程序中调用dll文件
3354在应用程序中,必须在调用导出表中的函数之前加载dll,例如,使用mfc。
基于对话框创建一个工程测试,并在对话框上放置“加载”按钮,首先添加加载代码。
1.首先,在testdlg.cpp的头中添加变量设置代码:
//设置全局变量glibsample来存储dll句柄。
HINSTANCE glibsample=null//如果定义为句柄类型,就会出错。
//第二个变量showme指向dll
指向库中showme()函数的指针
typedef int(* show me)(void);
Showme showme
2.使用classwizard为“load”按钮添加加载dll的代码。
void ctestdlg:onloadbutton()
{
//要添加的代码如下
if(glibsample!=空)
{
AfxMessageBox( sample.dll已经加载);
返回;
}
//挂载sample.dll,没有路径,在三个默认路径中查找(1)Windows的系统目录: windows system
//(2)DOS中path指示的任何目录;
//(3)程序所在的目录;
glibsample=Loadlibrary( sample . dll );
//返回dll中showme()函数的地址
Showme=(Showme)GetProcAddress(glibsample, Showme );
静态链接库lib和动态链接库DLL的区别
1.什么是静态链接库,什么是动态链接库?
静态链接库和动态链接库都是共享代码的方式。如果采用静态链接库,那么不管你喜不喜欢,lib中的所有指令都会直接包含在最终的EXE文件中。但是,如果使用DLL,它不需要包含在最终的EXE文件中。EXE文件执行时,可以“动态”引用并卸载这个独立于EXE的DLL文件。静态链接库和动态链接库的另一个区别是,静态链接库不能再包含其他动态链接库或静态库,而动态链接库还可以包含其他动态或静态链接库。静态链接库和静态链接库调用规则的一般比较如下。
对于静态链接库(相对简单):
首先,使用静态链接库需要库开发者提供。h头文件和。生成的库的lib文件。
生成的中的声明格式。h库的头文件如下:
extern C 函数返回类型函数名(参数表);
在。调用程序的cpp源代码文件,它如下:
#包含.lib.h
#pragma注释(lib,.debuglibTest.lib )
//指定与静态库链接
第二,因为静态链接库包含了调用程序生成的EXE文件中的所有指令。所以,如果你用的是静态链接库,就不存在“为用户导出一个函数”这种说法,想用就全要!或者根本就不想要!)
对于动态链接库:
动态链接库的使用需要库的开发者提供生成的。lib文件和。dll文件。或者只提供dll文件。
首先,我们首先要注意,DLL中有两种函数:
(1)DLL导出函数,应用程序可以调用;
(2)DLL内部函数只能在DLL程序中使用,应用程序无法调用。
因此,如果调用者想调用DLL中的一个函数,就必须以某种形式或方式指明要调用哪个函数。