unit CommInterface;
//以下是用来测试的代码,可能写得有点乱,望谅解
//这是我定义的接口
interfaceuses
  Windows, Messages, SysUtils,Classes,ADODB;
type
  IMYCommInterFace = interface(IDispatch)
  ['{768A344C-0331-41A4-87F3-8C2676A982A2}']
    function GetAdoCnn: TADOConnection; stdcall;
    function GetAdoQuery: TADOQuery; stdcall;
    function ExcuteCommand(sSql: String): Boolean; stdcall;
  end;
implementation
end.
//以下是接口的实现
unit OperationData;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,ADODB,CommInterface;type
  TMYGolbData = class(TComponent,IMYCommInterFace)
  private
    FAdoCnn: TADOConnection;
    FAdoQuery: TADOQuery;
  public
    function GetAdoCnn: TADOConnection; stdcall;
    function GetAdoQuery: TADOQuery; stdcall;
    function ExcuteCommand(sSQl: String): Boolean; stdcall;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;implementationuses Math, StrUtils, DB;
{ TGolbData }constructor TMYGolbData.Create(AOwner: TComponent);
begin
  inherited;
  FAdoCnn := TADOConnection.Create(nil);
  FAdoQuery := TADOQuery.Create(nil);
end;
destructor TMYGolbData.Destroy;
begin
  FreeAndNil(FAdoQuery);
  FreeAndNil(FAdoCnn);
  inherited;
end;function TMYGolbData.ExcuteCommand(sSql: String): Boolean;
begin
  FAdoQuery.Connection := GetAdoCnn;
  with FAdoQuery do
  begin
    Close;
    SQL.Text := sSQl;
    Open;
  end;
end;function TMYGolbData.GetAdoCnn: TADOConnection;
begin
  Result := FAdoCnn;
end;function TMYGolbData.GetAdoQuery: TADOQuery;
begin
  Result := FAdoQuery;
end;initialization
  RegisterClass(TMYGolbData);finalization
  UnRegisterClass(TMYGolbData);end.
//下面则是加载包和调用接口
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, Grids, DBGrids, StdCtrls, Buttons,OperationData, ADODB,
  CommInterface;
type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    DBGrid1: TDBGrid;
    ADOConnection1: TADOConnection;
    DataSource1: TDataSource;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    DataOp: TMYGolbData;
    FICommInterFace: IMYCommInterFace;
    HPbl:THandle;
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);begin  HPbl := LoadPackage('PackOperationData.bpl');
  if HPbl1 <> 0 then
    DataOp := TMYGolbData(TComponentClass(FindClass('TMYGolbData'))).Create(nil);  FICommInterFace := DataOp as IMYCommInterFace ;
  FICommInterFace.GetAdoCnn.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;' +
  'Persist Security Info=False;Initial Catalog=TEST;Data Source=KK2000';
  FICommInterFace.GetAdoCnn.Open;  DataSource1.DataSet := FICommInterFace.GetAdoQuery;
  FICommInterFace.ExcuteCommand('select * from  Node')end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DataOp.Free;
  UnloadPackage(HPbl1);
end;end.