Ver Mensaje Individual
  #8  
Antiguo 13-07-2018
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Reputación: 21
gatosoft Va camino a la fama
hola bucanero.

Sugiero que utilices la RTTI. Para ello debes cambiar tu codigo de la unidad configs asi:

Código Delphi [-]
unit configs;

interface

uses inifiles;

type
  TClassIniFile = class of TInifile;

var
  ClassIniFile: TClassIniFile = nil;
  IniFileName: string = 'c:\tmp\config.ini';
  ClassIniFileName: String = '';

  function config: TIniFile;

implementation

uses Dialogs, SysUtils, ObjectClone, RTTI;

var
  IniFile:TInifile = Nil;

function config: TIniFile;
var
  RttiContext: TRttiContext;
  RttiType: TRttiInstanceType;
Begin
   if Assigned(IniFile) then
     exit(IniFile);

   if ClassIniFileName <> '' then
      begin
      RttiContext:= TRttiContext.Create;
      RttiType := RttiContext.FindType(ClassIniFileName) as TRttiInstanceType;

      IniFile:= RttiType.GetMethod('Create')
                        .Invoke(RttiType.MetaclassType,
                               [IniFileName]).AsObject as TIniFile;

      end
   else
      IniFile := TIniFile.Create(IniFileName);

   Result:= IniFile;
end;


initialization

finalization
  if assigned(IniFile) then
    IniFile.Free;
end.

y tus unidades descendientes, algo asi:

Código Delphi [-]
unit MyIniFiles;

interface

uses IniFiles, uIMyInis;

type
  TMyIniFile = class(TIniFile)
  private
  public
    class procedure mydummy; static;
    constructor Create(const FileName: string);
  end;

implementation

uses dialogs, configs;

{ TMyIniFile }

constructor TMyIniFile.Create(const FileName: string);
begin
 inherited Create(FileName);
 MessageDlg('TMyIniFile2.Crear', mtInformation, [mbOK], 0);
end;

class procedure TMyIniFile.mydummy;
begin

end;

Initialization
  TMyIniFile.mydummy; //Me encontré con este error
  ClassIniFileName:='MyIniFiles.TMyIniFile';
end.
Responder Con Cita