1. 程式人生 > >VS2015動態庫程式設計之匯出變數

VS2015動態庫程式設計之匯出變數

本文章相關視訊教程下載地址http://pan.baidu.com/s/1slK2Hat

在動態庫中定義的全域性變數,可以在呼叫該動態庫的程式中進行訪問和修改。

1 在動態庫中定義匯出變數

VS2015動態庫之入口函式”中建立的DLL程式的基礎上,新增匯出變數。

1.1 全域性變數的定義

dllmain.cpp原始檔的起始位置處定義一個全域性變數

unsigned int dllGlobalVar = 0;

1.2 全域性變數的賦值

dllMain()入口函式中,對其進行賦值:

switch (ul_reason_for_call)

{

case DLL_PROCESS_ATTACH:

dllGlobalVar = 100;

std::cout << "DLL_PROCESS_ATTACH.\n";

break;

1.3 全域性變數的匯出宣告

為程式新增一個名為DLL_Variant_Test.def的定義檔案,在該文將中將dllGlobalVar宣告為匯出變數

LIBRARY DLL_Variant_Test

EXPORTS

dllGlobalVar DATA

2 在呼叫動態庫的程式中使用該變數

VS2015動態庫之入口函式”中建立的呼叫動態庫程式的基礎上,新增對該變數的使用。

2.1 資料型別的定義

程式要訪問動態庫中的變數,即要獲取該變數在動態庫中的地址(指標)。dllGlobalVar的型別是

unsigned int,因此其地址應該為unsigned int*。因此,在程式中首先有如下程式碼

typedef unsigned int* PUINT;

2.2 變數地址的獲取

通過GetProcAddress()函式獲取該變數的地址

PUINT dllGlobalVar = (PUINT)GetProcAddress(hinstLib, "dllGlobalVar");

該行程式碼應該放在LoadLibrary()函式之後使用。

2.3 變數的訪問及修改

在獲取了dllGlobalVar變數的地址之後,可以直接對其進行訪問或者對其進行修改。

cout<<*dllGlobalVar;

*dllGlobalVar = 200;

cout<<*dllGlobalVar;

以上程式碼中,第一次輸出的值是100,第二次輸出的值是200