data module数据模块本身就是无界面的,在DLL中照样可以使用,不过即使DLL中已加入数据模块,也需要在动态库的初始化中重新生成一遍。假如动态库为test,其中包含数据模块单元DMunit,代码可以这样写: library test;uses SysUtils, Classes, windows, forms, Messages, Controls, DMunit in 'DMunit.pas' {DataModule1: TDataModule};
var SaveExit: Pointer;procedure LibExit; begin // library exit code ExitProc := SaveExit; // restore exit procedure chain end;procedure DLLMain(Reason: Integer); begin case Reason of DLL_PROCESS_ATTACH: begin Application.CreateForm(TDataModule1, DataModule1);
end; DLL_PROCESS_DETACH: begin DataModule1.destroy end; end; end;exports 你要输出的例程 begin DLLProc:=@DLLMain; DLLMain(DLL_PROCESS_ATTACH); SaveExit := ExitProc; // save exit procedure chain ExitProc := @LibExit; // install LibExit exit procedure end.
然后就和在普通程序样用数据库了
library test;uses
SysUtils,
Classes,
windows,
forms,
Messages,
Controls,
DMunit in 'DMunit.pas' {DataModule1: TDataModule};
var
SaveExit: Pointer;procedure LibExit;
begin
// library exit code
ExitProc := SaveExit; // restore exit procedure chain
end;procedure DLLMain(Reason: Integer);
begin
case Reason of
DLL_PROCESS_ATTACH:
begin
Application.CreateForm(TDataModule1, DataModule1);
end;
DLL_PROCESS_DETACH:
begin
DataModule1.destroy
end;
end;
end;exports
你要输出的例程
begin
DLLProc:=@DLLMain;
DLLMain(DLL_PROCESS_ATTACH);
SaveExit := ExitProc; // save exit procedure chain
ExitProc := @LibExit; // install LibExit exit procedure
end.