Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: raul338 en Diciembre 16, 2010, 06:53:42 pm
-
Pues eso, Los ejecutables compilados en windows 7 misteriosamente no funcionan en windows xp :o Al menos a mi no.
Quisiera saber si a alguien mas le pasa y si sabe alguna solucion...
Encontre este post pero no me da solucion alguna: Are there problems with running vb6 executables on Windows XP that were compiled under Windows 7? (http://social.msdn.microsoft.com/Forums/en-US/vblanguage/thread/0d6e9d44-0cd8-4470-9246-08d5b38e6584/)
-
yo no diria que es problema del compilador, porque yo programo en w7 x64 desde hace mas de 1 año y los .exe generados corren excelente sobre todos los SO. Hice pruebas con el skinner de leandro en W98 (virtual), en WinME tambien y en W2k tengo un soft pedorro andando, ni hablar de XP donde funciona de pelos.
Fijate que el problema debe venir por el .manifest. Proba borrandolo. Si lo tenes como un recurso, sacalo tambien, y proba.
A mi eso siempre pero siempre me trajo problemas, hasta que cobein spawneo del cielo, y desarrollo un soft q genera manifest. De ahi yo lo extraigo, y lo guardo como recurso, y directamente lo compilo asi :P
saludos
-
Si, tienen que ver con algo del manifest...
Usaba el uclistview (que tiene el InitCommonControls) en un formulario que no llamaba a InitCommonControls, con manifest :-\
Ahora parece andar bien :)
-
coco, puedes explicar los pasos a seguir para generar el manifest del modo que mencionas, no entendi muy bien.
-
Es facil, bajate el Theme Patcher de cobein:
http://cobein.com/wp/?p=117 (http://cobein.com/wp/?p=117)
Elegis el .exe de tu proyecto, la descripcion, etc. y aplicas. Aca tenes tu .exe con el manifest ya generado, en recursos.
Ahora deberias extraerlo, usa el ResourceHacker o lo que quieras. Guardalo en un archivo .xml o .bin, da igual.
Despues tenes que agregar ese recurso a los que tiene el programa, por ejemplo, si tenes ya un .rc, podes agregarlo asi:
#define LANG_NEUTRAL 0x00
#define SUBLANG_NEUTRAL 0x00
/* ----------------------------------------------------------- */
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
/* ----------------------------------------------------------- */
0 ICON "main.ico"
/* ----------------------------------------------------------- */
1 24 "Manifest.bin"
Y luego "compila" los recursos con RC.EXE, lo que te genera un .res. Este archivo .res lo tiras a la lista de archivos en tu proyecto de VB6, y compilas el .exe y ya tenes los themes.
Ahora, si estas usando los .res del VB6, agrega el archivo como "datos", nombre "1" y tipo "24". Y compila, y estamos.
Saludos
-
esto es lo que uso cuando hago algo con vb6, resource.rc se compila con rc.exe
#define LANG_NEUTRAL 0x00
#define SUBLANG_NEUTRAL 0x00
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
1 24
MOVEABLE PURE
BEGIN
0x3f3c, 0x6d78, 0x206c, 0x6576, 0x7372, 0x6f69, 0x3d6e, 0x3122, 0x302e,
0x2022, 0x6e65, 0x6f63, 0x6964, 0x676e, 0x223d, 0x5455, 0x2d46, 0x2238,
0x7320, 0x6174, 0x646e, 0x6c61, 0x6e6f, 0x3d65, 0x7922, 0x7365, 0x3f22,
0x0d3e, 0x3c0a, 0x7361, 0x6573, 0x626d, 0x796c, 0x7820, 0x6c6d, 0x736e,
0x223d, 0x7275, 0x3a6e, 0x6373, 0x6568, 0x616d, 0x2d73, 0x696d, 0x7263,
0x736f, 0x666f, 0x2d74, 0x6f63, 0x3a6d, 0x7361, 0x2e6d, 0x3176, 0x2022,
0x616d, 0x696e, 0x6566, 0x7473, 0x6556, 0x7372, 0x6f69, 0x3d6e, 0x3122,
0x302e, 0x3e22, 0x0a0d, 0x2020, 0x613c, 0x7373, 0x6d65, 0x6c62, 0x4979,
0x6564, 0x746e, 0x7469, 0x0d79, 0x200a, 0x2020, 0x2020, 0x7620, 0x7265,
0x6973, 0x6e6f, 0x223d, 0x2e31, 0x2e30, 0x2e30, 0x2230, 0x0a0d, 0x2020,
0x2020, 0x2020, 0x7270, 0x636f, 0x7365, 0x6f73, 0x4172, 0x6372, 0x6968,
0x6574, 0x7463, 0x7275, 0x3d65, 0x5822, 0x3638, 0x0d22, 0x200a, 0x2020,
0x2020, 0x6e20, 0x6d61, 0x3d65, 0x6322, 0x696c, 0x6e65, 0x2274, 0x0a0d,
0x2020, 0x2020, 0x2020, 0x7974, 0x6570, 0x223d, 0x6977, 0x336e, 0x2232,
0x3e2f, 0x0a0d, 0x2020, 0x643c, 0x7365, 0x7263, 0x7069, 0x6974, 0x6e6f,
0x3c3e, 0x642f, 0x7365, 0x7263, 0x7069, 0x6974, 0x6e6f, 0x0d3e, 0x0d0a,
0x200a, 0x3c20, 0x2d21, 0x202d, 0x6e45, 0x6261, 0x656c, 0x5720, 0x6e69,
0x6f64, 0x7377, 0x5820, 0x2050, 0x6e61, 0x2064, 0x6968, 0x6867, 0x7265,
0x7420, 0x6568, 0x656d, 0x2073, 0x6977, 0x6874, 0x6320, 0x6d6f, 0x6f6d,
0x206e, 0x6f63, 0x746e, 0x6f72, 0x736c, 0x2d20, 0x3e2d, 0x0a0d, 0x2020,
0x643c, 0x7065, 0x6e65, 0x6564, 0x636e, 0x3e79, 0x0a0d, 0x2020, 0x2020,
0x643c, 0x7065, 0x6e65, 0x6564, 0x746e, 0x7341, 0x6573, 0x626d, 0x796c,
0x0d3e, 0x200a, 0x2020, 0x2020, 0x3c20, 0x7361, 0x6573, 0x626d, 0x796c,
0x6449, 0x6e65, 0x6974, 0x7974, 0x0a0d, 0x2020, 0x2020, 0x2020, 0x2020,
0x7974, 0x6570, 0x223d, 0x6977, 0x336e, 0x2232, 0x0a0d, 0x2020, 0x2020,
0x2020, 0x2020, 0x616e, 0x656d, 0x223d, 0x694d, 0x7263, 0x736f, 0x666f,
0x2e74, 0x6957, 0x646e, 0x776f, 0x2e73, 0x6f43, 0x6d6d, 0x6e6f, 0x432d,
0x6e6f, 0x7274, 0x6c6f, 0x2273, 0x0a0d, 0x2020, 0x2020, 0x2020, 0x2020,
0x6576, 0x7372, 0x6f69, 0x3d6e, 0x3622, 0x302e, 0x302e, 0x302e, 0x0d22,
0x200a, 0x2020, 0x2020, 0x2020, 0x7020, 0x6f72, 0x6563, 0x7373, 0x726f,
0x7241, 0x6863, 0x7469, 0x6365, 0x7574, 0x6572, 0x223d, 0x3858, 0x2236,
0x0a0d, 0x2020, 0x2020, 0x2020, 0x2020, 0x7570, 0x6c62, 0x6369, 0x654b,
0x5479, 0x6b6f, 0x6e65, 0x223d, 0x3536, 0x3539, 0x3662, 0x3134, 0x3434,
0x6363, 0x3166, 0x6664, 0x0d22, 0x200a, 0x2020, 0x2020, 0x2020, 0x6c20,
0x6e61, 0x7567, 0x6761, 0x3d65, 0x2a22, 0x0d22, 0x200a, 0x2020, 0x2020,
0x2f20, 0x0d3e, 0x200a, 0x2020, 0x3c20, 0x642f, 0x7065, 0x6e65, 0x6564,
0x746e, 0x7341, 0x6573, 0x626d, 0x796c, 0x0d3e, 0x200a, 0x3c20, 0x642f,
0x7065, 0x6e65, 0x6564, 0x636e, 0x3e79, 0x0a0d, 0x0a0d, 0x2020, 0x213c,
0x2d2d, 0x4420, 0x7369, 0x6261, 0x656c, 0x5720, 0x6e69, 0x6f64, 0x7377,
0x5620, 0x7369, 0x6174, 0x5520, 0x4341, 0x6320, 0x6d6f, 0x6170, 0x6174,
0x6962, 0x696c, 0x7974, 0x6820, 0x7565, 0x6972, 0x7473, 0x6369, 0x2073,
0x2d2d, 0x0d3e, 0x200a, 0x3c20, 0x7274, 0x7375, 0x4974, 0x666e, 0x206f,
0x6d78, 0x6e6c, 0x3d73, 0x7522, 0x6e72, 0x733a, 0x6863, 0x6d65, 0x7361,
0x6d2d, 0x6369, 0x6f72, 0x6f73, 0x7466, 0x632d, 0x6d6f, 0x613a, 0x6d73,
0x762e, 0x2232, 0x0d3e, 0x200a, 0x2020, 0x3c20, 0x6573, 0x7563, 0x6972,
0x7974, 0x0d3e, 0x200a, 0x2020, 0x2020, 0x3c20, 0x6572, 0x7571, 0x7365,
0x6574, 0x5064, 0x6972, 0x6976, 0x656c, 0x6567, 0x3e73, 0x0a0d, 0x2020,
0x2020, 0x2020, 0x2020, 0x723c, 0x7165, 0x6575, 0x7473, 0x6465, 0x7845,
0x6365, 0x7475, 0x6f69, 0x4c6e, 0x7665, 0x6c65, 0x6c20, 0x7665, 0x6c65,
0x223d, 0x6572, 0x7571, 0x7269, 0x4165, 0x6d64, 0x6e69, 0x7369, 0x7274,
0x7461, 0x726f, 0x2022, 0x6975, 0x6341, 0x6563, 0x7373, 0x223d, 0x6166,
0x736c, 0x2265, 0x3e2f, 0x0a0d, 0x2020, 0x2020, 0x2020, 0x2f3c, 0x6572,
0x7571, 0x7365, 0x6574, 0x5064, 0x6972, 0x6976, 0x656c, 0x6567, 0x3e73,
0x0a0d, 0x2020, 0x2020, 0x2f3c, 0x6573, 0x7563, 0x6972, 0x7974, 0x0d3e,
0x200a, 0x3c20, 0x742f, 0x7572, 0x7473, 0x6e49, 0x6f66, 0x203e, 0x0a0d,
0x0a0d, 0x2020, 0x213c, 0x2d2d, 0x4520, 0x616e, 0x6c62, 0x2065, 0x6957,
0x646e, 0x776f, 0x2073, 0x6956, 0x7473, 0x2d61, 0x7473, 0x6c79, 0x2065,
0x6f66, 0x746e, 0x7320, 0x6163, 0x696c, 0x676e, 0x6f20, 0x206e, 0x6956,
0x7473, 0x2061, 0x2d2d, 0x0d3e, 0x200a, 0x3c20, 0x7361, 0x766d, 0x3a33,
0x7061, 0x6c70, 0x6369, 0x7461, 0x6f69, 0x206e, 0x6d78, 0x6e6c, 0x3a73,
0x7361, 0x766d, 0x3d33, 0x7522, 0x6e72, 0x733a, 0x6863, 0x6d65, 0x7361,
0x6d2d, 0x6369, 0x6f72, 0x6f73, 0x7466, 0x632d, 0x6d6f, 0x613a, 0x6d73,
0x762e, 0x2233, 0x0d3e, 0x200a, 0x2020, 0x3c20, 0x7361, 0x766d, 0x3a33,
0x6977, 0x646e, 0x776f, 0x5373, 0x7465, 0x6974, 0x676e, 0x2073, 0x6d78,
0x6e6c, 0x3d73, 0x6822, 0x7474, 0x3a70, 0x2f2f, 0x6373, 0x6568, 0x616d,
0x2e73, 0x696d, 0x7263, 0x736f, 0x666f, 0x2e74, 0x6f63, 0x2f6d, 0x4d53,
0x2f49, 0x3032, 0x3530, 0x572f, 0x6e69, 0x6f64, 0x7377, 0x6553, 0x7474,
0x6e69, 0x7367, 0x3e22, 0x0a0d, 0x2020, 0x2020, 0x2020, 0x643c, 0x6970,
0x7741, 0x7261, 0x3e65, 0x7274, 0x6575, 0x2f3c, 0x7064, 0x4169, 0x6177,
0x6572, 0x0d3e, 0x200a, 0x2020, 0x3c20, 0x612f, 0x6d73, 0x3376, 0x773a,
0x6e69, 0x6f64, 0x7377, 0x6553, 0x7474, 0x6e69, 0x7367, 0x0d3e, 0x200a,
0x3c20, 0x612f, 0x6d73, 0x3376, 0x613a, 0x7070, 0x696c, 0x6163, 0x6974,
0x6e6f, 0x0d3e, 0x3c0a, 0x612f, 0x7373, 0x6d65, 0x6c62, 0x3e79
END
osea esa es mi plantilla de resource...
-
Es mas facil agregar al exe o .res con el XN Resource sin tener que recompilar denuevo :P
-
Claro, pero suponete que vos compilas seguido... tendrias que usar el XN o el Resource hacker cada vez que compilas... Pero agregando el .res, te ahorras de eso.
-
No probe asi, pero si agrego el .res (con XN o resource hacker) solo con el manifest (nada de icono ni nada) por alguna razon no me compila directo del vb, por eso lo agrego ya cuando esta listo, mientras uso un .manifest :P
-
Es que el compilador de vb no te va a compilar eso... Por tal razon, era el metodo del rc.exe...
-
Ahora si me complicaron, se nota que me falta bastante!
coco ya regenere mi .exe con el Theme Patcher luego con el ResHacker obtuve 2 archivos(nombre.rc y Data_1.bin) y ahi he quedado, como debo seguir, pedoname pero no entiendo.
Ahora veo que hay un par de metodos como el de raul338 el cual tampoco entiendo del todo?
Supongo que lo que se debe evitar es utilizar esas APIs y cargarlas al iniciar la aplicacion
Private Declare Function SetErrorMode Lib "kernel32" (ByVal wMode As Long) As Long 'Aplica el estilo de Windows XP
Private Declare Sub InitCommonControls Lib "Comctl32" () 'Aplica el estilo de Windows XP
-
Bueno, el .bin es el archivo Manifest.xml. Ahora necesitas hacer el .rc tuyo y compilarlo para que genere el .res. Para eso, crea un archivo nuevo (o usa el nombre.rc, da igual) y agregale esto (o modificale, si usas el mismo que genero el reshacker):
#define LANG_NEUTRAL 0x00
#define SUBLANG_NEUTRAL 0x00
/* ----------------------------------------------------------- */
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
/* ----------------------------------------------------------- */
0 ICON "main.ico"
/* ----------------------------------------------------------- */
1 24 "Manifest.bin"
Si te fijas, hay un "main.ico" que es el icono que va a tener la aplicacion. Si queres sobreescribir el que tenes vos como icono del programa, dejalo. Sino, borralo.
Luego este archivito .rc lo tenes que compilar, para eso, lo "arrastras" al archivo rc.exe, que seguramente esta en "C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin". Al hacer esto, si esta todo bien, te genera un .res en la misma carpeta del .rc. Este archivo .res lo agregas a la lista de archivos de tu proyecto en vb y listo.
Ahora, para que el codigo funcione, tenes que hacer lo siguiente. En un modulo, poner esto:
Private Declare Function LoadLibraryA Lib "kernel32" (ByVal szLib As String) As Long
Private Declare Function CallWindowProcA Lib "user32" (ByVal adr As Long, ByVal p1 As Long, ByVal p2 As Long, ByVal p3 As Long, ByVal p4 As Long) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal szFnc As String) As Long
Private Declare Function GetModuleHandleA Lib "kernel32" (ByVal szModule As String) As Long
Private Sub InitCommCtl()
Dim lngLib As Long
Dim lngAdd As Long
lngLib = GetModuleHandleA("comctl32.dll")
If lngLib = 0 Then
lngLib = LoadLibraryA("comctl32.dll")
End If
lngAdd = GetProcAddress(lngLib, "InitCommonControls")
If lngAdd = 0 Then
Exit Sub
End If
Call CallWindowProcA(lngAdd, 0, 0, 0, 0)
End Sub
Y tenes que llamar a ese sub ANTES de que el form se muestre, sino en xp vas a escuchar un beep cuando quieras abrir el programa, y no va a cargar.
Por ejemplo una buena idea es poner un sub Main, llamar a ese sub y luego cargar lo demas. (obviamente para que inicie por el sub main, tenes que cambiar la configuracion del proyecto en Proyecto-> Propiedades y cambiar Objeto inicial a Sub Main)
Quizas no todos tengan instalado el VisualStudio, el archivo rc.exe es muy probable que no lo tengan.
Entonces, para los que quieren tener ya todo listo, les dejo el archivo zipeado con lo siguiente:
* Manifest.bin (manifest de prueba)
* RC.exe y RCDLL.dll (compilador de recursos)
* Resources.rc (archivo .rc de recursos, ojo que tiene agregado el icono "main.ico" pero yo no subi ningun icono)
* buildres.bat (script automatico para compilar resources.rc a resources.res)
resource_override.zip (http://www.mediafire.com/file/6778k5b9n26m0aa/resource_override.zip)
Saludos
pd: gracias por el -1 !
-
Tengo otra consulta el titulo es "exes compil. en win7 no corren en XP" si hago lo que mencionas en XP no habra problemas de este tipo en vista o 7, digamos que seria una forma global para utilizar los manifest o me equivoco.
Gracias por la explicacion detallada, te acabo de dar un +1, otro user te habra dado el -1, saludos
-
Si, no digo que haya sido vos. No deberia haber problema ejecutando algo compilado en windows 7, pero yo sugeri que el problema venia por el lado de los manifest, que suena mas que logico.
No te hagas problemas.
saludos