Thema: Delphi Dll und Variablen-Scope

Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Dll und Variablen-Scope

  Alt 29. Nov 2007, 11:15
Vielleicht so:
Delphi-Quellcode:
type
  PPlugInManager = ^TPluginManager;
  TPluginManager = class
  public
    class function getInstance: TPluginManager;
  end;


const InstanceName='HalloIchMUSSAufDemRechnerGanzEinamligSein';
var InstanceMMF:THandle=0;

implementation

uses windows, sysutils;

class function TPluginManager.getInstance: TPluginManager;
var Instance:PPluginManager;
    InstanceExists:boolean;
    vInstanceName:string;
begin
  if InstanceMMF=0 then
  begin
    vInstanceName:=InstanceName+inttohex(getcurrentprocessid,8);
    InstanceMMF:=createfilemapping(cardinal(-1),nil,PAge_ReadWrite,0,4,Pchar(vInstanceName));
    InstanceExists:=getlasterror=ERROR_ALREADY_EXISTS;
  end
  else
    InstanceExists:=true;
  Instance:=mapviewoffile(InstanceMMF,FILE_MAP_ALL_ACCESS,0,0,0);
  try
    if InstanceExists then
      result:=Instance^
    else
    begin
      result:=TPluginManager.Create;
      Instance^:=result;
    end;
  finally
    unmapviewoffile(Instance);
  end;
end;

//irgendwann sollte auch mal closehandle(InstanceMMF) aufgerufen werden. Und das in jeder DLL und Exe.
// vielleicht in einer speziellen Free-Methode (du musst ja auch irgendwann Free bzw. Destroy aufrufen)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat