Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - DLL - Repositorio - Orientación y consejo se solicita
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information DLL - Repositorio - Orientación y consejo se solicita

Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
glsaavedra
Buen usuario


Registrado: Dec 25, 2008
Mensajes: 7

Asunto: DLL - Repositorio - Orientación y consejo se solicita Responder citando

Nuevamente acudiendo a los amigos del foro ... gracias por la paciencia

Debido a que recién estoy dando los primeros pasos, esta vez es para pedirles que me orienten en la forma de encarar lo siguiente ....

Provengo de Clarion, todas mis rutinas comunes, las almacenaba en una DLL.
En Delphi comencé a utilizar la misma metodología, pero quisiera saber si en lugar de utilizar DLL, existe la manera de colocar esas "units" en el repositorio para poder heredarlas en diferentes proyectos.

Otra vez gracias a todos

Guillermo
MensajePublicado:
Dom Ene 04, 2009 11:09 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: DLL - Repositorio - Orientación y consejo se solicita Responder citando



Anuncios



glsaavedra escribió:
Nuevamente acudiendo a los amigos del foro ... gracias por la paciencia

Debido a que recién estoy dando los primeros pasos, esta vez es para pedirles que me orienten en la forma de encarar lo siguiente ....

Provengo de Clarion, todas mis rutinas comunes, las almacenaba en una DLL.
En Delphi comencé a utilizar la misma metodología, pero quisiera saber si en lugar de utilizar DLL, existe la manera de colocar esas "units" en el repositorio para poder heredarlas en diferentes proyectos.

Otra vez gracias a todos

Guillermo


Sí podrías, por ejemplo, podrías tener una Unidad de Delphi llamada "Procedimientos.pas" con las funciones y procedimientos útiles para cualquier proyecto, por ejemplo:

Contenido de ejemplo de la Unidad "procedimientos.pas":
Código:

unit UnidadProcedimientos;

interface

uses inifiles, SysUtils, DateUtils;

var
  function anoMesDia (fecha : TDateTime) : string;
  procedure esCadINI (clave, cadena, valor : string);
  function leCadINI (clave, cadena : string; defecto : string) : string;

     
implementation

function anoMesDia (fecha : TDateTime) : string;
var
  ano, mes, dia, hora, minuto, segundo, milisegundo : Word;
  txMes, txDia : string;
begin
  DecodeDateTime(fecha, ano, mes, dia, hora, minuto, segundo, milisegundo);
  txMes := inttostr(mes);
  if Length (txMes) = 1 then
    txMes := '0' + txMes;
  txDia := inttostr(dia);
  if Length (txDia) = 1 then
    txDia := '0' + txDia;
  Result := inttostr(ano) + '-' + txMes + '-' + txDia;
end;

//Lee una cadena de texto de un INI
function leCadINI (clave, cadena : string; defecto : string) : string;
begin
  with tinifile.create (changefileext(paramstr(0),'.INI')) do
  try
    result := readString (clave, cadena, defecto);
  finally
    free;
  end;
end;


//escribe una cadena de texto en un INI
procedure esCadINI (clave, cadena, valor : string);
begin
  with tinifile.create (changefileext(paramstr(0),'.INI')) do
  try
    writeString (clave, cadena, valor);
  finally
    free;
  end;
end;


end.


A continuación, para que puedas utilizar estos procedimientos y funciones en un proyecto, agrega esta unidad al proyecto, desde "Project" - "Add to project". Luego, en los formularios (Form), unidades (unit) o módulos (DataModule) que quieras utilizar alguna función o procedimiento de la unidad "procedimientos", en el USES tendrás que agregar "procedimientos", desde el menú "File" - "Use unit...":

Código:


  .........

  public
    { Public declarations }
  end;

var
  formMenuPrincipal: TformMenuPrincipal;

implementation

uses UnidadProcedimientos;

{$R *.dfm}

procedure TformMenuPrincipal.ejecutarFichero ();
var
  resEj : THandle;
  parametros, parametrosP1, parametrosP2 : string;
begin
  ...........


Para usar alguna de las funciones o procedimientos de la unidad "procedimientos" es suficiente con poner su nombre, por ejemplo:

Código:

  txtCarpetaDestino.Text :=
      leCadINI('Copia', 'Carpeta de destino', '');


Esta es una forma de hacerlo, quizás menos "engorrosa" que utilizar librerías DLL. Aunque tienes que tener en cuenta que la ventaja de utilizar DLL es que lo que contienen no "ocupa memoria" si no la utilizas y, además, el fichero ejecutable del proyecto será más pequeño.
MensajePublicado:
Vie Ene 16, 2009 9:30 am
Top of PageVer perfil de usuario
glsaavedra
Buen usuario


Registrado: Dec 25, 2008
Mensajes: 7

Asunto: Responder citando

Muchas gracias, muy clara tu explicación, en especial para un novato en Delphi como yo

Guillermo
MensajePublicado:
Vie Ene 16, 2009 12:36 pm
Top of PageVer perfil de usuario
glsaavedra
Buen usuario


Registrado: Dec 25, 2008
Mensajes: 7

Asunto: Responder citando

Continúo con el tema ....

Siguiendo tu explicación, generé una Unit, la cual luego incluí en mi proyecto, con esto logré reemplazar la dll.
Mantuve el mismo nombre de procedimiento. No tengo errores de sintaxis, dado que el IDE así lo indica.

Cuando compilo, se genera el error siguiente:

[DCC Error] UFormClientes.pas(132): E2003 Undeclared identifier: 'ValidarCamposTRz'

Me lo marca en todas las llamadas al procedimiento, que existe en la unit.

No me explico que puede ocurrir, espero haberme explicado lo más posible.

Saludos y gracias

Guillermo
MensajePublicado:
Lun Ene 26, 2009 8:48 pm
Top of PageVer perfil de usuario
salvica
Excelente usuario


Registrado: Jan 20, 2009
Mensajes: 16

Asunto: Responder citando

glsaavedra escribió:
Continúo con el tema ....

.....

Cuando compilo, se genera el error siguiente:

[DCC Error] UFormClientes.pas(132): E2003 Undeclared identifier: 'ValidarCamposTRz'

Me lo marca en todas las llamadas al procedimiento, que existe en la unit.

.....


Hola glsaavedra, si has seguido tal cual el ejemplo de alonsojpd, hay un ligero error:
Código:

unit UnidadProcedimientos;

interface

uses inifiles, SysUtils, DateUtils;

var
  function anoMesDia (fecha : TDateTime) : string;
  procedure esCadINI (clave, cadena, valor : string);
  function leCadINI (clave, cadena : string; defecto : string) : string;

     
implementation

el var NO DEBE aparecer, ya que te estará tomando las funciones siguientes como nombres de variables

Saludos
salvica
MensajePublicado:
Mar Ene 27, 2009 9:52 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Responder citando

Muchas gracias, salvica, efectivamente, ese "var" sobra, pues es para declarar variables, no funciones.
MensajePublicado:
Mar Ene 27, 2009 10:22 pm
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A