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

http://www.cnblogs.com/railgunman/archive/2010/11/29/1891200.html

主程序与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;

时间: 2024-10-29 10:46:18

主程序与DLL之间的全局变量问题的相关文章

主程序与子程序之间的参数传递的四种方法

主程序调用子程序是,往往需要向子程序传递一些参数,同样,子程序运行的时候也需要把一些结果参数传回给主程序,主程序与子程序之间的这种信息传递称为参数传递,我们把主程序传给子存续的参数称为子程序的入口参数,把由子程序传给主程序的参数称为子程序的出口参数 有多种传递参数的方法,寄存器传递法,约定内存单元传递法,堆栈传递法和CALL后续传递法 4.2.1利用寄存器传递参数 利用寄存器传递参数就是把参数放在约定的寄存器中,这种方法的优点是实行啊你个简单和调用方便,但是由于寄存器的个数有限,并且寄存器往往还

DLL中导出全局变量

1. DEF文件 1 EXPORTS 2 3 g_nTest DATA ;导出全局变量 4 5 GetGlobalVar ;导出函数 2. 调用 1 extern int g_nTest; //声明 2 3 int main(int argc, char *argv[]) 4 { 5 *(int*)g_nTest = 1; //注意前面的转换 6 7 return 0; 8 } 需要注意的是用 extern int g_nTest 声明所导入的并不是DLL中全局变量本身,而是其地址,应用程序必须

Activex、OLE、COM、OCX、DLL之间的区别(转)

先明确组件(Component)和对象(Object)之间的区别: 组件是一个可重用的模块,它是由一组处理过程.数据封装和用户接口组成的业务对象(Rules Object).组件看起来像对象,但不符合对象的学术定义. 它们的主要区别是: 1)组件可以在另一个称为容器(有时也称为承载者或宿主)的应用程序中使用,也可以作为独立过程使用: 2)组件可以由一个类构成,也可以由多个类组成,或者是一个完整的应用程序: 3)组件为模块重用,而对象为代码重用.现在,比较流行的组件模型有COM(Component

Activex、OLE、COM、OCX、DLL之间的区别

先明确组件(Component)和对象(Object)之间的区别: 组件是一个可重用的模块,它是由一组处理过程.数据封装和用户接口组成的业务对象(Rules Object).组件看起来像对象,但不符合对象的学术定义. 它们的主要区别是: 1)组件可以在另一个称为容器(有时也称为承载者或宿主)的应用程序中使用,也可以作为独立过程使用: 2)组件可以由一个类构成,也可以由多个类组成,或者是一个完整的应用程序: 3)组件为模块重用,而对象为代码重用.现在,比较流行的组件模型有COM(Component

线程之间共享全局变量存在问题

1 import time 2 from threading import* 3 #定义全局变量num 4 num = 0 5 def test1(): 6 global num 7 for i in range(100000): 8 num+=1 9 print('test1输出num:',num) 10 11 def test2(): 12 global num 13 for i in range(100000): 14 num+=1 15 print('test2输出num:',num)

Delphi7 中使用FastMM 转载

http://blog.csdn.net/cai5/article/details/17142697 Delphi7 中使用FastMM 在工程的第一行引用FastMM4即可(注意,一定要在第一个Uses的位置),可以在调试程序时提示内存泄露情况,还可以生成报告.在Delphi2007以后版本中,使用更加简单,只需要在工程开始的位置加上语句:ReportMemoryLeaksOnShutdown := True;就可以了,并且在运行时不会出现提示.如果想要生成文件报告,还需要FastMM4,De

FastMM内存泄露

转自:http://www.2ccc.com/article.asp?articleid=4879FastMM是非常优秀的内存管理器,但是从FastMM4Options.inc中找到合适自已程序的选项设置免不了一顿英文的纠缠,所以我把这个文件里的所有英文注释都翻译成了中文.如果你发现有任何翻译不恰当的地方,直接进行修改就可以了.呵呵,给FastMM作者写了封邮件,这个文件也会被包含在下一个FastMM版本中.如果你不愿意下载,直接把下面内容复制到FastMM4Options.inc文件里并覆盖原

fastmm配置

FastMM最新版本提供了中文语言包,可方便国内使用.下载地址为 http://sourceforge.net/projects/fastmm/ 配置文件为:FastMM4Options.inc, 中文详细配置方法如下: { Fast Memory Manager: 选项配置文件 在这里为FastMM设置默认选项 FastMM 4.84 } { Simplified Chinese translation by QianYuan Wang Contact me if you find any i

fastmm4中文翻译

FastMM是非常优秀的内存管理器,但是从FastMM4Options.inc中找到合适自已程序的选项设置免不了一顿英文的纠缠,所以我把这个文件里的所有英文注释都翻译成了中文.如果你发现有任何翻译不恰当的地方,直接进行修改就可以了.呵呵,给FastMM作者写了封邮件,这个文件也会被包含在下一个FastMM版本中.如果你不愿意下载,直接把下面内容复制到FastMM4Options.inc文件里并覆盖原文件内容即可.下面是对最新的FastMM4.84版本的翻译,之前的版本可以参考对照. { Fast