Visual C++支持三種DLL,它們分別是Non-MFC DLL(非MFC動(dòng)態(tài)庫)、MFC Regular DLL(MFC規(guī)則DLL)、MFC Extension DLL(MFC擴(kuò)展DLL)。
非MFC動(dòng)態(tài)庫不采用MFC類庫結(jié)構(gòu),其導(dǎo)出函數(shù)為標(biāo)準(zhǔn)的C接口,能被非MFC或MFC編寫的應(yīng)用程序所調(diào)用;
MFC規(guī)則DLL 包含一個(gè)繼承自CWinApp的類,但其無消息循環(huán);
MFC擴(kuò)展DLL采用MFC的動(dòng)態(tài)鏈接版本創(chuàng)建,它只能被用MFC類庫所編寫的應(yīng)用程序所調(diào)用。
靜態(tài)鏈接庫
在VC++6.0中new一個(gè)名稱為libTest的static library工程,并新建lib.h和lib.cpp兩個(gè)文件,lib.h和lib.cpp的源代碼如下:
//文件:lib.h
#ifndef LIB_H
#define LIB_H
extern "C" int add(int x,int y); //聲明為C編譯、連接方式的外部函數(shù)
#endif
//文件:lib.cpp
#include "lib.h"
int add(int x,int y)
{
return x + y;
}
編譯這個(gè)工程就得到了一個(gè).lib文件,這個(gè)文件就是一個(gè)函數(shù)庫,它提供了add的功能。將頭文件和.lib文件提交給用戶后,用戶就可以直接使用其中的add函數(shù)了。
標(biāo)準(zhǔn)Turbo C2.0中的C庫函數(shù)(我們用來的scanf、printf、memcpy、strcpy等)就來自這種靜態(tài)庫。
下面來看看怎么使用這個(gè)庫,在libTest工程所在的工作區(qū)內(nèi)new一個(gè)libCall工程。libCall工程僅包含一個(gè)main.cpp文件,它演示了靜態(tài)鏈接庫的調(diào)用方法,其源代碼如下:
#include <stdio.h>
#include "..\lib.h"
#pragma comment( lib, "..\\debug\\libTest.lib" ) //指定與靜態(tài)庫一起連接
int main(int argc, char* argv[])
{
printf( "2 + 3 = %d", add( 2, 3 ) );
}
靜態(tài)鏈接庫的調(diào)用就是這么簡單,或許我們每天都在用,可是我們沒有明白這個(gè)概念。代碼中#pragma comment( lib , "..\\debug\\libTest.lib" )的意思是指本文件生成的.obj文件應(yīng)與libTest.lib一起連接。