Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

transporte de ficheros en un ejecutable
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: transporte de ficheros en un ejecutable Responder citando

Hola a todos...
He intentado llevar dentro de mi ejecutable un archivo (uno es una imagen JPG, y otro es otro pequeño programa), pero nada...
lo intenté con
OleContainer1->LoadFromFile...
y para descargarlo,
OleContainer1->SaveAsDocument...
OleContainer1->SaveToFile...
Lo bueno de todo esto, es que me descarga el fichero en el lugar que yo le digo, pero despues al querer abrirlo, si es el JPG, el programa que utilizo (Corel) me dice que no lo reconce, y el programilla que descargo tampoco lo puedo ejecutar ya que me da un error.
Puede ser (seguro) que no utilizo la técnica adecuada para transportar objetos de este tipo, por lo que agradecería que me ayudaran.
GRACIAS
Volver arriba
Mensaje    Asunto: transporte de ficheros en un ejecutable Responder citando

Hola WBuilder:

Para incluir otros ficheros dentro de tu programa tienes que usar un fichero de recursos .RC (.RES compilado). Por ejemplo, vamos a ver paso a paso como incluir dentro del ejecutable de nuestro proyecto un fichero .jpg y otro .exe:

1.- Copiamos al directorio de nuestro proyecto un fichero .jpg al que llamaremos "foto.jpg" y copiamos un ejecutable también en el mismo directorio, por ejemplo vamos a copiar el "notepad.exe" que encontramos en el directorio de Windows.


2.- Creamos en el mismo directorio un fichero con extension .RC al que llamaremos "MisRecursos.RC", dentro de el ponemos las siguientes lineas:

  /* MisRecursos.RC */
  MI_IMAGEN RCDATA "foto.jpg"
  MI_PROGRAMA RCDATA "notepad.exe"


3.- A continuación vamos a añadirlo a nuestro proyecto, para ello vamos al menú a la opción "Project >> Add to Project" y escribimos o seleccionamos ahí nuestro fichero "MisRecursos.RC".


4.- Y por ultimo vamos a ver como usarlo dentro de nuestro código:

 - Por ejemplo si queremos cargar la imagen en un TImage:

    // Añadir: #include <jpeg.hpp>
    // Añadimos un TImage y un TButton
    // y al OnClick del mismo lo siguiente
    TJPEGImage *jpg = new TJPEGImage;
    jpg->LoadFromStream( &TResourceStream(0, "MI_IMAGEN", RT_RCDATA) );
    Image1->Canvas->Draw(0, 0, jpg);
    delete jpg;

 - o bien si queremos extraer los ficheros:

    // Para probar vamos a copiarlos en c:\
    // Añadimos un TButton
    // y al OnClick del mismo lo siguiente
    TResourceStream(0, "MI_IMAGEN", RT_RCDATA).SaveToFile("c:\\foto.jpg");
    TResourceStream(0, "MI_PROGRAMA", RT_RCDATA).SaveToFile("c:\\notepad.exe");


Espero que sea lo que buscas y que se entienda bien.
Saludos.

Volver arriba
Mensaje    Asunto: transporte de ficheros en un ejecutable Responder citando

Muchisimas gracias _Leo.
Esto me sevirá, lo he entendido muy bién todo.
Lo que realmente buscaba era tener sólo un ejecutable sin ningún archivo colgando.
Te agradezco tu interés y que sepas que esto es una gran ayuda.
Volver arriba
Mensaje    Asunto: transporte de ficheros en un ejecutable Responder citando

una observacion en el codigo.
Image1->Canvas->Draw(0, 0, jpg);
se puede hacer de la siguiente forma que es mas comoda
Image1->Add(jpg);
Volver arriba
Mensaje    Asunto: Responder citando

A mi no me funciona Confused me da el siguiente error:
Código:

[RC Error]MisRecursos.RC(1):
[RC Fatal Error]MisRecursos.RC(1): Compile

Y si incluyo el archivo de recursos #include "MisRecursos.RC"
Código:

  [C++ Error] MisRecursos.rc(2): E2141 Declaration syntax error
  [C++ Error] Unit1.h(26): E2141 Declaration syntax error
  [C++ Error] Unit1.cpp(12): E2141 Declaration syntax error
  [C++ Error] Unit1.cpp(14): E2090 Qualifier 'TForm1' is not a class or namespace name
  [C++ Error] Unit1.cpp(14): E2040 Declaration terminated incorrectly


Tanto uno como el otro saltan en la línea
Código:
 
MI_IMAGEN RCDATA "foto.jpg"

_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Debe de haber algún paso que no estas haciendo correctamente.

Cita:
Y si incluyo el archivo de recursos #include "MisRecursos.RC"

En ningún sitio dice que haya que hacer eso.

Sin ver lo que estas haciendo es difícil saber que pasa, si sigues sin encontrar el problema y quieres que le eche un vistazo:

leosoft ARROBA telefonica PUNTO net
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Acabo de darme cuenta de que estos errores ocurrieron justo después de hacer pruebas con el visual studio de miserosoft Mad . Acabo de formatear y ahora SI FUNCIONA. perdonad las molestias. Embarassed
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Pregunta... puedo meter un exe, mas grande que el ejectuable.. o un compresor y utilizarlo.. como si fuera una llamada a un Form, es decir, como parte de la aplicacion.. o estos se ejecutan, de manera independiente.?, como si se tratara de la siguiente llamada
Código:
ShellExecute(Application,"open","Calc.exe",NULL,NULL,SW_SHOWNORMAL);


lo que quiero decir con esto.. es si al ejecutar una aplicacion.. contenida en un Resource, y al cerrar el Form, prinicpal.. se cierran los dos.. o solo el form principal y la otra se ejecuta de manera independiente?

de Antemano Gracias...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

1. Puedes meter archivos más grandes que el ejecutable.

2. Los archivos son independientes ya que realmente los estamos extrayendo y copiando en otra parte del disco duro, o sea, extraemos otro ejecutable, lo ejecutamos y luego cerramos el ejecutable principal y el que hemos extraído sigue ejecutándose.

3. Podemos meter un .zip y descomprimirlo directamente sin tener que copiar primero el .zip a alguna parte del disco duro antes. Un ejemplo de esto:

http://www.codeproject.com/file/zip_utils.asp
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Re: transporte de ficheros en un ejecutable Responder citando

_Leo escribió:
Para incluir otros ficheros dentro de tu programa tienes que usar un fichero de recursos .RC (.RES compilado).


¿Y ese fichero de Recursos, Leo, puede no estar incluido en el ejecutable?
Supongamos que quiero incluir 200 bmp's. A razón de entre 0.5 y 1 MB or fichero tenemos entre 100 y 200 MB de ejecutable.
¿Hay alguna forma de hacer eso? porque si lo incluyo por ejemplo en un ImageList estamos en las mismas.

Un saludo.
JC
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola. He probado el código de _Leo y no me funciona. ¿Podéis colgar algún mini ejemplo completo, por favor?
Otra opción que he pensado es hacer una DLL de recursos exclusivamente. ¿Es posible? Si la respuesta es positiva... ¿cómo se haría?

Muchas gracias.
_________________
Nunca digas "Es imposible" sin intentarlo antes.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Leo el codigo que dejas para la imagen me sale sin ningun problema pero que me hago si deso cargar en mi propia aplicacion un video o musica que estan como recursos...?
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

ifrit escribió:
que me hago si deso cargar en mi propia aplicacion un video o musica que estan como recursos...?

Es lo mismo sea el tipo de archivo que sea, lo único que se necesita es que el código que uses para reproducir la música o el video sea capaz de leer el recurso directamente en memoria..
Un ejemplo reproduciendo un .WAV:
https://cppbuilder.es/viewtopic.php?t=9061
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

ok _leo tienes toda la razon , no busque bien en el foro, pero he tratado de cargar un avi y un mpge y nada aun no lo logro ???
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hay otra forma un poco mas a lo antiguo, con otro programa anexas al final del ejecutable lo que desees en mi caso fue una dll, el ejecutable se abre a si mismo en modo solo lectura y se extraen los bites a partir del ultimo mas uno del ejecutable no parcheado a un archivo en disco y luego se manda a ejecutar con shellexecute por ejemplo. Un poco mas complicado es reinsertar el archivo al ejecutable con los cambios realizados pero es posible.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.