Solucionar problemas de aplicaciones actualizadas de Visual Basic 6.0

Actualización: noviembre 2007

Aunque las herramientas de actualización de Visual Basic 2008 se han diseñado cuidadosamente para que detecten e informen de cualquier problema con las aplicaciones actualizadas, existen algunos casos que no se pueden detectar. Esta página enumera algunos problemas conocidos que las herramientas de actualización no detectan y explica cómo solucionarlos.

No se puede tener acceso a vínculos de ayuda después de actualizar Visual Studio

Cuando se trabaja con una aplicación actualizada con una versión anterior de Visual Studio, los vínculos de ayuda insertados por la herramienta de actualización pueden dar el error "No se ha encontrado la página". Esto sucede debido a que los vínculos hacen referencia a la colección de ayuda de la versión anterior y el formato de los vínculos de ayuda ha cambiado.

Para corregir este problema, puede copiar la cadena del error y utilizar la función de búsqueda de la ayuda para localizar el tema. Tenga en cuenta que algunas cadenas de error incluyen variables, por lo que es posible que deba buscar una cadena parcial.

Diferencias de comportamiento para cadenas de longitud fija en tipos definidos por el usuario

En Visual Basic 6.0, las cadenas asignadas a una cadena de longitud fija en un tipo definido por el usuario se trunca automáticamente si superan la longitud fija. Después de actualizar a Visual Basic 2008, las cadenas ya no se truncan, por lo que puede que generen resultados incorrectos.

Nota:

Durante la actualización, se agrega el atributo VBFixedString a las cadenas de longitud fija en los tipos definidos por el usuario. Este atributo permite que las funciones de archivos de la biblioteca de compatibilidad de Visual Basic las traten como cadenas de longitud fija.

Para solucionar este problema, busque el código que asigna una cadena a la cadena de longitud fija y agregue código que compruebe la longitud de la cadena y la trunque, si es necesario:

' Before
MyString = "1234567"
MyStruct.FixedString5 = MyString

' After
MyString = "1234567"
If Len(MyString) > 5 Then
  MyString = Microsoft.VisualBasic.Left(MyString, 5)
End If
MyStruct.FixedString5 = MyString

El cierre de un formulario llama a Dispose

En Visual Basic 6.0, es posible descargar un formulario y cargarlo de nuevo más tarde mediante una llamada al método Show. En Visual Basic 2008, el método Close de un formulario llama al método Dispose, de forma que se recolecta automáticamente como elemento no utilizado. Esto puede provocar sutiles diferencias de comportamiento que pueden resultar difíciles de detectar.

  • En Visual Basic 2008, si llama al método Show para un formulario descargado, obtendrá una nueva instancia del formulario; las configuraciones de las propiedades de la clase base se perderán.

  • En el caso de los formularios que se muestran modalmente, no se llama automáticamente a Dispose. En algunos casos, es posible que desee llamar a Dispose para hacer limpieza en los recursos.

Las llamadas de enlace en tiempo de ejecución a objetos COM pueden provocar errores de falta de coincidencia de tipos

En Visual Basic 6.0, cuando se pasa un objeto COM de enlace en tiempo de ejecución como parámetro para una llamada de enlace en tiempo de ejecución, el objeto se convierte en Variant de tipo Nothing. Cuando se actualizan a Visual Basic 2008, los objetos COM declarados de tipo Object se tratan igual que Variants (que siempre se convierten al tipo Object durante la actualización); las referencias de estos objetos se calculan para el tipo variant Empty. Esto produce un error de coincidencia de tipos en Visual Basic 2008.

Para solucionar este problema, asegúrese de que todos los objetos se enlazan en tiempo de compilación.

Los valores devueltos por Err.Number pueden ser diferentes

En algunos casos, los errores que devuelve Visual Basic 2008 pueden ser diferentes de los que devuelve Visual Basic 6.0. En el caso del código de control de errores basado en los valores devueltos por Err.Number, esto podría causar un comportamiento diferente en la aplicación.

El código siguiente muestra un ejemplo:

' Visual Basic 6.0
On Local Error GoTo Result
Dim x() As Boolean
Dim y As Variant

y = x(10)

Result:
If Err.Number = 9 Then
   ' Do something.
Else
   ' Do something else.
End If

Antes de la actualización, Err.Number siempre devolverá 9 (El subíndice está fuera del intervalo) y ejecutará la primera parte de la instrucción If. Después de la actualización, devolverá 91 (Variable de objeto o de bloque With no establecida) y ejecutará la cláusula Else. Esto se debe a que, en Visual Basic 2008, una matriz debe inicializarse para que se pueda hacer referencia a ella; en Visual Basic 6.0, las matrices se inicializan al declararse.

Si depende de los valores devueltos desde Err.Number en el código, es recomendable que compruebe cuidadosamente los resultados y modifique el código según sea necesario.

Vea también

Conceptos

Trabajar con Visual Basic 6.0 y la versión actual de Visual Basic

Otros recursos

Actualizar aplicaciones creadas en versiones anteriores de Visual Basic