FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
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; |
#3
|
|||
|
|||
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. Ahora en mi aplicación hice la siguiente declaración: Código:
interface ... procedure PackTable(AliasName, TableName: PChar); far; external 'ParadoxUtils.dll'; ... Código:
... PackTable(PChar('GasTel'), PChar('REGISTRO.DB')); ... 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:
|
#4
|
||||
|
||||
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; |
|
|
|