⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dmsystemservice.pas

📁 Delphi三层原代码掩饰及补丁
💻 PAS
字号:
{-----------------------------------------------------------------------------
  Unit: dmBaseModule
  Author:    Aleyn.wu
  Date:      2002-05-12
  Descript: Module Service
-----------------------------------------------------------------------------}
unit dmSystemService;

interface

uses
  SysUtils, Classes, Windows, Provider, DB, dmBaseModule, hmUniKey, hmMemTools,
  ADODB, Dialogs;

type
  TdmSysService = class(TDataModule)
    mdLibrary: TADOQuery;
    Connection: TADOConnection;
    Cmd: TADOCommand;
  private
  public
    procedure CreateMDTable;
    procedure DropMDTable;
    function LoadModuleLibrary(Key: string; CheckDB: Boolean): Boolean;
    function FreeModuleLibrary(Key: string; CheckDB: Boolean): Boolean;
    function LoadAllModuleLibrary: Boolean;
    function FreeAllModuleLibrary: Boolean;
  end;

var
  dmSysService: TdmSysService;
  OnlineUserCount: integer;
  LibUniKey: string;

implementation

uses dmBaseService;

{$R *.dfm}

{ TdmSysService }

function TdmSysService.LoadModuleLibrary(Key: string; CheckDB: Boolean): Boolean;
var
  Module: PModuleLibrary;
  FModuleInfo: IDataModuleInfo;
begin
  try
    if CheckDB then
      if not mdLibrary.Locate('md_UniKey', Key, []) then
        begin
          Result := False;
          exit;
        end;
    if mdLibrary['md_State'] = 1 then
      begin
        Result := True;
        Exit;
      end;
    Module := MemCreate(sizeof(TModuleLibrary));
    //Module^.FileName := MemCreate(Length(FileName));
    //Module^.FileName := StrPCopy(Module^.FileName, FileName);
    Module^.LibHandle := LoadLibrary(PChar(mdLibrary.FieldByName('md_FileName').AsString));
    Module^.CreateDataModule := GetProcAddress(Module^.LibHandle, 'CreateDataModule');
    Module^.CreateDataModuleInfo := GetProcAddress(Module^.LibHandle, 'CreateDataModuleInfo');
    FModuleInfo := Module^.CreateDataModuleInfo();
    mdLibrary.Edit;
    mdLibrary['md_ModuleAddr'] := Integer(Module);
    mdLibrary['md_ModuleName'] := FModuleInfo.GetModuleName;
    mdLibrary['md_Version'] := FModuleInfo.GetVersion;
    mdLibrary['md_Designner'] := FModuleInfo.GetDesignner;
    mdLibrary['md_Memo'] := FModuleInfo.GetMemo;
    mdLibrary['md_LastUpdate'] := FModuleInfo.GetLastUpdate;
    mdLibrary['md_ModuleIndex'] := FModuleInfo.ModuleIndex;
    mdLibrary['md_State'] := 1;
    mdLibrary.Post;
    FModuleInfo := nil;
    Result := True;
  except
    Result := False;
  end;
end;

function TdmSysService.FreeModuleLibrary(Key: string; CheckDB: Boolean): Boolean;
var
  Module: PModuleLibrary;
begin
  try
    if CheckDB then
      if not mdLibrary.Locate('md_UniKey', Key, []) then
        begin
          Result := False;
          exit;
        end;
    if mdLibrary['md_State'] = 3 then
      begin
        Result := True;
        exit;
      end;
    if mdLibrary.FieldByName('md_ModuleAddr').AsInteger = 0 then
      begin
        Result := False;
        exit;
      end;

    Module := Pointer(mdLibrary.FieldByName('md_ModuleAddr').AsInteger);
    FreeLibrary(Module^.LibHandle);
    Module^.CreateDataModule := nil;
    Module^.CreateDataModuleInfo := nil;
    //MemFree(Module^.FileName);
    Module^.ModuleState := srStop;
    MemFree(Module);
    mdLibrary.Edit;
    mdLibrary['md_ModuleAddr'] := 0;
    mdLibrary['md_State'] := 3;
    mdLibrary.Post;
    Result := True;
  except
    Result := False;
  end;
end;

function TdmSysService.LoadAllModuleLibrary: Boolean;
begin
  mdLibrary.First;
  Result := False;
  while not mdLibrary.Eof do
    begin
      Result := LoadModuleLibrary(mdLibrary.FieldByName('md_UniKey').AsString, False);
      if not Result then Break;
      mdLibrary.Next;
    end; // while
  mdLibrary.First;
end;

function TdmSysService.FreeAllModuleLibrary: Boolean;
begin
  mdLibrary.First;
  Result := False;
  while not mdLibrary.Eof do
    begin
      Result := FreeModuleLibrary(mdLibrary.FieldByName('md_UniKey').AsString, False);
      if not Result then Break;
      mdLibrary.Next;
    end; // while
  mdLibrary.First;
end;

procedure TdmSysService.CreateMDTable;
begin
  try
    LibUniKey := '##MD' + UniKey;
    Cmd.CommandText := 'Create Table ' + LibUniKey + ' (' +
      'md_ID int identity,md_Filename varchar(50),md_ModuleName varchar(50),' +
      'md_ModuleIndex int,md_Version varchar(50),md_Designner varchar(50),' +
      'md_Memo text,md_LastUpdate datetime,md_State smallint,md_ModuleAddr int,' +
      'md_UniKey char(16),md_System bit,md_LoadWhenStart bit)';
    Cmd.Execute;
    mdLibrary.SQL.Text:='Select * from '+LibUniKey;
    mdLibrary.Open;
  except
    ShowMessage('Create ' + LibUniKey + ' Error');
  end;
end;

procedure TdmSysService.DropMDTable;
begin
  mdLibrary.Close;
  Cmd.CommandText := 'Drop Table ' + LibUniKey;
  Cmd.Execute;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -