全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1201
推到 Plurk!
推到 Facebook!

有關 TDataModule 放在 DLL 中的問題

缺席
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-16 17:04:31 IP:211.76.xxx.xxx 未訂閱
請問 TDataModule 可以放在 DLL 中嗎 ? 好像找不到相關的討論. 我之前都是用 Delphi Package, DLL 是第一次使用, 可能我觀念不對, 還望各位指教一下 ... 我使用 IBX 可以正常顯示第一筆資料(我只有使用 DBEdit 顯示資料), 但移到第二筆資料會出現 invaild pointer operation 的 Error Message , 但是用 TTable 就直接出現此 Error Message. 我的測試程式碼下: (主程式)
unit MAIN;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ToolWin, ComCtrls, Db, Grids, DBGrids, StdCtrls, ExtCtrls, DBCtrls,
  Mask;    type
  TfmMAIN = class(TForm)
    mmMain: TMainMenu;
    ToolBar1: TToolBar;
    DataSource1: TDataSource;
    DBNavigator1: TDBNavigator;
    DBEdit1: TDBEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    AMainDM: Longint;
  public
    { Public declarations }
  end;      function CreateMainDataModule(AHandle: THandle): Longint; stdcall;
  procedure FreeMainDataModule(ADMRef: Longint); stdcall;
  
var
  fmMAIN: TfmMAIN;    implementation    uses DATA;    function CreateMainDataModule; external 'SYSDATA.DLL' name 'CreateMainDataModule';
procedure FreeMainDataModule; external 'SYSDATA.DLL' name 'FreeMainDataModule';    {$R *.DFM}    procedure TfmMAIN.FormCreate(Sender: TObject);
begin
  AMainDM := CreateMainDataModule(Application.Handle);
  if (AMainDM > 0) then
  begin
    DataSource1.DataSet := TfmDATA(AMainDM).tblCUST;
    TfmDATA(AMainDM).tblCUST.Open;
  end;
end;    procedure TfmMAIN.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FreeMainDataModule(AMainDM);
end;    end.
(DLL 部份)
library SYSDATA;    uses
  SysUtils,
  Classes,
  DATA in 'DATA.pas' {fmDATA: TDataModule};    exports
  CreateMainDataModule,
  FreeMainDataModule;
  
{$R *.RES}    begin    end.
(DLL 內的 DataModule)
unit DATA;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, DBTables;    type
  TfmDATA = class(TDataModule)
    tblCUST: TTable;
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  fmDATA: TfmDATA;      function CreateMainDataModule(AHandle: THandle): Longint; stdcall;
  procedure FreeMainDataModule(ADMRef: Longint); stdcall;
  
implementation    {$R *.DFM}    function CreateMainDataModule(AHandle: THandle): Longint; stdcall;
var DM: TfmDATA;
begin
  try
    Application.Handle := AHandle;
    DM := TfmDATA.Create(Application);
    Result := Longint(DM);
  except
    Result := 0;
  end;
end;    procedure FreeMainDataModule(ADMRef: Longint); stdcall;
begin
  if (ADMRef > 0) then
    TfmDATA(ADMRef).Free;
end;    end.
完整程式碼: http://delphi.ktop.com.tw/loadfile.php?TOPICID=9016917&CC=201663
------
將問題盡快結案也是一種禮貌!
系統時間:2024-05-15 10:32:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!