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