主程序与DLL之间的全局变量问题

有几个朋友经常向我问题在DLL中怎么共用一个全局变量。比如像用户登陆后的用户名(UserName)... 
其实这个问题很简单。下面我把我的做法写出来大家一起分享。 
把共享的变量放在主程序里:UserName,....等等, 
在主程序里写两个函数 
Function CurUserName():PChar; 
begin 
Result:=pchar(UserName); 
end; 
procedure SetCurUserName(LoginUserName: PChar) 
begin 
UserName:=LoginUserName;  
end; 
然后在主程序的工程文件(*.dpr)里输出这两个函数里写 
..... 
{$R *.res} 
exports 
  CurUserName, SetCurUserName; 
.... 
这样在每个DLL里就可以使用这两个函数了 
function CurUserName: PChar; //从主程序里获取当前登陆帐号 
var 
  GetCurUserName: function: pchar; 
begin 
  @GetCurUserName := GetProcAddress(GetModuleHandle(pchar(application.Exename)), 'CurUserName'); 
  if Assigned(GetCurUserName) then //找到 
    result := GetCurUserName 
  else 
    result := 'admin'; 
end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将数据传入 DLL 中,可以使用函数参数或者全局变量。下面是两种方法的示例: 1. 函数参数方式: 在 DLL 中定义一个函数,该函数接收需要传入的数据作为参数。然后在调用该 DLL 函数时,将数据作为参数传递给该函数即可。 例如: ```c++ // DLL中的函数定义 __declspec(dllexport) void myFunction(int data) { // 在这里使用传入的数据 // ... } // 在主程序中调用DLL函数并传入数据 HINSTANCE hDLL = LoadLibrary("myDLL.dll"); if (hDLL != NULL) { typedef void (*MYFUNCTION)(int); MYFUNCTION myFunction = (MYFUNCTION)GetProcAddress(hDLL, "myFunction"); if (myFunction != NULL) { myFunction(123); // 将数据123传入DLL中的函数 } FreeLibrary(hDLL); } ``` 2. 全局变量方式: 在 DLL 中定义一个全局变量,然后在调用该 DLL 函数时,通过修改该全局变量来传递数据。 例如: ```c++ // DLL中的全局变量定义 __declspec(dllexport) int myData; // 在主程序中调用DLL函数并传入数据 HINSTANCE hDLL = LoadLibrary("myDLL.dll"); if (hDLL != NULL) { myData = 123; // 将数据123存入DLL中的全局变量 typedef void (*MYFUNCTION)(); MYFUNCTION myFunction = (MYFUNCTION)GetProcAddress(hDLL, "myFunction"); if (myFunction != NULL) { myFunction(); } FreeLibrary(hDLL); } // DLL中的函数可以读取全局变量 __declspec(dllexport) void myFunction() { // 在这里使用存储在全局变量中的数据 // ... } ``` 这两种方式各有优缺点,根据实际情况选择合适的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值