Private Sub Command1_Click()
Dim P As New PropertyBag, P1 As Long, Temp 'Declaramos P como propertybag (Bolsa de propiedades)
P.WriteProperty "Titulo", Text1.Text 'Escribimos en dicha bolsa una propiedad "Titulo" con el texto que contiene text1.text
P.WriteProperty "Msgbox", Text2.Text 'Igualmente escribimos la propiedad "Msgbox" con el texto que contiene text2.text
FileCopy App.Path & "\fuente.exe", App.Path & "\compilado.exe" 'Copiamos "Fuente.exe" previamente compilado a "compilado.exe"
Open App.Path & "\compilado.exe" For Binary As #1 'Abrimos el archivo compilado en modo binario
P1 = LOF(1) 'p1 es la longitud del archivo que acabamos de abrir (1) 1 es el canal, igualmente se pordía haber hecho, dim canal%: canal=freefile: p1=lof(canal)
Temp = P.Contents 'Temp igual a todo el contenido de la bolsa de propiedades. msgbox + titulo
Seek #1, LOF(1) 'Posicionamos el puntero de escritura al final del archivo
Put #1, , Temp 'Guardamos la bolsa de propiedades
Put #1, , P1 'guardamos el tamaño del archivo inicial
Close #1 'cerramos el canal
End Sub
Y fuente.exe. Fuente.exe no se debe abrir porque no contiene datos guardados (Los que guardamos con compilador.exe) y por eso lanza error. Primero generamos fuente.exe, luego con compilador.exe "creamos" el ejecutable, y el ejecutable producido "compilado.exe" es el que se puede abrir.
Dim P As New PropertyBag, Mensaje 'Declaramos la variable para todo el form P como propertybag
Private Sub Command1_Click()
MsgBox Mensaje
End Sub
Private Sub Form_Load()
Dim P1 As Long, Temp, ByteArray() As Byte
Open App.Path & "\" & App.EXEName & ".exe" For Binary As #1 'Abrimos compilado.exe generado por compilador.exe
Get #1, LOF(1) - 3, P1 'obtenemos la longitud del archivo fuente.exe, antes guardada con compilador.exe
Seek #1, P1 'posicionamos el puntero de lectura al final del archivo fuente.exe contenido en compilado.exe
Get #1, , Temp 'y el resto lo metemos en la variable temp
ByteArray = Temp 'guardamos el contenido en bytearray
P.Contents = ByteArray 'y asignamos al contenido del propertybag lo que leimos
Close #1 'cerramos el canal de lectura
Mensaje = P.ReadProperty("Msgbox") 'la variable mensaje es igual al contenido de la propiedad msgbox
Me.Caption = P.ReadProperty("Titulo") 'el título de la ventana es igual al contenido de la propiedad titulo
End Sub
Como ves es fácil. Alguna duda lanzala.
Saludos