Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-08-2007
dtomeysoto dtomeysoto is offline
Miembro
 
Registrado: dic 2005
Posts: 173
Poder: 19
dtomeysoto Va por buen camino
Sobre dll

Amigos del club:

Quisiera poner en una dll algunos procedimientos y funciones que he ido haciendo desde un tiempo para acá y que estoy necesitando constantemente cada vez que realizo un programa para mi empresa.

Nunca he hecho ninguna y me haría falta la ayuda de ustedes en cuanto a documentación o algún que otro consejo.

Además quisiera preguntarles porque yo en ocasiones para un programa con muchos mensajes para el usuario, creo una unit y debajo de la interface uso la palabra resourcestring y creo constantes con los textos de los mensajes que usaré en el programa. La pregunta si esto mismo lo puedo hacer en una dll. También cómo pudiera tener 2 versiones de esa misma dll (una con los mensajes en español y otra en ingles) para no tener 2 versiones del programa?

Saludos Damián.
Responder Con Cita
  #2  
Antiguo 21-08-2007
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
quizas este enlace te ayude, puse un ejemplo de un form con dlls
http://www.clubdelphi.com/foros/showthread.php?t=45136

respecto a lo de las dlls con idiomas me parece una excelente idea creo q si va a funcionarte
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 22-08-2007
dtomeysoto dtomeysoto is offline
Miembro
 
Registrado: dic 2005
Posts: 173
Poder: 19
dtomeysoto Va por buen camino
Ya revisé el hilo anterior y de ahi me fui metiendo en los otros hilos y aunque he ganado en conocimiento me quedan algunas dudas.

Por ejemplo hice la siguiente dll:

Código:
library ParadoxUtils;

uses SysUtils, BDE, DBTables, DB;

{$R *.res}

procedure PackTable(aAliasName, aTableName: PChar); export;
var
  PxStruct: CRTblDesc;
  db:TDataBase;
begin
  with TTable.Create(nil) do
  try
    DatabaseName := aAliasName;
    TableName := aTableName;
    Exclusive := True;
    Open;
    Db := Session.FindDatabase(aAliasName);
    Db.KeepConnection := True;
    Close;
    FillChar(PxStruct, SizeOf(PxStruct), 0);
    StrPCopy(PxStruct.szTblName, aTableName);
    PxStruct.bPack := True;
    if DbiDoRestructure(Db.Handle, 1, @PxStruct, nil, nil, nil, False) <> DBIERR_NONE
       then raise EDatabaseError.Create('Error en tabla' + aTableName);
    Db.Connected := False;
  finally
    Free;
  end;
end;

exports
  PackTable;

begin
end.
Este procedimiento lo que hace es hacerle un pack a una tabla paradox (lo tomé prestado de los trucos)

Ahora en mi aplicación hice la siguiente declaración:

Código:
interface
...
procedure PackTable(AliasName, TableName: PChar); far; external 'ParadoxUtils.dll';
...
y más adelante:

Código:
...
PackTable(PChar('GasTel'), PChar('REGISTRO.DB'));
...
Hasta aquí todo me ha funcionado bien pero me ha surgido la duda al revisar los hilos y ver el uso de las funciones LoadLibrary y FreeLibray en unos ejemplos para poner formas dentro de una dll. Estas funciones se usan solo en estos casos o yo en mi aplicación tendría que hacer algo parecido para usar el procedimiento que escribi en la dll.

Es decir cuando mi aplicación se está ejecutando y llego al punto de llamar a PackTable ella carga en memoria la dll, o cuando compilé mi aplicación se le incorporó el código desde la dll?

Es responsabilidad del programador o eso lo hace el SO?

Disculpe si soy extenso pero lei
Cita:
Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 26-08-2007
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
cuando trabajas con DLLs hay dos tipos de enlace: enlace temprano y enlace tardio, en tu caso al ponerle external has creado un enlace temprano es decir que se enlaza a la libreria una vez iniciado el módulo que contiene la declaración, la otra forma con LoadLibrary es enlace Tardio es decir te enlazas en el momento que tu veas por conveniente, cual es mejor? eso depende de tí, si sabes que DLLs vas a necesitar entonces usas enlace temprano, caso contrario mejor la otra forma.
__________________
self.free;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 23:48:26.


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
Copyright 1996-2007 Club Delphi