Ver Mensaje Individual
  #4  
Antiguo 03-04-2008
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Reputación: 18
rolandoj Va por buen camino
Algo de explicación conceptual

Hola,

Un DLL se maneja diferente a una aplicación. Cuando usas un TDataModule tanto la creación del mismo como su destrucción debes hacerlo por tí mismo. Digamos que agregastes una unidad en la que creates tú TDataModule; ten en cuenta que al hacerlo, en realidad lo que estás definiendo es una clase descendiente de TDataModule, a la que llamastes Datos. Tú unidad debe lucir algo como esto:

Código Delphi [-]
type
  TDatos = class(TDataModule)
  Private
      FAlgo: Integer; 
  Public
      Property Algo:Integer Read FAlgo Write FAlgo;
  End;
 
Var 
    Datos: TDatos;

Lógicamente "Algo" es solo un ejemplo.

Hay varias consideraciones de metodología a hacer. Sin entrar en detalles, es aconsable borrar el :

Código Delphi [-]
 
Var 
    Datos: TDatos;

De la unidad que has creado, y en su lugar emplearlo como variable local de la rutina que deba usarla; esto es para facilitar programación multihilos en caso de que más adelante se desarrolle con ella.

Las rutina que la use debe ser algo como esto:

Código Delphi [-]
Function HacerAlgo(ACode:Integer):Integer;
Var 
    Datos: TDatos;  
Begin
       Datos := Nil;
       Try
           Datos := TDatos.Create(Nil);
           Datos.Algo := ACode;
           ....
           HacerAlgo := Datos.Algo;
       Finally
           Datos.Free; 
       End;
End;

El parámetro Nil del constructor le dice a la rutina que la responsabilidad de liberar al componente es de la propia rutina. Es importante que tengas en cuenta que aquí no puedas pasarle un parámetro Self, u otro componente, proveniente del programa principal porque se trata de áreas de memoria diferentes.

Bueno, hay bastante teoría que podríamos anotar al respecto; pero espero que esto te ayude a orientarte.

Ahora bien, te sugiero leer primero toda la teoría de manejo de DLLs y en especial la comunicación de parámetros entre el programa principal y el DLL, así como lo referente a manejo de memoria.

Última edición por rolandoj fecha: 03-04-2008 a las 00:56:25. Razón: Problema con las banderas de código Delphi
Responder Con Cita