Buenas,
quiero colocar un ejecutable en recursos tal y como se comentaba en otro
post de hace un tiempo .....
Lo hago de la siguiente manera (editando el fichero rc directamente):
DSFind RCDATA "DSFind.exe"
Tiene 100 kb......
No me da problemas al compilar pero no consigo ejecutarlo.........
METHOD ToolBar3Item1Click( oSender ) CLASS TForm1
local dsfinder
dsfinder:=FindResource(,"DSFind",10)
msgalert(dsfinder) // --->me muestra el handle, o sea que lo ha capturado
bien
execute(dsfinder)
LoadResource(dsfinder)
RETURN Nil
Gracias
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
exe desde recursos
exe desde recursos
Arturo,
con FindResource sólo consigues la dirección de memoria del recurso pero
nada más. Tienes que obtener los bytes del recurso, grabarlo en un archivo
y luego ejecutarlo.
Más o menos sería así (está escrito al vuelo y quizás necesite algún ajuste):
METHOD ToolBar3Item1Click( oSender ) CLASS TForm1
LOCAL hRes := FindResource( , "DSFind", 10 )
LOCAL pRes
LOCAL cExe := Application:cDirectory + "dsfind.exe"
LOCAL hFile
IF !Empty( hRes )
pRes := LoadResource( , hRes )
IF ! Empty( pRes )
hFile := FCreate( cExe )
FWrite( hFile, pRes, Len( pRes ) )
FClose( hFile )
IF File( cExe )
Execute( cExe )
ENDIF
ENDIF
ENDIF
RETURN Nil
Saludos,
José Lalín
con FindResource sólo consigues la dirección de memoria del recurso pero
nada más. Tienes que obtener los bytes del recurso, grabarlo en un archivo
y luego ejecutarlo.
Más o menos sería así (está escrito al vuelo y quizás necesite algún ajuste):
METHOD ToolBar3Item1Click( oSender ) CLASS TForm1
LOCAL hRes := FindResource( , "DSFind", 10 )
LOCAL pRes
LOCAL cExe := Application:cDirectory + "dsfind.exe"
LOCAL hFile
IF !Empty( hRes )
pRes := LoadResource( , hRes )
IF ! Empty( pRes )
hFile := FCreate( cExe )
FWrite( hFile, pRes, Len( pRes ) )
FClose( hFile )
IF File( cExe )
Execute( cExe )
ENDIF
ENDIF
ENDIF
RETURN Nil
Saludos,
José Lalín