dll 中匯出函式的宣告有兩種:
1. 在之前給出的在函式宣告中加上 __declspec(dllexport), 在這就不再列舉了
2. 採用模組定義(.def) 檔案宣告, .def 檔案為聯結器提供了有關被連線程式的的匯出, 屬性及其他方面的資訊
下面讓我們看看怎樣用 .def 檔案將函式 add 宣告為 dll 匯出函式(需在 dlltest 工程中新增 lib.def 檔案):
//lib.def
library dlltest
exports add @
1
.def 檔案的規則為:
(1) library 語句說明 .def 檔案相應的 dll;
(2) exports 語句後要列出要匯出函式的名稱,可以在 .def 檔案中的匯出函式名後加 @n, 表示要匯出函式的序號為 n;
(3) .def 檔案中的注釋由每個注釋行開始處的分號指定,且注釋不能和語句在同一行。
由前文可以知道庫分為靜態庫和動態庫 dll,深入到 dll 內部, 其呼叫方式也分為靜態與動態。
靜態呼叫方式的特點是由編譯系統完成對 dll 的載入和應用程式結束時 dll 的解除安裝, 當呼叫某 dll 的應用程式結束時,若系統中還有其他程式使用該 dll, 則 windows 對 dll 的應用記錄減一, 知道所有使用該 dll 的程式都結束時才釋放它, 靜態呼叫方式簡單實用, 但不如動態呼叫方式靈活。
VC DLL 動態鏈結庫 四
dll 匯出類 dll 中定義的類可以在應用工程中使用。接下來,我將演示在 dll 中定義 point 和 circle 兩個類,並在應用工程中引用了他們。point.h point 類的宣告 ifnedf point h define point h ifdef dll file class de...
VC DLL 動態鏈結庫 三
dll 匯出變數 dll 定義的全域性變數可以被呼叫的程序訪問,dll 也可以訪問呼叫程序的全域性資料,我們來看看在應用工程中引用 dll 中的變數 lib.h ifnedef lib h define lib h extern intdllglobalvar endif lib.cpp inclu...
VC DLL 動態鏈結庫 一
首先我們來說說靜態鏈結庫 靜態資料庫是指 lib 單獨使用,在編譯時直接加入程式當中,包含函式本身,不僅包含標頭檔案,還有原始碼,稱為靜態鏈結庫static link library。鏈結生成的程式可以獨立執行。即lib檔案是靜態編譯出來的,索引和實現都在其中。缺點是任何改動,都需要重新編譯 鏈結,...