动态链接和(静态)链接->LIB和DLL

关于lib和dll的区别如下

  1. lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll。
  2. 如果有dll文件,那么lib一般是一些索引信息,记录了dll中函数的入口和位置,dll中是函数的具体内容;如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。使用静态编译的lib文件,在运行程序时不需要再挂动态库,缺点是导致应用程序比较大,而且失去了动态库的灵活性,发布新版本时要发布新的应用程序才行。
  3. 动态链接的情况下,有两个文件:一个是LIB文件,一个是DLL文件。LIB包含被DLL导出的函数名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到DLL文件。在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中相应函数代码的地址,从而节省了内存资源。DLL和LIB文件必须随应用程序一起发行,否则应用程序会产生错误。如果不想用lib文件或者没有lib文件,可以用WIN32
    API函数LoadLibrary、GetProcAddress装载。

编写一个DLL文件

要选择正确的工程,类似DLL工程。

环境:Visual Studio 2012

且最好是这样:


DLL.h
//#define DLL_EXPORTS   
//DLL_EXPORTS为DLL文件特有宏,以便调用。
//如果有IDE的话可以在工程设置里添加

//DLL_API是自取名称
#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif

extern int DLL_API num;

int DLL_API func_add(int,int);

class DLL_API MyClass
{
//TO DO
private:
public:
};

//TO DO
DLL.cpp
#include "DLL.h"		//DLL.h Path

int DLL_API num = 100;	//Init num

int DLL_API func_add(int a, int b)
{
	return a + b;
}
main.cpp
#include "DLL.h"
//添加依赖文件在IDE里
//#include ...

int main()
{
	std::cout << func_add(num,num) << std::endl;
	return 0;
}


本文为在宇宙第一 IDE Visual Studio下写成。至于无IDE情况请另寻他门。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T h a t

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值