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
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
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