Delphi接口和DLL

努诺皮卡多

我试图找出一种将对象从主应用程序传递到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)

大卫·赫弗南(David Heffernan)

TZQuery是一堂课。因此,除非您使用运行时程序包,否则跨模块边界传递一个是不安全的。将类与DLL一起使用,实际上您有两种不同的类型,每个模块一种。

您是正确的,接口对此是安全的,但是您需要将自己限制为DLL互操作安全类型。即简单的类型,记录,指向数组的指针,接口或这些类型的组合。

您需要包装TZQuery一个具有其功能的接口。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章