首页 > 代码库 > C++生成和使用dll和lib

C++生成和使用dll和lib

dll和lib:

动态链接库(dll)是一个可以被其他应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。和可执行文件(exe)非常类似,区别在于dll中虽然包含了可执行代码却不能单独执行,而应由Windows应用程序直接或间接调用。


静态链接库(lib)包含函数代码本身,在编译时直接将代码加入程序当中。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。


使用dll和lib:

使用lib所需文件

头文件:包含lib中说明输出的类或符号原型或数据结构。

lib文件:文件是静态编译出来的,索引和实现都在其中。

静态编译的lib文件有好处:给用户安装时不需要再挂动态库。缺点:导致应用程序比较大,失去动态库的灵活性,在版本升级时,同时要发布新的应用程序。


使用dll所需文件

头文件:包含lib中说明输出的类或符号原型或数据结构。

lib文件:包含被DLL导出的函数的名称和位置。

dll文件:包含实际的函数和数据。

应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数和内存地址,这样当一个或多个应用程序运行时再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。



实现方法:

1、在vs2012中创建一个win32控制台项目mylib。

2、新建libtest.h和libtest.cpp。代码如下:

// libtest.h
#ifndef _LIB_TEST_H
#define _LIB_TEST_H

#include <iostream>

class libtest
{
public:
	void display();
};

#endif // !_LIB_TEST_H

// libtest.cpp
#include "libtest.h"

void libtest::display()
{
	std::cout << "this is lib test" << std::endl;
}

3、选中工程->右键->属性->配置属性->常规,可以看到项目默认值的配置类型有好几种类型,选择静态库类型生成lib文件,选择动态库类型生成dll文件,选择应用程序生成exe文件,这里我们选择静态库。



4、生成解决方案(F7),这时候会生存mylib.lib文件。


5、新建一个你要使用mylib.lib的工程uselib。要使用mylib.lib文件,就得有libtest.h和mylib.lib。在uselib工程中新建两个文件夹headfile(存放头文件libtest,h)、libfile(存放lib文件mylib.lib)。



6、配置uselib工程,指向这两个文件夹。




7、使用

#include "stdafx.h"
#include <iostream>
#include "libtest.h"	//头文件
#pragma comment(lib, "mylib.lib")	//加入链接库


int _tmain(int argc, _TCHAR* argv[])
{
	libtest test;
	test.display();

	system("pause");
	return 0;
}

控制台输出结果:



如果想使用dll文件,那么就在第3步将类型改为动态库,这样会生成lib和dll文件,将这两个文件拷贝到libfile文件夹中即可。