有關 TDataModule 放在 DLL 中的問題 |
缺席
|
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
請問 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
------
將問題盡快結案也是一種禮貌! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |