Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Necesito Vuestra Ayuda Para Despejar Una Duda

Iniciado por [EX3], 08 de Mayo de 2005, 07:23:54 AM

« anterior - próximo »

[EX3]

 Wenas. Hace poco estuve trasteando con algunas funciones del API de windows, probando ciertas funciones en la MSDN (y tambien el API-Guide) y ver su utilidad, y resulta que me tope dos funciones muy interesantes, sobre todo para alguien como yo que programa en VB. Las funciones en cuestion son DllRegisterServer() y DllUnregisterServer(). Dichas funciones instalan o registran en el sistema cualquier componente ActiveX, un OCX por ejemplo especificandolo en la propia declaracion de la funcion, por ejemplo:
Declare Function RegistrarMSScript Lib "msscript.ocx" Alias "DllRegisterServer" () As Long 'Instala M$ Script control en el sistema.
Declare Function DesintalarMSScript Lib "msscript.ocx" Alias "DllUnregisterServer" () As Long 'Desisntala el componente.

Declare Function Registrar_dxlib32 Lib "dx_lib32.dll" Alias "DllRegisterServer" () As Long 'Instala dx_lib32 en el sistema.
Declare Function Desinstalar_dxlib32 Lib "dx_lib32.dll" Alias "DllUnregisterServer"  () As Long 'Desisntala el componente.

Ahora por ejemplo ya no tengo que instalar la dx_lib32 para que funcionen mis programas, es mas, ahora puedo distribuir programas que usen versiones diferentes de la libreria sin tener que reinstalarla como ocurria antes. Solo tengo que meter la dll o el componente ActiveX junto al EXE en la misma carpeta y listos, algo muy comodo para mi al menos.

Pues bien, mi duda viene a que se me ha ocurrido apuntar mas alto aun y se me paso por la cabeza la disparatada idea de saber si seria posible tambien hacer esto:
Declare Function RegistrarVBRuntime Lib "msvbvm60.dll" Alias "DllRegisterServer" () As Long 'Instala la runtime del VB en el sistema.
Declare Function DesintalarVBRuntime Lib "msvbvm60.dll" Alias "DllUnregisterServer" () As Long 'Desisntala el componente.

Ya sabeis por donde van los tiros, verdad? Mi duda es la siguiente, basandome en la runtime de la version 4 de VB en la que dicha libreria simplemente tenia que estar presente junto al ejecutable en el mismo directorio para que dicho ejecutable se pudiese ejecutar, quisiera saber si con la runtime de la version 6 ocurre lo mismo. Como no dispongo de un equipo limpio, sin la msvbvm60.dll, (y no tengo el ordenador en condiciones de instalar una maquina virtual :() no puedo probar dicha teoria, asi que acudo a vosotros, a cualquier persona que tenga instalado Window98 o 95 incluso, por ejemplo, y que no tenga la msvbvm60.dll presente en el sistema para que pruebe un sencillo programa que trae consigo la libreria.

http://dxlib32.se32.com/private/HelloWorld...WithRuntime.zip

Si mi teoria es correcta significara que existe la opcion de distribuir aplicaciones pequeñas escritas y compiladas con VB6 en un simple ZIP sin necesidad de crear instaladores y en muchos casos esto se agradece.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

tewe76

 Igual te arriesgas a petar la máquina, pero ¿no podrías hacer un regsvr32 para unregistrar msvbvm60.dll y así poder probarlo en tu propio PC? O, más simple (y más cutre y quizás más arriesgado :)), busca el archivo msvbvm60.dll de System y renómbralo a "prueba_msvbvm60.dll" para que no lo encuentre.
Yo no lo hago porque no sé si es una barbaridad lo que estoy diciendo, y no estoy yo para hacer barbaridades en mi PC :D

Por otro lado, esas API que comentas suenan interesantes, pero, ¿no se puede hacer también simplemente con Shells de regsvr32? Y además, ten mucho cuidado con lo de desinstalar, porque puedes desinstalar cosas que utilicen otras aplicaciones y le desgracias la máquina al usuario  O_O  
Tewe
www.TAPAZAPA.com : Funny and easy to play games for all ages! - Fairy Match - Brain Crash
www.LaRebelionDelBiberon.com : Experiencias de unos padres primerizos

fiero

 Hola, tengo un w98 limpio para pruebas (es el único que no tiene la libreria instalada).

El ejecutable proyecto1.exe da un error "No se encontró el archivo .DLL requerido, MSVBVM60.DLL"

Si renombro el MSVBVM60_.DLL a MSVBVM60.DLL, da un error "The file OLEAUT32.DLL is out of date. This program requires a newer version."

un saludo
www.videopanoramas.com Videopanoramas 3D player

[EX3]

 
Cita de: "tewe76"Igual te arriesgas a petar la máquina
Eim!? Me puedes explicar por que iba a petar la maquina por semejante tonteria?  :blink:

Cita de: "tewe76"Por otro lado, esas API que comentas suenan interesantes, pero, ¿no se puede hacer también simplemente con Shells de regsvr32?
Sobre lo de por que no lo hago a traves del REGSVR32 es sencillo, para que voy a lanzar otro proceso a ejecucion que realiza unos cuantos pasos, entre ellos llamar a las funciones DllRegisterServer() y DllUnregisterServer() ;) cuando puedo hacerlo directamente desde mi programa y en un solo paso? Es ovio, no? :D

Cita de: "tewe76"Y además, ten mucho cuidado con lo de desinstalar, porque puedes desinstalar cosas que utilicen otras aplicaciones y le desgracias la máquina al usuario
Los accesos a dlls en windows siguen un patron de busqueda:
1º. Directorio del ejecutable
2º. Path especificados en el registro
3º. Directorio Windows
4º. Directorio Sistema

Como veras el peligro de eliminar el registro de una dll del sistema no es tan facil si se toman las precauciones necesarias y contando tambien con que siempre busca primero en el propio directorio del ejecutable, ahora si sigues unos pasos sencillos evitas por completo cualquier daño al usuario final:
1º. Antes de realizar el registro de las librerias te aseguras de que la libreria exista en el mismo directorio.
2º. Si la libreria esta presente en el directorio del ejecutable realizas el registro.

Como ves peligro no hay alguno ;)

Cita de: "fiero"El ejecutable proyecto1.exe da un error "No se encontró el archivo .DLL requerido, MSVBVM60.DLL"

Si renombro el MSVBVM60_.DLL a MSVBVM60.DLL, da un error "The file OLEAUT32.DLL is out of date. This program requires a newer version."
Ups!!! fallo mio xDDDDD Se me olvido que renombre la dll en el zip, sorry ;) Pero weno, veo que por lo menos no es preciso registrar la runtime como ocurre con la del VB4 (ole).

Sobre lo de la oleaut32.dll he actualizado el zip con las dos dlls, las versiones que tengo en mi pc, bajatelo de nuevo y a ver si hay mas suerte :)

http://dxlib32.se32.com/private/HelloWorld...WithRuntime.zip

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

fiero

 Lo mismo, "The file OLEAUT32.DLL is out of date. This program requires a newer version."

Parece que coge la oleaut32.dll del sistema, antes que la tuya.

un saludo

PD: no puedo renombrar la del sistema, porque está siendo utilizada por windows, cosas de w98...
www.videopanoramas.com Videopanoramas 3D player

[EX3]

 Vale, he estado mirando y resulta que la oleaut32.dll que tengo en el directorio de sistema es diferente a la que te he pasado, la version que viene en el ZIP es la 2.40.4518.0 de 908kb (que he debido de sacar de alguna distribucion algo desfasada) mientras que la tengo en el sistema y la que usa el ejecutable al parecer es la 3.50.5014.0 de 556kb. Bajate de nuevo el zip y prueba ahora.

Salu2...

P.D.:
Cita de: "fiero"PD: no puedo renombrar la del sistema, porque está siendo utilizada por windows, cosas de w98...
Trabajar solo con lo que os mando en el ZIP. No se os ocurra renombrar ningun archivo de vuestro directorio sistema por que ahi ya no me hago responsable.
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

fiero

 
Cita de: "[EX3"]Trabajar solo con lo que os mando en el ZIP. No se os ocurra renombrar ningun archivo de vuestro directorio sistema por que ahi ya no me hago responsable.
XD, tranquilo, no me voy a cargar nada. Yo tambien he trasteado un poco con las dll, ya que mi programa principal es un activex. En mi caso, como todavia utilizo algunas clases de las mfc, incluyo en el fichero de instalación la ruta http://activex.microsoft.com/controls/vc/mfc42.cab, que descarga e instala las mfc42 en los sistemas w98 que no tienen dichas dll (muy pocos la verdad)

En cuanto a la prueba, sigue dando el mismo error. Para comprobar si realmente pilla el oleaut32.dll del sistema lo he renombrado desde msdos y he arrancado de nuevo. Al ejecutar después tu programa salta un warning "No se encontró el archivo .dll requerido C:\WINDOWS\SYSTEM\OLEAUT32.DLL" y un error en otra ventana, el típico "no se encuentra el archivo proyecto1.exe ( o uno de sus componentes)"

Imagino que si un dll está registrado en el sistema, ya no se sigue el orden de:
1º. Directorio del ejecutable
2º. Path especificados en el registro
3º. Directorio Windows
4º. Directorio Sistema

sino que se sigue:
1º. Directorio de registro

el oleaut32.dll de mi w98 es la versión 2.20.4122

un saludo
www.videopanoramas.com Videopanoramas 3D player

[EX3]

 Mmm, cawen... probaria a que el programa registrara mediante DllRegisterServer() la oleaut32.dll pero esque tampoco funcionaria ya que no ejecutaria ninguna linea de codigo del programa sin estar registrada la dll :(

No se, ya no se me ocurren opciones viables via VB sin tener que meter mano de programas aparte. Weno, me queda el consuelo de que ya puedo distribuir varios programas con versiones diferentes de sus ActiveX sin tener que reinstarlos, algo es algo.

Si alguien se le ocurre alguna idea que pueda funcionar estoy abierto a sugerencias.

Salu2 y gracias por tu tiempo, fiero
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.