FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Otra forma de leer una DLL
Posts: 392
Joined: Tue Jul 29, 2008 01:55 PM
Re: Otra forma de leer una DLL
Posted: Wed Oct 12, 2011 01:32 AM

Hola Willi.

Ya habia probado esta opcion, sin embargo el .EXE generado, es detectado por algunos antivurus (www.avira.com) como un virus.

Por lo tanto, por ahora y mientras no corrigan esta problema no podemos usarlo.

Tambien, para el conocimiento de quienes usan esta herramienta, ellos comentan que todo lo hacen en memoria, sin embargo, cada vez que utilizan un DLL, esta se desempaca en area temporal de usuario, asi que la DLL si se escribe en el HDD, aun que sea en un area tempoal.

Sin embargo es una buena alternativa.

Alguna otra idea ?

Saludos

Visite Chiapas, el paraiso de México.
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Otra forma de leer una DLL
Posted: Wed Oct 12, 2011 07:09 PM
devtuxtla

Hasta que actualices tu FWH podes salir con esta función de Biel y modificada por Daniel para restaurar el archivo incrustado en una direccion especifica.

En el programa principarl
Code (fw): Select all Collapse
Function Main()
  If !FILE("C:\WINDOWS\FREEIMAGE.DLL")
    RESTFILEI( "C:\WINDOWS\FREEIMAGE.DLL" )
  Endif
  If !FILE( "C:\WINDOWS\PREV32.DLL" )
     RESTFILEP( "C:\WINDOWS\PREV32.DLL" )
  Endif
*....
Return
*
#pragma BEGINDUMP
#include <Windows.h>
#include <mapiwin.h>
#include <hbApi.h>

HB_FUNC( RESTFILEI )
{
   HRSRC res=FindResource(NULL,"FREEIMAGE",RT_RCDATA);
   DWORD bytesWritten;
   INT size=SizeofResource(NULL,res);
   HGLOBAL hRes=LoadResource(NULL,res);
   unsigned char *pRes=(unsigned char *)LockResource(hRes);
   const char * name = hb_parc( 1 );
   HANDLE hFile=CreateFile( name, GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL); 
   WriteFile(hFile, pRes,size,&bytesWritten,NULL);
   CloseHandle(hFile);
}
#pragma ENDDUMP
**
#pragma BEGINDUMP
#include <Windows.h>
#include <mapiwin.h>
#include <hbApi.h>

HB_FUNC( RESTFILEP )
{
   HRSRC res=FindResource(NULL,"PREV32",RT_RCDATA);
   DWORD bytesWritten;
   INT size=SizeofResource(NULL,res);
   HGLOBAL hRes=LoadResource(NULL,res);
   unsigned char *pRes=(unsigned char *)LockResource(hRes);
   const char * name = hb_parc( 1 );
   HANDLE hFile=CreateFile( name, GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL); 
   WriteFile(hFile, pRes,size,&bytesWritten,NULL);
   CloseHandle(hFile);
}
#pragma ENDDUMP


El archivo .RC
Code (fw): Select all Collapse
ICON_1 ICON "MIAPLICA.ICO"
FREEIMAGE RCDATA "D:\SISTEMAS\DLLS\FREEIMAGE.DLL"
PREV32 RCDATA "D:\SISTEMAS\DLLS\PREV32.DLL"


Lo interesante seria mandar otro parametro que lleve el nombre del RCDATA a la función para no crear varias, no se como se hace.
Ej: RESTFILE("C:\WINDOWS\FREEIMAGE.DLL","FREEIMAGE")

No olvides comprimir tus archivos con UPX para que el .EXE no sea muy grande.

Espero te sirva.

Saludos,

Adhemar
Saludos,



Adhemar C.

Continue the discussion