天天看點

主程式與DLL之間的全局變量問題

有幾個朋友經常向我問題在DLL中怎麼共用一個全局變量。比如像使用者登陸後的使用者名(UserName)...

其實這個問題很簡單。下面我把我的做法寫出來大家一起分享。

把共享的變量放在主程式裡:UserName,....等等,

在主程式裡寫兩個函數

Function CurUserName():PChar;

begin

 Result:=pchar(UserName);

end;

procedure SetCurUserName(LoginUserName: PChar)

 UserName:=LoginUserName; 

然後在主程式的工程檔案(*.dpr)裡輸出這兩個函數裡寫

.....

{$R *.res}

exports

  CurUserName, SetCurUserName;

....

這樣在每個DLL裡就可以使用這兩個函數了

function CurUserName: PChar; //從主程式裡擷取目前登陸帳号

var

  GetCurUserName: function: pchar;

  @GetCurUserName := GetProcAddress(GetModuleHandle(pchar(application.Exename)), 'CurUserName');

  if Assigned(GetCurUserName) then //找到

    result := GetCurUserName

  else

    result := 'admin';