Page 1 of 2

Otra forma de leer una DLL

PostPosted: Sat Oct 08, 2011 1:32 am
by devtuxtla
Hola FiveWinners.

Deseo reducir el numero de DLL que se acompaƱan en la instalacion de mi aplicacion en la PC de mi cliente; habra una forma de leer una DLL sin que esta exista en al directorio de mi aplicacion? Es decir, que esta DLL forme parte natural de mi aplicacion y se pueda cargar a memoria y usarla?

Por ejemplo podria ser, poner esta dll en un archivo MEMO o BLOB y que la misma aplicacion la ponga en momoria antes de usarla?

Asi cuando se instale el sistema en mi cliente, solo sera necesario instalar el EXE.

Alguien conoce el truco ?

Saludos

Re: Otra forma de leer una DLL

PostPosted: Sat Oct 08, 2011 3:17 am
by jll-fwh
Buenas;

Usa ficheros .RES.

Un saludo
JLL

Re: Otra forma de leer una DLL

PostPosted: Sat Oct 08, 2011 10:58 pm
by acuellar
Como indica JLL

Desde PelleC graba la DLL en RES y lo enlaza como un programas mas

Saludos,

Adhemar

Re: Otra forma de leer una DLL

PostPosted: Sun Oct 09, 2011 6:35 pm
by devtuxtla
Hola jll / acuerllar

Gracias por tu respuesta.

Sin embargo, como hago que las funciones definidas en el DLL se ejecuten, ya hice la prueba con Loadlibrary() y nada.

Como hago referencia a la DLL definida en el RES?

Saludos

Re: Otra forma de leer una DLL

PostPosted: Sun Oct 09, 2011 6:44 pm
by jMelgar

Re: Otra forma de leer una DLL

PostPosted: Sun Oct 09, 2011 7:04 pm
by devtuxtla
Hola jMelgar

Gracias por tu propuesta, pero no es la solucion, por ahora.

La aplicacion debe se capaz de hacerlo sin uso de herramientas externas.

Sin embargo, gracias por el tip.

saludos

Re: Otra forma de leer una DLL

PostPosted: Mon Oct 10, 2011 1:26 pm
by acuellar
devtuxtla

No tenes que cargar nada, ya que el .RES es parte del ejecutable.

Ejemplo:
Code: Select all  Expand view

DEFINE ICON oIcon RESOURCE 1

DEFINE DIALOG oDlg RESOURCE "DATOS"

DEFINE BUTTON OF oBtnBar RESOURCE "BOTON-SALIR1","","","BOTON-SALIR2" ACTION oDlg:End()

 


Saludos,

Adhemar

Re: Otra forma de leer una DLL

PostPosted: Mon Oct 10, 2011 7:48 pm
by devtuxtla
Hola aCuellar.

Gracias por contestar, pero no me refiero a recursos, si no a funciones definidas dentro de la DLL

Ejemplo:

DLL32 FUNCTION MyCode(Texto As LPSTR, FileName As LPSTR) AS LONG ;
PASCAL FROM "MyCode" LIB "MyCode.Dll"

La Dll esta implicita dentro del ejecutable, como un .RES

Sin embargo si llamo a la funcion dentro de DLL asi:

nRet:=MyCode("este es un mensaje")

El resutltado es que no encuentra la DLL.

Alguna idea ?

Saludos

Re: Otra forma de leer una DLL

PostPosted: Mon Oct 10, 2011 8:11 pm
by Daniel Garcia-Gil
Hola

puedes agregar la DLL al recurso (.res/rc) como datos binarios (RCDATA) desde el programa crea una rutina que lea el recurso y lo grabe en disco (fivewin proporciona la funcion desde la version 11.07 una funcion que te facilita esa extraccion y el grabado)

* New: function RCDataToFile( hInstance, cResName, cFileName ), save to file a binary resource,
hInstance [in, optional]: A handle to the module contains the resource. If this parameter is 0, the function searches the module used to create the current process.
cResName [in]: string with name of the resource.
cFileName [in]: string with name of file will be saved

Re: Otra forma de leer una DLL

PostPosted: Mon Oct 10, 2011 8:20 pm
by Daniel Garcia-Gil
Daniel Garcia-Gil wrote:puedes agregar la DLL al recurso (.res/rc) como datos binarios (RCDATA) desde el programa crea una rutina que lea el recurso y lo grabe en disco (fivewin proporciona la funcion desde la version 11.07 una funcion que te facilita esa extraccion y el grabado)


ojo... si tienes alguna libreria de importacion en relacion con la dll esta opcion no te servira, sino pruebalo a ver si te resulta por esta via

Re: Otra forma de leer una DLL

PostPosted: Mon Oct 10, 2011 8:25 pm
by devtuxtla
Hola Daniel.

Gracias por tu respuesta.

Sin embargo tengo una version anterior a la 11.07.

Pregurta: es posible leer el recurso de la DLL y ponerlo en momoria ? algo asi como loadlibrary() ?

Saludos

Re: Otra forma de leer una DLL

PostPosted: Mon Oct 10, 2011 8:36 pm
by Daniel Garcia-Gil
Hola

si no me equivoco, LoadLibrary, no carga toda la DLL en memoria, solo la direccion donde se encuentra las funciones contenidas en esta

Re: Otra forma de leer una DLL

PostPosted: Mon Oct 10, 2011 11:37 pm
by nnicanor
Hola,

Puedes hacer lo siguiente:

Compactas todas las DLL, EXE y OCX con PeCompact u UPX y luego con molebox haces un solo exe que empaquete tu en tu exe y todas las DLL que necesitas y los OCX.

PeCompact y Molebox son de uso comercial pero el costo es minimo.

Nosotros los usamos para nuestras aplicaciones basadas en MySQL con Tdolphin y Fastrepor, proporcionamos un link para descarga y actualizacion del EXE asi el exe esta disponible en cualquier parte en un navegador Web.



Slds,

Nicanor Maritinez

Re: Otra forma de leer una DLL

PostPosted: Mon Oct 10, 2011 11:54 pm
by nnicanor
Hola,

Me acabo de encontrar con una utilidad gratis se llama enigma virtual box, empaqueta un un solo exe las DLL, OCX.

http://enigmaprotector.com/en/aboutvb.html



Slds

Re: Otra forma de leer una DLL

PostPosted: Tue Oct 11, 2011 3:48 am
by Willi Quintana
Enigma funciona a 100...
Tengo un app.exe (comprimido con upx) + freeimage.dll + prev32.dll + libmysql.dll + config.cfg todo esto se convirtio en un solo EXE... (appnew.exe)
y funciona perfectamente...
http://enigmaprotector.com/en/aboutvb.html