2010-05-04 61 views

回答

0

如果你調用DLL,您將需要一個庫這一點。你可以看到下面的鏈接瞭解更多信息

這是從wikipedia

鏈接到動態庫通常是通過鏈接到一個導入庫(.LIB的)建築物或鏈接創建一個可執行文件時處理。然後,創建的可執行文件包含一個導入地址表(IAT),通過該導入地址表(IAT)引用所有DLL函數調用(每個引用的DLL函數在IAT中包含它自己的條目)。在運行時,IAT被填充適當的地址,這些地址直接指向單獨加載的DLL中的函數。

+0

似乎'.lib'酷似「.H」文件。 – Gtker 2010-05-04 04:22:19

+0

@Gtker - .lib不類似.H文件。當建立一個訪問DLL的EXE有2個選項(一)準備好.h,.lib(用於編譯和鏈接)和.dll(用於運行時)。 (ii)使用Loadlibrary(),GetProcAddress()並調用你的dll函數。在這種情況下,你不需要.Lib或.H文件。 (我的建議是遠離第二選擇) – SysAdmin 2010-05-04 05:08:08

1

一般情況下,你需要在運行時.lib的鏈接,並.dll.lib文件被稱爲「導入庫」,它包含告訴鏈接器您正在調用的函數的膠水可以在關聯的.dll文件中找到。

你可能會發現,只有.dll文件在運行時所需。

這是爲Win32 DLL項目一種廣泛使用的佈局,並不限定於Winpcap的。

+0

但大多數情況下,我只需要'.lib'或'.dll',但不能同時使用。 – Gtker 2010-05-04 04:21:05

+0

@Gtker:我不確定我瞭解你對使用這兩個文件的擔心。您引用的文檔頁面上的說明對我來說完全正常。 – 2010-05-04 04:30:52

+0

什麼時候'.dll'需要一個「導入庫」?許多使用MSVCR.dll的程序從不需要這樣的「導入庫」。 – Gtker 2010-05-04 04:32:29

1

它不僅與WinPcap的,所有外部庫是這樣的。

  • 當你編譯它使用特定的庫源代碼,你需要從庫的頭文件*.h,你會得到*.o文件
  • 當這些*.o文件鏈接到可執行文件,則需要*.lib*.dll.a文件。
  • 當您運行這些可執行文件,則需要*.dll文件
+0

我明白'.lib'或'.dll'情況下,但不是'.lib' **和**'.dll' – Gtker 2010-05-04 04:38:18

+0

@Gtker,你的意思是,當你運行(不是編譯)你的可執行文件,你需要的.lib ? – YOU 2010-05-04 04:42:49

+0

我不明白什麼是「導入庫」,到目前爲止我只使用過「對象庫」。 – Gtker 2010-05-04 04:45:26

相關問題