我试图找出一种将对象从主应用程序传递到DLL(用于插件系统)的安全方法。这个想法是在dll中使用主应用程序的TZConnection(从Zeos Lib访问数据库)。
我宁愿不使用运行时程序包,而DLL必须是要走的路(我不需要BPL每次都需要重新编译,也不知道如何使用COM)。
有人告诉我可以用Interfaces来做到这一点。
我以前从未使用过它们,但是一直在弄乱它,并设法做到了……但是,我不知道我是否做得正确(例如,安全)。
这是我的界面单元。
unit PluginIntf;
interface
uses
ZConnection, ZDataSet;
type
IQueryResult = interface ['{743AB77E-7897-403E-A0D9-4D02748E565D}']
function GetRecordCount: Integer;
function GetDataSet: TZQuery;
end;
IPluginHost = interface ['{A5A416B4-437E-4A1E-B228-0F94D54840B0}']
function RunSql(const SQLString:WideString): IQueryResult;
end;
IPlugin = interface ['{8D9591C3-5949-4F0A-883E-6ABD02597846}']
function GetCaption: WideString;
end;
implementation
end.
在IQueryResult中,我传递了TZQuery。它有效,但是...安全吗?还有其他方法可以将其包装在接口中吗?
谢谢努诺·皮卡多(Nuno Picado)
TZQuery
是一堂课。因此,除非您使用运行时程序包,否则跨模块边界传递一个是不安全的。将类与DLL一起使用,实际上您有两种不同的类型,每个模块一种。
您是正确的,接口对此是安全的,但是您需要将自己限制为DLL互操作安全类型。即简单的类型,记录,指向数组的指针,接口或这些类型的组合。
您需要包装TZQuery
一个具有其功能的接口。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句