Ver Mensaje Individual
  #4  
Antiguo 23-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. No sé si voy a saber ayudarte, porque me parece que quedan bastantes datos en el aire. Por ejemplo, dices que quieres incluir en la librería "DLL" una especie de base de datos... bien. Supongamos que sea un archivo de "texto plano". Lo supongo así, para responderte como lo haré a continuación.

Anteriormente has visto en el ejemplo que adjunté más arriba cómo hacemos uso de un procedimiento para extraer el archivo de texto de la librería "DLL", más concretamente, del archivo de recursos que añadimos antes a dicha librería. Utilizamos para ello, entre otras, la clase "TFileStream", que nos permitió crear el archivo de texto que conseguimos gracias a la clase "TResourceStream".

Bien. Se me ocurre ahora que utilizes la clase "TStringStream", de tal manera que no sea preciso extraer el archivo de texto de la librería "DLL", y, sin embargo, puedas trabajar con el contenido del mismo. Para esto que te digo bastaría que cambiaras el código de la librería "DLL" por el siguiente:

Código Delphi [-]
  library Ejemplo;
  
  uses
    Windows,
    Dialogs,
    SysUtils,
    Classes;
  
  {$R Recursos.res}
  
  function MostrarDatos(const ResName: string) : string;
  var
    sStream: TStringStream;
    rStream: TResourceStream;
  begin
    Result := '';
    rStream := TResourceStream.Create(hInstance, ResName, RT_RCDATA);
    try
      sStream := TStringStream.Create('');
      try
        sStream.CopyFrom(rStream, 0);
        Result := sStream.DataString;
      finally
        sStream.Free;
      end;
    finally
      rStream.Free;
    end;
  end;
  
  begin
    ShowMessage(MostrarDatos('archivotexto'));
  end.
Como podrás ver, en este caso utilizamos una función para extraer el contenido del archivo de texto incluido en el archivo de recursos. En dicha función, respecto del anterior procedimiento, no hay más cambios sino el que esta vez utilizamos la clase "TStringStream" en lugar de la clase "TFileStream".

Si haces uso de la aplicación "de pruebas", esta vez no será extraído ningún archivo de la librería "DLL", sino, simplemente, por mor del procedimiento "ShowMessage", te será mostrado el contenido de dicho archivo de texto. En este caso lo mostramos, pero, tú puedes hacer con el contenido del mismo lo que te sea menester.

Es decir, habría que tratar de trabajar con el contenido de dicho archivo de texto en memoria, sin necesidad de extraer el mismo de la librería "DLL". Pero, ya digo que no sé si esto se parece algo más a lo que necesitas. Si no es así, por favor, expláyate cuanto puedas acerca de las características de la solución que quieres lograr, con el fin de que pueda ayudársete de la mejor forma posible.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 23-10-2005 a las 06:17:27. Razón: Corrección del texto.
Responder Con Cita