程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> VC++動態鏈接庫(DLL)編程之靜態鏈接庫

VC++動態鏈接庫(DLL)編程之靜態鏈接庫

編輯:更多關於編程

       對靜態鏈接庫的講解不是本文的重點,但是在具體講解DLL之前,通過一個靜態鏈接庫的例子可以快速地幫助我們建立“庫”的概念。

    VC++動態鏈接庫(DLL)編程之靜態鏈接庫 三聯

      圖1 建立一個靜態鏈接庫

      如圖1,在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

      #include "..lib.h"

      #pragma comment( lib, "..debuglibTest.lib" )  //指定與靜態庫一起連接

      int main(int argc, char* argv[])

      {

      printf( "2 + 3 = %d", add( 2, 3 ) );

      }  靜態鏈接庫的調用就是這麼簡單,或許我們每天都在用,可是我們沒有明白這個概念。代碼中#pragma comment( lib , "..debuglibTest.lib" )的意思是指本文件生成的.obj文件應與libTest.lib一起連接。

      如果不用#pragma comment指定,則可以直接在VC++中設置,如圖2,依次選擇tools、options、directories、library files菜單或選項,填入庫文件路徑。圖2中加紅圈的部分為我們添加的libTest.lib文件的路徑。

    VC++動態鏈接庫(DLL)編程之靜態鏈接庫

      圖2 在VC中設置庫文件路徑

      這個靜態鏈接庫的例子至少讓我們明白了庫函數是怎麼回事,它們是哪來的。我們現在有下列模糊認識了:

      (1)庫不是個怪物,編寫庫的程序和編寫一般的程序區別不大,只是庫不能單獨執行;

      (2)庫提供一些可以給別的程序調用的東東,別的程序要調用它必須以某種方式指明它要調用之。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved