OBJ LIB DLL與EXE之間的關係

2021-07-10 08:35:33 字數 728 閱讀 4307

obj是中間**檔案、lib是靜態庫檔案、dll是動態庫檔案、exe是可執行檔案。

對於靜態庫檔案,鏈結的時候把其中需要的東西抽取出來嵌入到exe中,exe較大。

對於動態庫檔案,exe執行的時候依賴於dll提供的功能,沒有dll則exe無法執行,exe較小。

乙個c或cpp檔案被編譯後既是乙個obj,當所有必須要的c或cpp都被編譯成obj後再統一鏈結成exe。

lib或dll可以被看成是一堆obj的組合,發布後可以被鏈結入其它exe或被其它exe呼叫。

lib不可以呼叫其它lib或dll,dll可以呼叫其它lib或dll。

動態庫有lib檔案和dll檔案。lib檔案必須在編譯期就被鏈結到應用程式中,而dll在執行期才會被呼叫。如果有dll檔案,則對應的lib檔案一般是一些索引資訊,具體的實現在dll檔案中。如果只有lib檔案,那麼這個lib檔案是靜態庫檔案,索引和實現都在其中。靜態庫檔案有好處,給使用者安裝時就不需要再掛動態庫了;但也有缺點,即導致exe較大且失去了動態庫的靈活性,在版本公升級時,同時要發布新的exe才行。

在動態庫的情況下,有兩個檔案,乙個是lib檔案、乙個是dll檔案,lib檔案包含被dll匯出的函式的名稱和位置,dll包含實際的函式和資料,應用程式使用lib檔案鏈結到所需要使用的dll檔案,庫中的函式和資料並不複製到可執行檔案中,因此在exe檔案中存放的不是被呼叫的函式**,而是dll中所要呼叫的函式的記憶體位址,這樣當乙個或多個應用程式執行時再把程式**和被呼叫的函式**鏈結起來,從而節省了記憶體資源。

dll與exe之間的互動

外掛程式一般是以dll的形式存在,而宿主則以exe的形式存在,他們之間必然要互動。通常,互動方式可以是com,一種微軟定義的複雜介面方式,不過支援的人挺多的,但是不利於跨平台使用,而且開發太複雜了。另一方式就是使用訊息系統,互動之間傳遞訊息,還可以實現互動,就是處理起來用非同步方式,稍微有點不自然,...

EXE之間通訊

而且還有好幾種方法。1 傳送訊息傳遞 2 共享記憶體傳遞 3 使用com程序外伺服器 這篇文章主要說明一下,如何利用傳送訊息使兩個exe完成通訊。其他兩個方法感興趣可以搜尋下,都可以找到相應 傳送端 public partial class mainwindow window structlayou...

dll與exe的區別

dll 中雖然包含了可執行 卻不能單獨執行,而應由 windows 應用程式直接或間接呼叫。所謂靜態鏈結是指把要呼叫的函式或者過程鏈結到可執行檔案中,成為可執行檔案的一部分。換句話說,函式和過程的 就在程式的 exe檔案中,該檔案包含了執行時所需的全部 當多個程式都呼叫相同函式時,記憶體中就會存在這...