1).动态连接库中,主程序与DLL如何共享连接?
如果使用共用连接字符串的方式,哪每个DLL连接时都要与数据库进行一次连接吗?如果是哪就非常耗费资源了。
2).在各个DLL中如何处理全局变量?
3).每个DLL中都建立窗体,而为了保持界面的一致性,需要继承一个父窗体,如何做到使该父窗体共享给每个DLL中的Form使用,且更改父窗体所有DLL中的窗体也更着变动。
如果使用共用连接字符串的方式,哪每个DLL连接时都要与数据库进行一次连接吗?如果是哪就非常耗费资源了。
2).在各个DLL中如何处理全局变量?
3).每个DLL中都建立窗体,而为了保持界面的一致性,需要继承一个父窗体,如何做到使该父窗体共享给每个DLL中的Form使用,且更改父窗体所有DLL中的窗体也更着变动。
LibHandle: THandle;
ShowAbcdEnter: TShowAbcdEnter;
begin
LibHandle := LoadLibrary('Dll\AbcdEnterDll.dll');
try
if LibHandle = 0 then
raise EDLLLoadError.Create('无法成功装入资源文件,请检查');
@ShowAbcdEnter := GetProcAddress(LibHandle,'ShowAbcdEnter');
if not (@ShowAbcdEnter = nil) then
Begin
ShowAbcdEnter(Application.Handle,AaaForm.Adocca,AaaForm.SyUser);
End
else
RaiseLastWin32Error;
finally
FreeLibrary(LibHandle);
end;uses
ShareMem,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ActiveX, StdCtrls, ExtCtrls, Buttons, ComCtrls,Jpeg, DB, ADODB, ExtDlgs;
function ShowAbcdEnter(AHandle: THandle; PassAdoc: String; PassUser: String):BOOL; StdCall;
var
AbcdEnterForm : TAbcdEnterForm;
begin
Application.Handle := AHandle;
AbcdEnterForm := TAbcdEnterForm.Create(Application);
try
AbcdEnterForm.Adoc.Connected:=False;
AbcdEnterForm.ADOC.ConnectionString:=PassAdoc;
AbcdEnterForm.ADOC.Connected:=True;
AbcdEnterForm.Edit2.Text:= PassUser;
AbcdEnterForm.ShowModal;
Result := False;
finally
AbcdEnterForm.Free;
end;
End;