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;
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; ClassIniFileName:='MyIniFiles.TMyIniFile';
end.