动态链接库中的接口类问题(100分)

  • 主题发起人 主题发起人 wuyuede
  • 开始时间 开始时间
W

wuyuede

Unregistered / Unconfirmed
GUEST, unregistred user!
我在动态链接库里写了一个 接口,要两个程序来调用,要求,只能生成一个对象,可是不知道为什么,每个程序在调用的时候都会创建一个对象。大概的代码如下:
IDemoIntef 是个接口,其中有所要用到的 函数
TDemoIntf = Class(TInterfacedObject, IDemoIntef); //TDemoIntf 继承了接口的类
动态链接库中暴露的函数:GetHelloInit; 全局变量 : _IDemoIntef: IDemoIntef;

function GetHelloInit: IDemoIntef; stdcall;
begin
try
if not Assigned(_IDemoIntef) then
begin
_IDemoIntef := Tdemointf.Create;
end;
finally
Result := _IDemoIntef;
end;
end;
在其他程序中调用这个函数来创建一个 对象用接口中的函数,但是 这些函数同一时刻只能有一个程序来调用,所以在创建时先 assigned 判断是否创建了对象。
现在的问题是,两个程序同时运行时,用assigned判断后 都是一个空,所以都会创建一个新的对象,不知道这是为什么
 
>>不知道这是为什么
呵呵,每个Exe都有自己的地址空间,你的DLL虽然是一个,但是被不同的Exe调用,就会
处在不同的地址空间中,自然没法“共享”任何信息。
不同地址空间中的进程共享数据可以通过内存映射文件的方式来做到,请参考帖子:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2492079

:)
 
最简单的方法
是否调用信息写到文件里
 
每个进程都有独立的4G虚拟进程空间,调用DLL创建的对象的在各自的进程空间内,当然没法共享,不同进程共享数据和对象有很多方法,可以查下以往的帖子。
 
多人接受答案了。
 
后退
顶部