Exportar (0) Imprimir
Expandir todo
Personas que lo han encontrado útil: 1 de 4 - Valorar este tema

Solucionar problemas de aplicaciones actualizadas de Visual Basic 6.0

Aunque las herramientas de actualización de Visual Basic 2005 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.

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 puede 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.

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 2005, las cadenas ya no se truncan, por lo que puede que generen resultados incorrectos.

NoteNota

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

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 2005, el método Close de un formulario llama al método Dispose, por lo 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 2005, si llama al método Show para un formulario descargado, obtendrá una nueva instancia del formulario; las modificaciones de 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.

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 2005, 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 2005.

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

En algunos casos, los errores que devuelve Visual Basic 2005 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 2005, 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.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft. Reservados todos los derechos.