)。#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 測...