dll中如何使用数据模块,请高手帮忙给个具体的例子

解决方案 »

  1.   

    好象dll里要要ado的话要进行com的初始化,其他的都一样
      

  2.   

    //主程序
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, StdCtrls;type
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;procedure Test(const ado: Pointer);stdcall;external 'Project2.dll';implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      Test(Pointer(ADOConnection1));
    end;end.
    // DLL
    library Project2;uses
      SysUtils,
      DB,
      ADODB,
      ActiveX,
      Classes;{$R *.res}procedure Test(const ado: Pointer);stdcall;
    var
      ADOQuery1: TADOQuery;
    begin
      CoInitialize(nil);
      ADOQuery1 := TADOQuery.Create(nil);
      try
        ADOQuery1.Connection := TADOConnection(ado);
        //.............
      finally
        ADOQuery1.Free;
      end;
      CoUninitialize;
    end;exports
      Test;begin
    end.