Temas

          Abrir una cuenta

  

    

 
Inicio
  · Inicio
· Documentación
· Downloads
· Web Links
· Foros
· Mensajes Privados
· Buscar en la web
· Otras Noticias
· Enviar Noticias
· Gana Dinero
· Tu Cuenta
· Tu Tienda
 
 

 

 
El Tiempo
 
Pulsa para ampliar la imagen
 
 

 

 
Recomendamos
 


 
 

 

 
Documentación
  · Banda Ancha
· Hardware
· Linux
· Redes
· Seguridad
· Trucos W98/Me
· Windows NT
· Windows 2000
· Windows XP
· Diseño Web
· FreeBSD
· Programación
· Virus
 
 

 

 
Buscar en Google
 
Buscar en Google
 
 

 

 
Últimos Downloads
  · LogMeIn 
Descargado: 1960 Hits

· Ondata RecoverySoft PRO 
Descargado: 3109 Hits

· Photo Recovery 
Descargado: 2160 Hits

· a2 personal 
Descargado: 1230 Hits

· Magic Recovery Software 
Descargado: 4072 Hits

· Advenced NetMonitor ClassRoom Profesional 
Descargado: 2004 Hits

· CCleaner 
Descargado: 1927 Hits

· Manual de Coyote Linux Firewall 
Descargado: 21725 Hits

· IZArc 
Descargado: 1614 Hits

· Traducción a Galego de Windows XP 
Descargado: 1666 Hits

 
 

 

 
Últimos Manuales
  · Consejos contra el Spyware
· ¿Cómo abrir puertos en un router Dlink Di-604?
· Solucionando problemas con librerias de Visual C
· Solucion a los errores de arranque en XP
· Script para Copia de Seguridad en Linux, por Clik
· Manual del SSC Service
· Consejos para mantenerse a salvo de virus
· Guía rápida para proteger el PC
· Consejos sobre apliaciones P2P
· Configuración segura para el IE
 
 

 

Solucionando problemas con librerias de Visual C

(1009 palabras totales en este texto)
(11799 Lecturas)   Versión Imprimible




Sobre los problemas de los "runtime" de Visual C
---------------------------------------------------------------------------------------

Prácticamente, todos los productos de Windows (sean de Microsoft o de terceros) están escritos en Visual C++ (alguno pocos en Basic, pero este no se utiliza en programas serios debido a su pérdida de prestaciones).

Bien, el problema reside en que Microsoft va actualizando el "runtime" de Visual C++ a la ultima versión, bien en los nuevos sistemas operativos, o bien en los parches a los sistemas. Pero por otra parte, algunos "terceros" tienen la insana costumbre de instalar también el runtime de C o las librerías de clases. Si este "tercero" intenta machacar los que hay en la carpeta de Windows, no hay problema ya que el propio Windows"protegerá" sus archivos y no permitirá el machaque y por tanto, nada se estropeará. El problema reside en si este "tercero" instala en su propia carpeta de instalación este runtime. Lo veremos más adelante.

Antes de nada, vamos a definir lo que es el "runtime". El runtime es una serie de DLL's que cualquier programa escrito y compilado en C o C++ necesita para su ejecución. Igualmente existen las librerías de clases (MFC). Las DLL's clásicas del runtime y librerías de clases son:

msvcrt.dll
msvcrt20.dll
msvcrt40.dll
msvcirt.dll
msvci70.dll
msvci70d.dll
msvcp50.dll
msvcp60.dll
--------
mfc40.dll
mfc40u.dll
mfc42.dll
mfc42u.dll
mfc70.dll
mfc70u.dll
--------

Recordemos que una DLL tiene el concepto de Librería Dinámica y que normalmente si es invocada por distintos programas, sólo estará una vez en memoria. Es decir, si un programa la necesita, ejecuta la función"LoadLibrary". Si la DLL está en memoria, Windows no la cargará y la usará. Si no está la cargará.

Imaginemos ahora dos programas que se ejecutan al inicio de Windows (o dos servicios). Uno de ellos carga el runtime de C: (o alguna de sus librerías). El otro que se carga a continuación también las necesita, y al cargarlas, como el sistema se da cuenta que ya están en memoria... no hace falta cargarlas y solamente usa la que esté en memoria.

Ahora bien, imaginemos que ese primer programa que se carga, es de un tercero de los que nos "han metido" un viejo runtime de C en su carpeta privada. Como se ejecuta el primero, cargará un runtime de C (o una librería de clases) vieja. Esta ya se queda en memoria y a partir de entonces, todo lo que se cargue estará usando un viejo runtime de C, aunque Windows tenga el "último" en sus carpetas Windowssystem32.

Por tanto, al tener la desgracia que ese servicio o ese programa de terceros se haya cargado el primero, hará que todo el sistema funcione con algún problema (o con muchos en ese momento y tengamos que reiniciar...).

Curiosamente, si reiniciamos, puede que no suceda el problema. ¿Por qué?..... porque el orden de carga de programas y servicios no siempre es el mismo, y puede que tengamos la suerte que la siguiente vez se cargue con anterioridad un servicio correctamente realizado o del propio Windows, el cual cargará correctamente el runtime del propio Windows

Esta es una de las causas de errores aleatorios y que nos dan la sensación a veces de que Windows se comporta de manera diferente en cada reinicio.

Por curiosidad, podéis buscar en todo vuestro disco las DLL's anteriores y ver en cuantos sitios aparecen (solo son correctas todas las que aparezcan dentro de la carpeta de Windows y sus subcarpetas). Con el botón derecho sobre ellas podréis verificar la versión y os sorprenderá el ver cuántas veces las tenéis repetidas fuera de la carpeta Windows en vuestro sistema, y lo que es más grave...... las diferentes versiones que los terceros tienen la insana costumbre"de meternos"....

¿Cómo solucionarlo?
Machacando con las de XP las DLLs de terceros (by Alezito ;)
O, ¿porqué no.... simplemente renombrarla (con extension DL en vez de DLL por ejemplo), y reiniciar a ver si funciona todo?.... y si vemos que funcionan y funcionará mejor de lo que creemos.... posteriormente ya las borraremos... ;-)) (by JMT)

Un saludo,

--
José Manuel Tella Llop

  

[ Volver Programacion | Índice de las Secciones ]