VC DLL 動態鏈結庫 三

2022-07-17 04:12:07 字數 1291 閱讀 5460

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檔案是靜態編譯出來的,索引和實現都在其中。缺點是任何改動,都需要重新編譯 鏈結,...