dll 匯出變數
dll 定義的全域性變數可以被呼叫的程序訪問, dll 也可以訪問呼叫程序的全域性資料, 我們來看看在應用工程中引用 dll 中的變數
//lib.h
#ifnedef lib_h
#define lib_h
extern
intdllglobalvar;
#endif
//lib.cpp
#include "
lib.h
"#inlclude
intdllglobalvar;
bool aplentry dllmain(handle hmodule, dword ul_reason_for_call, lpvoid lpreserved)
return
true;
}
//lib.def
library "
dlltest
"exports dllglobalvar constant;
getglobalvar
從 lib.h 和 lib.cpp 中可以看出, 全域性變數在 dll 中定義和使用方法與一般程式設計是一樣的。
下面在主函式中引用 dll 中定義的全域性變數
//test.cpp
#include #pragma comment(lib, "dlltest.lib")
extern
intdllglobalvar;
intmain()
其中需要注意的是用 extern intdllglobalvar;
匯入的並不是 dll 中全域性變數本身, 而是其位址, 使用強制指標轉換來使用 dll 中的全域性變數, 所以千萬不要有像這樣的操作:dllglobalvar = 1;
這改變了指標的值, 以後再也引用不到 dll 中的全域性變數了。
而還有一種更好的方法:
//test.cpp
#include #pragma comment(lib, "dlltest.lib")
extern
int _declspec(dllimport) dllglobalvar; //
用 _declspec(dllimport) 匯入
intmain()
通過 _declspec(dllimport) 匯入的就是 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 中匯出函式的宣告有兩種 1.在之前給出的在函式宣告中加上 declspec dllexport 在這就不再列舉了 2.採用模組定義 def 檔案宣告,def 檔案為聯結器提供了有關被連線程式的的匯出,屬性及其他方面的資訊 下面讓我們看看怎樣用 def 檔案將函式 add 宣告為 dll 匯出...
VC DLL 動態鏈結庫 一
首先我們來說說靜態鏈結庫 靜態資料庫是指 lib 單獨使用,在編譯時直接加入程式當中,包含函式本身,不僅包含標頭檔案,還有原始碼,稱為靜態鏈結庫static link library。鏈結生成的程式可以獨立執行。即lib檔案是靜態編譯出來的,索引和實現都在其中。缺點是任何改動,都需要重新編譯 鏈結,...