微軟有許多標頭檔,這些標頭檔裡面定義了許多函數,但是在標頭檔中你卻找不到函數內容的身影,因為函數主體被儲存在了lib庫中。儲存在庫中有一個好處,那就是原始碼不容易被發現,也就是說其中的一些技術別人不容易學到。廢話少說,我們現在就開始製作lib庫。
首先,第一步,開啟VC++6.0,按Ctrl+N,選擇工程選項卡,選中“Win32 Static Library”選項,輸入工程名稱,我們這裡用“Lib庫”,大家可以自己選擇,至於路徑,隨便選一個吧,反正這次只是lib的實驗。 然後點擊“確定”,我們兩個都不選,如果選擇“先行編譯的標頭檔”的話系統會自動幫你建好stdafx.h和stdafx.cpp。但另外一個“MFC支援”我沒試過。 點擊完成後建立了一個空的工程,我們建立一個CPP檔案(注意選上“添加到工程“Lib庫”“這個選項,輸入檔案名稱main.cpp,隨後,在main.cpp中間輸入函數代碼和標頭檔,注意這裡不需要添加main函數也不需要類似的包括dllmain函數在內的函數。 編譯,有錯的改錯,沒錯的運行。VC6會提示要求輸入可執行檔名,我們點擊取消,隨後產生Lib庫.lib完成。 現在請把Debug下的Lib庫.lib複製到系統目錄或D盤中(我是複製到D盤的) 不要以為現在就完成了哦!我們建立一個.h檔案(實際上可以開啟任意檔案夾或磁碟機,右鍵—>建立—>建立文字文件,然後重新命名為.h檔案即可。)這裡用lib.h,用記事本或VC++6開啟我們剛剛建立的.h檔案,將你定義的函數中函數的原型複製進去,比如說我剛才在lib檔案中定義了一下函數:int abc(){ printf("abc\n"); return 0;} 那麼我在標頭檔中只要這麼寫:"int abc();" 就可以了(引號不算),注意後面有一個分號。.h檔案編輯完了以後你就可以引用了,將.h檔案複製到D盤中,在VC6中建立一個cpp檔案,輸入(我這裡以lib檔案和.h檔案都在d:\下做示範):#include <d:\lib.h>#pragma comment(lib, "d:\lib.lib") //不是#include來包含,我一開始寫日誌時寫錯了,感謝狂飆為我從天落指出
int main(){ abc(); return 0;}運行,沒有錯誤,你會看到螢幕輸出abc。怎麼樣?還有需要說明的是,雖然dll也可以實現這個一樣的功能,但是lib有以下幾點好處(對比dll):1.沒有dllmain函數,運行更簡單2.大小不大3.運行後lib就嵌在程式裡面了,dll還要在程式旁邊跟一個小尾巴(dll檔案)
怎麼樣?自己趕快試一試吧!