walito
15-11-2007, 21:28:21
Les cuento que ya me estoy cansando de esto.
Como el titulo dice, quiero saber si lo que estoy haciendo tiene algun limite o no, ya que no me anda o yo soy un verdadero inutil.
Resulta que cuando cargo una libreria BPL necesito pasarle algun parametro al Create. Como es un TForm yo me hice mi clase:
type
TFormConPermisos = class(TForm)
public
constructor Create(AOwner: TComponent; datoExtra: string); reintroduce;
end;
implementation
constructor TFormConPermisos.Create(AOwner: TComponent; datoExtra: string);
begin
inherited Create(AOwner);
end;
Entonces cuando instancio mi BPL el codigo de la funcion es asi:
function TModules.loadModule(moduleName: string): Integer;
var
AClass: TPersistentClass;
Formulario: TFormConPermisos;
begin
{* verifico que el modulo existe, junto con el archivo *}
if
FileExists(ExtractFilePath(ParamStr(0))+moduleName)
and
(moduleName <> '')
then
begin
{* Cargo el modulo a memoria *}
handle := LoadPackage(ExtractFilePath(ParamStr(0))+moduleName);
{* si es un modulo válido *}
if handle <> 0 then
begin
try
AClass := GetClass(CLASSBPL);
try
if AClass <> nil then
begin
LockWindowUpdate(Handle);
EnableAnimation(false);
Formulario := TFormConPermisos(AClass).Create(Application, 'MI DATO EXTRA') as TFormConPermisos;
EnableAnimation(true);
LockWindowUpdate(0);
Formulario.Show;
Result := 0;
end;
except
on E:Exception do
Result := -1;
end;
except
on E:Exception do
Result := -2;
end;
end
else
Result := -3;
end
else
Result := -4;
end;
Esta funciona asi: loadModule('miLibreria.bpl');
Cuando esto se ejecuta, y hace el Create dentro de este nuevo Create en el inherited Create(AOwner); da error de access violation, en realidad ya no se que probar, en google nunca parece que alguien halla realizado esto.
Esta bien la herencia que estoy haciendo?
De que otra forma puedo pasarle parametros?
Gracias y ya no jodo mas.
Si algun dia averiguo como es, va un tutorial para todos ustedes.
Como el titulo dice, quiero saber si lo que estoy haciendo tiene algun limite o no, ya que no me anda o yo soy un verdadero inutil.
Resulta que cuando cargo una libreria BPL necesito pasarle algun parametro al Create. Como es un TForm yo me hice mi clase:
type
TFormConPermisos = class(TForm)
public
constructor Create(AOwner: TComponent; datoExtra: string); reintroduce;
end;
implementation
constructor TFormConPermisos.Create(AOwner: TComponent; datoExtra: string);
begin
inherited Create(AOwner);
end;
Entonces cuando instancio mi BPL el codigo de la funcion es asi:
function TModules.loadModule(moduleName: string): Integer;
var
AClass: TPersistentClass;
Formulario: TFormConPermisos;
begin
{* verifico que el modulo existe, junto con el archivo *}
if
FileExists(ExtractFilePath(ParamStr(0))+moduleName)
and
(moduleName <> '')
then
begin
{* Cargo el modulo a memoria *}
handle := LoadPackage(ExtractFilePath(ParamStr(0))+moduleName);
{* si es un modulo válido *}
if handle <> 0 then
begin
try
AClass := GetClass(CLASSBPL);
try
if AClass <> nil then
begin
LockWindowUpdate(Handle);
EnableAnimation(false);
Formulario := TFormConPermisos(AClass).Create(Application, 'MI DATO EXTRA') as TFormConPermisos;
EnableAnimation(true);
LockWindowUpdate(0);
Formulario.Show;
Result := 0;
end;
except
on E:Exception do
Result := -1;
end;
except
on E:Exception do
Result := -2;
end;
end
else
Result := -3;
end
else
Result := -4;
end;
Esta funciona asi: loadModule('miLibreria.bpl');
Cuando esto se ejecuta, y hace el Create dentro de este nuevo Create en el inherited Create(AOwner); da error de access violation, en realidad ya no se que probar, en google nunca parece que alguien halla realizado esto.
Esta bien la herencia que estoy haciendo?
De que otra forma puedo pasarle parametros?
Gracias y ya no jodo mas.
Si algun dia averiguo como es, va un tutorial para todos ustedes.