最新问答 更多

关注我们

关注我们

了解我们的产品和服务,有任何疑问、意见或合作需求,可关注本微博与我们在线沟通。

盒子问答悬赏微博

[单人中标] delphi :7写一个dll :,封装窗体,和 :ado :查询

分享任务:
√ 问题已解决
350
发布者 dgqqdgqq
浏览量
回答数 3

任务详情

delphi :7写一个dll :,封装窗体,和 :ado :查询
<div>数据库 :access :</div>
<div> :</div>
<div>提供源码, :调试无异常,要考虑各种异常处理。</div>

问题补充

主exe 程序,传递 ado 链接给 dll
  • 蜗牛大仙:  能不能把需求写明确点
    

      回答于:2014/3/15 16:42:48      #1楼 奖励火柴:0
    用户头像
  • ghs: 

    联系我,给你例子。QQ:80294551

      回答于:2014/3/15 17:36:01      #2楼 奖励火柴:350
    用户头像
  • 雪莱:  附件传不上来,晕死,QQ:52926110
    
    dll中内容发一下
    library Padodll;
    uses
    SysUtils,
    Classes,
    Windows,
    Forms,
    dllunit in 'dllunit.pas' {dllform};
    exports
    calldllform;
    {$R *.res}
    procedure DLLUnloadProc(Reason: Integer); register;
    begin
    if Reason = DLL_PROCESS_DETACH then begin
    Dllfinalization;
    Application:=DllApplication;
    end;
    end;
    begin
    DllApplication:=Application;
    DLLProc := @DLLUnloadProc;
    end.
    dll中窗体,调用也简单
    unit dllunit;
    interface
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs,DB,ADODB, StdCtrls, ExtCtrls, Grids, DBGrids;
    type
    TDllTrItem=class
    AppliHandle:HWnd;
    MainForm:TForm;
    FConnection:TADOConnection;
    end;
    Tdllform = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
    public
    FadoCon:TADOConnection;
    { Public declarations }
    end;
    procedure calldllform(Dllitem:TDllTrItem);stdcall;far;
    procedure Dllfinalization; stdcall; far;
    var
    DllApplication: TApplication;
    implementation
    {$R *.dfm}
    procedure calldllform(Dllitem:TDllTrItem);
    var ptr:PLongInt;
    begin
    ptr:=@(Application.MainForm);//先把dll的MainForm句柄保存起来,也无须释放,只不过是替换一下
    ptr^:=LongInt(Dllitem.MainForm);//用主调程序的mainForm替换DLL的MainForm。MainForm是特殊的WINDOW,它专门管理Application中的Forms资源
    with Tdllform.create(application) do
    try
    FadoCon:=Dllitem.FConnection;
    ADOQuery1.Connection:=FadoCon;
    showmodal;
    finally
    free;
    end;
    end;
    procedure Dllfinalization;
    var
    i,Count:integer;
    obj:TComponent;
    begin
    Count:=Application.ComponentCount;
    for i:=Count-1 downto 0 do begin
    obj:=Application.Components[i];
    if obj.InheritsFrom(TForm) then
    obj.Free;
    end;
    end;
    procedure Tdllform.Button1Click(Sender: TObject);
    begin
    ADOQuery1.active:=False;
    ADOQuery1.SQL.Text:='select * from tkc';
    ADOQuery1.Open;
    end;
    end.

      回答于:2014/3/15 17:44:34      #3楼 奖励火柴:0
    用户头像
刷新 首页 上一页 下一页 末页 页次1/1页 共 3 条记录  转到:
x
您的任务被发布者审核为不合格

原因

详细说明

关于盒子问答
盒子问答为广大程序员提供一个迅速解决问题的好途径,帮助有编程疑惑的程序员轻松发问答。同时授业解惑的人,可以得到相应的收入。帮人解答并赚钱就来盒子问答。
联系我们
我们的服务支持邮件:webmaster@2ccc.com,支持qq:161945
如有建议或意见,可通过右侧“用户反馈”告诉我们
收藏本站
用户反馈