de vb 6.0 a VB.NET

(1/3) > >>

MaLkAvIaN_NeT:
…Bien a raíz de un comentario en algún post, es porque decidí escribir este manual

Citar

El hecho de que conozcas visual Basic 6.0 no te garantiza que sepas nada en visual basic.net.

..A decir verdad Vb 6.0 fue uno de los lenguajes con el que me inicié, y como tal resultó un poco reacio probar posteriormente con otros lenguajes como C++, Pascal, .NET, Delphy, php, etc. y este manual trata de ilustrar potencialmente como migré a .NET, y las preguntas que me fui haciendo y poco a poco logrando despejarlas.
 
Acerca de la tecnología .NET Y Microsoft
Cada día Microsoft se mete más y más entre nosotros, la mayoría de usuarios domésticos usan su plataforma, los usuarios no experimentados desconocen de otros S.O., no piensen que estoy en contra de Microsoft o en favor, tampoco quiero decir que estoy en contra de la tecnología ni proclamando que la X tecnología sea la mejor, simplemente quiero dar a entender de que hay que estar a la vanguardia con las nuevas tecnologías para no quedar desfasados, ahora tenemos la tecnología .NET que según expertos dará mucho que hablar; proporcionándonos un nuevo modelo de programación orientado al gran mundo del Internet y a los smart client.

Acerca del desarrollador 5 estrellas
Una de las principales razones por la que se inició el programa 5 estrellas es el marketing, que es emprendendido por compañías comerciales de software, en este caso tenemos a Microsoft que no encuentra mejor manera de hacer probar su nuevo producto, capacitando a los que deciden incursionar en él para que pronto esta nueva tecnología se convierta en una necesidad de todo usuario inmerso en la globalización, este programa ofrece buenas ventajas desde el punto de vista que te facilita mucha documentación, foros de desarrollo y discusión, webcast en línea, etc.  También son buenas las certificaciones que puedes obtener. 

Algunos enlaces:
MSDN
http://msdn.microsoft.com/library/spa/
Ineta:
http://www.ineta.org/latam/

PD. Todo lo que escribo aquí no es más que un punto de vista personal.

MaLkAvIaN_NeT:
Acerca del NET Framework
Bueno si eres nuevo en la tecnología .NET te preguntarás para que fuck se tuvo que inventar este marco de trabajo, bueno hay muchas razones entre unas de las principales son;
como sabrán un lenguaje que a dado mucho que hablar a sido Java por ser orientado a objetos y sobretodo por ser multiplataforma, sabemos que java necesita un motor de apoyo al cual conocemos como Virtual Machine, con el tiempo mucha gente optaba por elegir esa tecnología desplazando las propuestas de etiqueta Microsoft; el cual se vio forzado a hacer algo al respecto, empezaron con un lío judicial en el que Microsoft quería dejar impotente al Virtual Machine dentro de sus plataformas, y no logrando hacerlo.  Luego apareció el NET Framework que análogamente sería algo como el Virtual Machine y que buscaría desplazarlo.
Otra razón es que la tecnología .NET está pensada para el gran mundo distribuido… la INTERNET, mundo que se ha convertido en una necesidad del hombre actual y no es fundamental una PC para entrar al él, podemos hacerlo desde un Pocket PC, un móvil , etc. y  .NET también pensó en esto.
Ahora veamos que es el Net framework.- Aquí no pienso explayarme tanto pues no cuesta nada entrar a tu browser > digitar ‘define: NET framework’ > search   y marearte con tanto resultado, yo sólo te explico lo que entiendo.
Sencillamente diría que cualquier aplicación escrita en .NET no podría correr si no está instalado el NET framework, ahora yo si podría programarme una aplicación consola en un block de notas y compilarla con el NET Framework y correrla no necesitando tener instalado el .NET. dentro del framework tenemos:
-Biblioteca de clases: abarca interfaces, tipos y clases; que pueden ser usadas en cualquiera de los lenguajes soportados (usando el CLS que es algo así como un traductor); sobre esto es que se construyen las aplicaciones, componentes, controles de .NET, etc.  Aki tampoco podemos dejar de mencionar al espacio de nombres System al cual conocemos como tipo de datos, los más usuales en 6.0 eran Integer, Boolean, string, double.  Hay tipos que no existen como el variant  pero que podríamos sustituir con Object, y ahora hay que tener en cuenta que por ejemplo un integer no es simplemente un tipo de dato sino una clase al igual que las demás, en la clase integer entran a tallar otros conceptos como el unsigned que nos recurda al C++, así tenemos dentro de la categoría enteros la clase byte que es un entero de 8 bits sin signo, tenemos el int16, int32 de 16 y 32 bits con signo, así como uint16, uint32 sin signo. Ahora como podemos usarlos
Si por ejemplo declaro una variable contador que no almacenara un valor muy grande uso int16 para ahorrar memoria pues cada variable ocupa un espacio en ella.
Código:

Dim intCont as system.int16=0 ‘inicializo en 0
intCont +=1 ‘esto sería lo mismo que intCont=intCont+1

Messagebox.show(“El valor de contador es“ & intCont.tostring)

Como vimos; se instancia un objeto intCont de la clase int16 el cual adopto todos los métodos y propiedades de dicha clase, uno de esos métodos es tostring que haría lo mismo que hacer un cstr(intCont)
-ADO.NET, un tema muy amplio, la nueva evolución de ADODB incluyendo mejor performance entre nuestros sistemas de información, mas seguridad y mejor interoperabilidad con el gestor de BD, plataforma y demás.
-ASP.NET, la tecnología active service page a evolucionado ayudándonos en algunos puntos del asp convencional, y posiblemente sea el futuro de las aplicaciones, optimizado para trabajar con el IIS.
-entre otros como:
Ensamblados
http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art109.asp
Comon Lenguaje Runtime
http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art80.asp
GDI+
http://www.elguille.info/colabora/puntoNET/tutGDI/indice.htm
.Net remoting
http://www.microsoft.com/spanish/msdn/articulos/archivo/091101/voices/remoting.asp
WMI
http://www.elguille.info/colabora/NET2005/juanlosa_ArticuloWMI.htm
Servicio XML y otros WEB Services
http://web-services.bankhacker.com/

una ventaja: cuando se programaba en 6.0 y por ejemplo empleábamos el control toolbar en el Server de nuestro troyano, y queríamos redistribuir nuestra aplicación teníamos que registrar la dll u ocx MSCOMCTL, u optar por generar el instalador. Ahora solo vasta con tener instalado el framework para usar dicha clase, y la desventaja de esto sería que los usuarios domésticos no tienen necesidad de instalar el NET Framework

MaLkAvIaN_NeT:
Crear una aplicación consola desde un block de notas

…Bien como dije hace poco teniendo instalado el Net Framework puedo crear una aplicación de cualquier lenguaje de .NET en un notepad, ahora veamos un ejemplo, para este ejemplo necesitas saber la ruta donde está tu NET Framework (x ejemplo C:\WINDOWS\Microsoft.NET\Framework\) , en este path vemos que versión de Framework tenemos instalado si tenemos el 1.1 encontraremos algo así v1.1.4322, y si tenemos el 2 sería: v2.0.50727. ahora abrimos la consola y entramos al path por ejemplo a C:\WINDOWS\Microsoft.NET\Framework\ v1.1.4322.
Abrimos el notepad y ponemos el siguiente code:
Código:

Imports System
Public Class Prueba
  Public Shared Sub Main()
    Dim I as Integer
    For I=1 To 10
       Console.Writeline(I)
    Next I
       Console.Read
  End Sub
End Class

Luego lo guardamos como prueva.vb en la carpeta del Framework.
Ahora entramos a la ventana de comandos y compilamos con el siguiente comando VBC Prueba.vb, ahora vemos que se genera un


Como se ve en la imagen estoy usando la versión de framework 1.1 porque ahora tengo el .NET 2003.
Luego de haberlo compilado se genera un exe y es el que podemos ejecutar.

 Tambíen con C#

{
    public static int main (void)
    {
        System.Console.WriteLine ("hola mundo");
        return 0;
    }
}
luego la compilas
csc /target:exe /out:Demo.exe Demo.cs

MaLkAvIaN_NeT:
Acerca de los lenguajes que soporta en el Net Framework Entre los lenguajes soportados tenemos a C#, Visual Basic,C++, J# ,Perl, Pyton, Fortran, Cobol entre otros,,, cómo podemos elegir por algún lenguaje de .NET, si programaste en VB6.0 puedes migrar a VB.NET, si usabas C puedes usar C# si usabas Java puedes optar por J#.

Citar

El hecho de que conozcas visual Basic 6.0 no te garantiza que sepas nada en visual basic.net.

Esto se da porque vb.net es un lenguaje mixto y puede soportar dicha sintaxis, pero si programamos en vb.net como 6.0 sería desperdiciar todo lo que nos brinda.

VB .NET es la nueva versión de VB 6.0?

VB.net cambió completamente la filosofía de programación en 6.0 pero pensó que no sería tan conveniente crear un lenguaje netamente de objetos con un estilo diferente, no hay que creer que forzó la programación estructurada a POO, la creó basándose en una sintaxis conocida por el programador  de 6.0 y le dio flexibilidad para soportar la programación estructurada, pero en .NET hay que tener en cuenta que en VB.NET:

no hay controles hay clases, no hay variables hay objetos, hay optional pero es mejor la sobrecarga, puedes usar composición pero existe la herencia, no hay Initialize use los constructores, olvídese de los caption ahora los objetos tendrán la propiedad text, si quiere finalizar una clase busque el método dispose.

Creo que un code es mejor que cualquier prolija explicación, para este code creamos un nuevo proyecto y agregamos una clase:

Código:

Imports System.Windows.Forms

Public Class objForm : Inherits Form
    Dim Cont As System.Int32 = 1
    Public Sub New()
        Me.Text = "Formulario"
    End Sub
    Public Sub New(ByVal strTitulo As String)
        Me.Text = strTitulo & " " & Me.Cont.ToString
        cont += 1
    End Sub
    Public Overloads Sub Dispose()
        MessageBox.Show("acabas de hacer dispose a " & Me.Text)
        Me.cont = 0
        MyBase.Finalize()
    End Sub
End Class

Esta clase no es más que un formulario personalizado, que hereda de la clase Windows.form por tanto hereda todo los métodos y propiedades, ahora tenemos el constructor (new) que emplea la sobrecarga(un New sin parámetro y el otro con el parámetro strTitulo), al crear un objeto con ésta clase podemos elegir a si instanciar un objeto con el título del formulario definido o por defecto.
También le agregamos un sub Dispose que vendría a ser como un Unload, pero como la clase padre de la que heredamos ya tiene un método dispose, lo que hacemos es sobrecargarlo utilizando el término Overloads.
Código:

Public Class botonDestruyeForm : Inherits Windows.Forms.Button
    Private tmp_Form_a_destruir As objForm
    Public Property form_a_destruir() As objForm
        Get
            Return Me.tmp_Form_a_destruir
        End Get
        Set(ByVal Value As objForm)
            Me.tmp_Form_a_destruir = Value
        End Set
    End Property
    Public Sub Cerrar(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Click
        Me.tmp_Form_a_destruir.Dispose()
    End Sub
End Class

La clase botonDestruyeForm hereda de la clase button, tiene un objeto tmp_form_a_destruir de la clase objForm (este objeto viene a ser el formulario desde donde se instancian los objetos de la clase botonDestruyeForm, osea el ME) este objForm puede ser asignado y leido a través de la property form_a_destruir.
Luego programamos el evento click del button personalizado (botonDestruyeForm) en el cual ponemos la linea:
Código:

Me.tmp_Form_a_destruir.Dispose()
Que hace un llamado al sub que creamos en la clase del formulario personalizado(form):
Código:

Public Overloads Sub Dispose()

Ahora estamos listos para probar nuestras clases, para esto en el form inicial agregamos un button y en ponemos lo siguiente:
Código:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     Dim x As New objForm("Algunos tips .NET")
        x.Size = New Size(400, 100)
        x.Location = New Point(8, 8)
        x.Show()
        Dim objBotonDestruyeForm As New botonDestruyeForm
        objBotonDestruyeForm.Location = New Point(20, 9)
        objBotonDestruyeForm.Size = New Size(300, 20)
        objBotonDestruyeForm.Text = "Dispose a " & x.Text
        objBotonDestruyeForm.form_a_destruir = x
        x.Controls.Add(objBotonDestruyeForm)
    End Sub


Bien ahora tenemos un concepto mejor de lo que es herencia(especificaré esto mejor mas adelante) y como podemos crear objetos que hereden de las clases del net framework (form, button), usamos la sobrecarga de los métodos que traen dichas clases en las nuevas que creamos, como usar el dispose.

MaLkAvIaN_NeT:
Tengo buenos códigos probados y re-probados en 6.0 para qué volverlos a hacer en .NET?

Bueno sería recomendable migrar el código, existen asistentes de migración de código  que nos facilitan el trabajo, y también podemos usar componentes 6.0 en alguna aplicación .NET esto significa que creamos una dll en 6.0 y luego la agrego a las referencias de mi aplicación y la uso como si fuese un componente mas de mi aplicación, hasta allí no hay problemas pero si deseo transportar mi proyecto con la dll de 6.0 hay que registrarla (regsvr32 /u ‘directorio’*.dll) o generar el instalador sin embargo a veces he experimentado conflictos inesperados, pero temporales si encuentras la solución.

Utilizando componentes 6.0 en .NET
Bien abrimos el 6.0 elegimos un proyecto DLL ActiveX y en la clase que genera ponemos esto:

este code esta escrito en 6.0, lo baje de una página en donde figura como autor  Javier de la Cruz - 21/11/2005 - dela.javi(at)gmail(dot)com  

Option Explicit
Public Function cifra(UnaCadena As String, UnaLlave As String) As String
    Dim CadenaResultante As String
    Dim i                As Long
    Dim Llave()          As Integer
        If (Not UnaCadena = "") And (Not UnaLlave = "") Then
        If GeneraLlave(UnaLlave, Llave()) Then
            For i = 1 To Len(UnaCadena)
                CadenaResultante = CadenaResultante & Chr(Llave(i Mod (Len(UnaLlave) - 1), Asc(Mid(UnaCadena, i, 1))))
            Next
        Else
            MsgBox "La llave debe tener al menos dos caracteres.", vbError, ""
        End If
    End If
        cifra = CadenaResultante
End Function
Public Function descifra(UnaCadena As String, UnaLlave As String) As String
      Dim CadenaResultante As String
    Dim i                As Long
    Dim Llave()          As Integer
    Dim Posicion         As Integer
    If Not UnaCadena = "" Then
        If GeneraLlave(UnaLlave, Llave()) Then
            For i = 1 To Len(UnaCadena)
                Posicion = Asc(Mid(UnaCadena, i, 1)) - Llave(i Mod (Len(UnaLlave) - 1), 0)
                If Posicion > 0 Then
                    CadenaResultante = CadenaResultante & Chr(Posicion)
                Else
                    CadenaResultante = CadenaResultante & Chr(Posicion + 255)
                End If
            Next
        Else
            MsgBox "La llave debe tener al menos dos caracteres.", vbError, ""
        End If
    End If
    descifra = CadenaResultante
End Function
Private Function GeneraLlave(ByVal UnaLlave As String, ByRef Llave() As Integer) As Boolean
Dim i As Integer
    Dim j As Integer
    Dim N As Integer
    If Len(UnaLlave) > 1 Then
        ReDim Preserve Llave(Len(UnaLlave) - 1, 254)
        For i = 1 To Len(UnaLlave)
            Llave(i - 1, 0) = Asc(Mid(UnaLlave, i, 1))
        Next
        For i = 0 To Len(UnaLlave) - 1
            For j = 1 To 254
                N = Llave(i, j - 1) + 1
                If N = 256 Then N = 1
                Llave(i, j) = N
            Next
        Next
        GeneraLlave = True
    End If
End Function

Al proyecto le ponemos CmpEncriptador y a la clase DCEncriptar, luego generamos la dll (CmpEncriptador.dll)


 y abrimos un nuevo proyecto de aplicación Windows en .NET  y a las referencias agregamos


Ahora vamos y
Código:

Imports CmpEncriptador
Dim objEncripta As New DCEncriptar
MessageBox.Show(objEncripta.cifra("tips .net", "malkavian_net"))

Y la clase de 6.0 cifrará el texto, también podríamos desencriptarlo usando la misma llave.

Migrando nuestro código 6.0 a VB.NET
Para que la programación anterior utilize el code nativo de vb.net debemos hacer algunos cambios
-Funciones
Código:

Public Function cifra(ByVal UnaCadena As String, ByVal UnaLlave As String) As String
        Dim CadenaResultante As String
        Return CadenaResultante
    End Function

Si hubiese algún codigo luego del return ya no se ejecutaría pues el precompilador al llegar al return sale de la faunción, maneras de sobrellevar esto:
Código:

       Try
            'sentencia
            Return CadenaResultante
        Finally
            'aqui otras sentencias
        End Try

Así al dar un Return la function ejecutará lo que encuentre en el Finally, sirve mucho en algunos casos.

-Arrays

En el code 6.0 se usa un arreglo:
Dim Llave() As Integer

Podemos inicializar los arreglos de la siguiente manera
Código:

Dim llave() As Integer = {1, 2, 3}
 Dim i As Byte
 For Each i In llave
     MessageBox.Show(i.ToString)
 Next
‘este mismo ejemplo en C# sería parecido hay que declarar
int[] llave= new int[3]= {1, 2, 3}


Ya no existe la función Ubound para saber el máximo índice de un arreglo tan solo necesitamos un n.Lengt, podemos saber la dimensión del array con la propiedad Rank ,un array nos brinda una infinidad de métodos y propiedades que podemos usar a placer.

-Cadenas de texto que pasó con las funciones mid, left, right, len, chr ,ascBueno la forma de trabajar con cadenas a cambiado, ahora son propiedades de todo objeto (variable) string  
Obtener la longitud de una cadena
Código:

UnaCadena.Length
Obtener el asc y chr de una cadena, estos métodos son parte de la clase VisualBasic
Código:

Microsoft.VisualBasic.Asc(UnaCadena)
Microsoft.VisualBasic.Chr(UnaCadena)

Usar operador &=, mod
Mod tiene la misma funcionalidad que en  6.0
Operador &=
Código:

Dim str1 As String = "Hola "
  Dim str2 As String = "Visita el nuevo foro .NET"
  str1 &= str2 'el resultado: "Hola Visita el nuevo foro .NET"
Usar metodos de cadena
Mid(UnaCadena, i, 1)]
Esta funciones podrían remplazarse por los métodos Remove o Substring
Código:

unacadena.Remove([star index],[count])
unacadena.Substring([star index])


-Option Explicit
También tenemos esta sentencia para forzar a declarar todas las variables:
Código:

Option Explicit On
Su valor podría ser Off si no queremos esta comprobación. Tambien tenemos una nueva alternativa:
Código:

Option Strict On
Option strinct nos da una regla de conversión para restringir las conversiones de datos que podrían ocacionar pérdida de datos.
Código:

Option Compare Text
Tendiendo a option compare en Text entonces la letra ‘a’ minúsculas sería mayo a la letra ‘A’ mayúsculas
Código:

Option Compare Binary
Aquí ‘a’ = ‘A’
Estas declaraciones tienen que hacerse en la parte general
-Ahora que acabamos de tratar el tema de mayúsculas y minúsculas:
Si tengo a option compare en Text y me encuentro en la siguiente situación:
Código:

Dim Info As MessageBox
        If "javier" = "Javier" Then
            Info.Show("Se trata del mismo nombre")
        Else
            Info.Show("No se trata del mismo nombre")
        End If
Si por ejemplo la variable de comparación es ‘javier’ y el usuario ingresa el nombre desde una caja de texto y pone ‘Javier’; en una comparación se habla del mismo nombre, pero si está en: Option Compare Text (que está por defecto) no sería lo mismo, entonces podemos solucionarlo cambiando a Binary ó:
Código:

If "javier" = "Javier".ToLower Then
El método ToLower convierte al el texto del objeto en minúsculas esto es algo como un LCase y Ucase de 6.0

-Según el ejemplo estos serían los casos en que habría que cambiar, aparte de remplazar el msgbox por la clase message, y al hablar de objetos podríamos decir:
if unacadena < > “” then
Código:

If Not UnaCadena Is Nothing Then

-funciones Round , Abs en .net
Éstas funciones de redondeo, absoluto entre otras como coseno, seno, max,min, entre otras las tenemos en la clase Math
Código:

Dim NroEntero = Math.Round(2.3333)

Navegación

[0] Índice de Mensajes

[#] Página Siguiente