dll中使用单模式时,每次都是创建一个新的对象.怎么处理?(100分)

  • 主题发起人 主题发起人 zhrrqy
  • 开始时间 开始时间
Z

zhrrqy

Unregistered / Unconfirmed
GUEST, unregistred user!
{我想把下面的Database作成Dll,通过Interface公布}
function DatabaseObj:IInterface;
begin
Result:=TDatabase.SingleTonInstance;
end;

class function TDataBase.GetInstance(Request: Integer): TDataBase;
const
FInstance: TDataBase = nil;
begin
case Request of
0:;
1:
begin
{问题就出在这里,我检查了,在exe中,第二次使用时,FInstance<>nil,而转换成dll是,FInstance一直是nil}
if not assigned(FInstance) then
begin
Finstance := CreateInstance;
end;
end;
2:
begin
Finstance := nil;
end;
else
raise Exception.CreateFmt('%d是GetInstance()中的非法参数', [Request]);
end;
Result := FInstance;
end;
 
你把 FInstance 放到dll 中的全局单元里定义就可以了.
 
还是不行
 
内存共享。
 
我现在发现在exe中IDataBase(DataBase)时不会创建新对象,而按照以下用法同样要创建新对象
...
var DataBase:IDataBase
begin
TDatabase.SingletoInstance.getInterface(IDataBase,Database);
if Database<>nil then showmessage('');
end;
 
IInterface(TObject)
TObject.queryInterface(IInterface,interface)
TObject.GetInterface(IInterface,interface)
三者的区别是什么?
 
建议楼主看一下刘艺的一篇封装对象到DLL,然后通过接口调用,应该有帮助。
刘艺的网站上有,http://www.liu-yi.net/HTML/resource/download/articles/DelphiDLL.pdf
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
735
import
I
I
回复
0
查看
641
import
I
后退
顶部