Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Acceder a procedure en dpr desde unit (https://www.clubdelphi.com/foros/showthread.php?t=79715)

frangarrob 02-08-2012 16:25:39

Acceder a procedure en dpr desde unit
 
Hola a todos. Tengo el siguiente problema (EN DELPHI7). Mi programa principal es una librería, donde genero un componente sin incluirlo en ningún formulario.

---------------------------------------------------------------------------
Código Delphi [-]
library milibreria

uses miunidad;

type
 TMiclass = class
   sComp : TMiModulo;
   procedure proc(a,b,c:string);
   constructor Create;
   destructor Destroy; override;
end;

var...

constructor TMiclass.Create;
begin
  inherited;
end;

destructor TMiclass.Destroy;
begin
  sComp.Free;
  inherited;
end;

procedure TMiclass.proc(a,b,c:string);
var...
begin
  sComp.Iniciar;
  ....
end;

..................
(Otras funciones y procedimientos)
..................


end.
---------------------------------------------------------------------------
Ahora tengo una unit:

Código Delphi [-]
unit miunidad

interface

function func(d,e:integer);
begin

AQUÍ QUIERO LLAMAR AL PROCEDIMIENTO TMiClass.proc 

end;
---------------------------------------------------------------------------

Pues ese es el problema, que no hay forma de poder llamar al procedimiento desde la unit.

He probado de todo y nada...

A ver si alguien me puede iluminar para encontrar una solución.

Saludos y gracias anticipadas.

frangarrob 02-08-2012 16:29:26

Esta es la unit que lo había copiado mal:
-------------------------------------------------------------
Código Delphi [-]
unit miunidad

interface

function func(d,e:integer);

implementation

function func(d,e:integer);
begin

AQUÍ QUIERO LLAMAR AL PROCEDIMIENTO TMiClass.proc 

end;

Neftali [Germán.Estévez] 02-08-2012 17:11:44

¿Has probado a crear un método de clase para tu clase TMiclass, y luego exportar ese método desde la librería como cualquier otro?

frangarrob 02-08-2012 17:54:41

Cuando lo intento:
class procedure proc(a,b,c:string);

me dice:
Instance variable 'sComp' inaccessible here

Casimiro Notevi 02-08-2012 19:45:46

Recuerda poner los tags al código fuente, ejemplo:



Gracias :)

roman 02-08-2012 19:55:11

Cita:

Empezado por frangarrob (Mensaje 438707)
Cuando lo intento:
class procedure proc(a,b,c:string);

me dice:
Instance variable 'sComp' inaccessible here

Pero es que no queda claro qué quieres hacer. Por un lado dices:

Cita:

Código Delphi [-]
function func(d,e:integer);
begin

AQUÍ QUIERO LLAMAR AL PROCEDIMIENTO TMiClass.proc 

end;

cómo si quisieras usar ese método directamente desde la clase. Pero eso no lo puedes hacer a menos que sea un método de clase, pero un método de clase no puede usar atributos de la clase puesto que los atributos existen sólo cuando creas un objeto de esa clase.

Por favor, aclara.

// Saludos

maxinitto 03-08-2012 03:49:23

Tienes que crear en tu unit un objeto de ese tipo de clase y desde ahi deberia dejarte usar ese atributo (no olvides añadir esa libreria a la unit)...creo si no recuerdo mal

Por cierto ¿esta variable de donde viene tio?
Cita:

sComp : TMiModulo;
De todos modos si pones el codigo asi a medias no te podremos ayudar...

dec 03-08-2012 12:40:55

Hola,

Por embarrar un poco más el tema me gustaría añadir (según me parece) la posibilidad de usar las cláusulas "initialization" y "finalization". Quiere decirse, que, la propia unidad que declara la clase, puede a su vez declarar una variable del tipo de la clase, y, además crear y liberar la correspondiente instancia gracias a las mencionadas cláusulas "initialization" y "finalization". De esta forma, el método "SayHello()" de la siguiente clase de ejemplo:

Código Delphi [-]
unit MyCustomObject;

interface

type
  TMyCustomObject = class( TObject )
  public
    procedure SayHello();
  end;

var
  MyGlobalCustomObject : TMyCustomObject;

implementation

uses
  Winapi.Windows;

{ TMyCustomObject }

procedure TMyCustomObject.SayHello();
begin
  MessageBox( 0, 'Hello!', 'Hello!', 0 );
end;

initialization
  MyGlobalCustomObject := TMyCustomObject.Create();

finalization
  MyGlobalCustomObject.Free();

end.

... decíamos que el método "SayHello()" puede ser utilizado desde cualquier lugar con sólo añadir la anterior unidad, sin necesidad de preocuparse por la creación y destrucción de objeto alguno, tal que:

Código Delphi [-]
unit Unit2;

interface

uses
  Vcl.Forms;

type
  TForm2 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

uses
  MyCustomObject;

procedure TForm2.FormCreate(Sender: TObject);
begin
  MyGlobalCustomObject.SayHello();
end;

end.

No sé si esta otra "solución" valdrá de algo o no: yo sólo quería embarrar un poco más este hilo. :D


La franja horaria es GMT +2. Ahora son las 10:56:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi