DLL中匯出全域性變數

2021-05-22 14:40:28 字數 1282 閱讀 8343

)。#ifndef lib_h

#define lib_h

extern int dllglobalvar;

#endif

#include "lib.h"

#include

int dllglobalvar;

bool apientry dllmain(handle hmodule, dword ul_reason_for_call, lpvoid lpreserved)

return true;}

;檔名:lib.def

;在dll中匯出變數

library "dlltest"

exports

dllglobalvar constant

;或dllglobalvar data

getglobalvar

從lib.h和lib.cpp中可以看出,全域性變數在dll中的定義和使用方法與一般的程式設計是一樣的。若要匯出某全域性變數,我們需要在.def檔案的exports後新增:

變數名 constant   //過時的方法

或變數名 data     //vc++提示的新方法

在主函式中引用dll中定義的全域性變數:

#include

//載入靜態鏈結庫dlltest.lib

#pragma comment(lib,"dlltest.lib")

extern int dllglobalvar;

int main(int argc, char *argv)

特別要注意的是用extern int dllglobalvar宣告所匯入的並不是dll中全域性變數本身,而是其位址,應用程式必須通過強制指標轉換來使用dll中的全域性變數。這一點,從*(int*)dllglobalvar可以看出。因此在採用這種方式引用dll全域性變數時,千萬不要進行這樣的賦值操作:

dllglobalvar = 1;

其結果是dllglobalvar指標的內容發生變化,程式中以後再也引用不到dll中的全域性變數了。

在應用工程中引用dll中全域性變數的乙個更好方法是:

#include

#pragma comment(lib,"dlltest.lib")

extern int _declspec(dllimport) dllglobalvar; //用_declspec(dllimport)匯入

int main(int argc, char *argv)

通過_declspec(dllimport)方式匯入的就是dll中全域性變數本身而不再是其位址了,筆者建議在一切可能的情況下都使用這種方式。

DLL中匯出類

dll中定義的類可以在應用工程中使用。下面的例子裡,我們在dll中定義了point和circle兩個類,並在應用工程中引用了它們。檔名 point.h,point類的宣告 ifndef point h define point h ifdef dll file class declspec dlle...

VC中建立DLL,匯出全域性變數,函式和類

1.在vc中新建乙個win32空專案mathlib 2.新增預編譯標頭檔案stdafx.h,定義匯入匯出控制符號 1 2 pragma once3 define mathlib export 3.新增包含要匯出的全域性變數,函式和類的標頭檔案mathlib.h 1 2 pragma once3 4 ...

dll使用全域性變數的疑問

這裡先將dll原 奉上 lib.h標頭檔案 ifndef lib h define lib h ifdef cplusplus extern c endif endif lib.cpp include lib.h int dllglobalvar 10 int getglobalvar void 測...