【VC++积累】之四、动态链接库
本文要说的是动态链接库 dll 和静态链接库 lib
动态链接库是一种资源的集合,包括函数,变量,类,资源等都可以从动态链接库中来导出!
静态链接库的代码就可以直接放到exe文件中,动态链接库是被exe文件动态的加载或者卸载。 静态链接库不能包含其他的动态链接库和静态链接库,而动态链接库是可以的。
在本文我们会用两种方式来写动态链接库文件,即:SDK API编写和 MFC 编写。
SDK中
1、静态链接库
这里看一下静态库的调用方式:
#include<iostream>#include"../lib/lib.h"#pragma comment(lib, "../debug/lib.lib")using namespace std;int main(void){int m = add(2, 3);cout << m << endl;system("pause");return 0;}2、动态链接库
动态链接库的入口点和其他的应用程序就不一样了,下面我们来比较看一下:
CUI控制台程序(不是DOS):main
GUI用户界面程序:WinMain
DLL程序入口点函数:DllMain 不过,当你的dll就是导出资源,那么可以没有DllMain
我们编写了dll文件,把函数导出了,但是我们导出的函数必须有人去调用, 现在我们来看一下 如何调用dll文件。
调用dll有两种方式: 隐式连接 显示连接
1、隐式链接
主要是由编译器对dll进行加载和卸载。如果程序结束时如果还有其他应用程序使用该DLL,那么系统会使DLL的使用计数减1,当DLL的使用计数降为0时,会将DLL从内存中删除。
使用方法:
#pragma comment(lib, "..//Debug/MFCDLL.lib")_declspec(dllimport) void showdlg();void CmfcceshiDlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码showdlg();}void CmfcceshiDlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码CAboutDlg dlg;dlg.DoModal();}
2012/10/4
jofranks于南昌