PDF de programación - Aquí estación orbital C# llamando a estación base VB.NET ¿Me oyen?

Imágen de pdf Aquí estación orbital C# llamando a estación base VB.NET ¿Me oyen?

Aquí estación orbital C# llamando a estación base VB.NET ¿Me oyen?gráfica de visualizaciones

Publicado el 28 de Agosto del 2018
365 visualizaciones desde el 28 de Agosto del 2018
535,1 KB
11 paginas
Creado hace 3a (19/06/2016)
Aquí estación orbital C# llamando a estación base
VB.NET ¿Me oyen?

Luis Miguel Blanco Ancos


O como el diseño multilenguaje de .NET Framework permite seguir usando nuestras
funciones favoritas de Visual Basic desde otros lenguajes


Algunos apuntes sobre la arquitectura del sistema

Una de las especificaciones arquitectónicas de la plataforma .NET: CLS (Common
Language Specification), establece que se trata de un sistema multilenguaje,
significando esto que puede soportar la presencia de diversos lenguajes para ser
programado. El CLS dicta las pautas que debe seguir cualquier lenguaje orientado a
.NET (.NET aware language) para poder ser utilizado dentro de la plataforma.

Actualmente disponemos de varios lenguajes diseñados para la programación bajo
.NET: Visual Basic .NET, C#, Visual C++, J#, etc.; pero cualquier fabricante de software,
utilizando la especificación antedicha, puede acometer la creación de un nuevo
lenguaje para añadirlo al conjunto de los ya existentes.

Este soporte multilenguaje se entiende a nivel de ensamblado, es decir, que podemos
construir una aplicación articulando diversos ensamblados escritos en distintos
lenguajes; lo que no está permitido es la creación de un ensamblado multilenguaje, o
lo que es igual, escribir un programa o librería que tenga clases en distintos lenguajes,
o una clase en la que se mezclen varios lenguajes.


El lenguaje intermedio. Punto de confluencia

Tras la introducción del punto anterior, el lector se preguntará por el modo en cómo
.NET Framework se las ingenia cuando debe acoplar elementos desarrollados en
distintos lenguajes, y conseguir además que la mezcla funcione armoniosamente. La
clave la encontramos en el lenguaje intermedio MSIL (Microsoft Intermediate
Language) o IL, como también le denominaremos en este artículo.

Cuando compilamos código en .NET utilizando el compilador correspondiente al
lenguaje con el que hemos escrito dicho código, el resultado obtenido no es
directamente código nativo de la plataforma hardware en la que va a ejecutarse la
aplicación, como sucede con los compiladores tradicionales, sino código IL. Este
código, como su propio nombre indica, se encuentra en un lugar intermedio entre el
código que escribe el programador y el que precisa la máquina para ejecutar las
instrucciones del programa.


http://geeks.ms/lmblanco

Aquí estación orbital C# llamando a estación base VB.NET ¿Me oyen?



Si no es código directamente ejecutable, ¿cómo consigue la plataforma .NET ejecutar
el programa?. La respuesta está en un compilador inmediato o JIT (Just-In-Time), que
en tiempo de ejecución se encarga dinámicamente de compilar el código IL del
programa a código nativo de la plataforma sobre la que ha de ejecutarse. El siguiente
diagrama muestra un esquema de este proceso de ejecución.



Esquema de ejecución de generación y ejecución del código IL


La compilación que lleva a cabo el JIT es, como hemos apuntado, dinámica, lo que
quiere decir que no se compila todo el código IL del programa a código nativo cuando
comienza su ejecución, sino según se va necesitando, con lo cual conseguimos un
mejor rendimiento en el funcionamiento de las aplicaciones.


Llamadas entre lenguajes

Ya que nuestro código, independientemente del lenguaje con el que lo hayamos
escrito, va a compilarse a un código común representado por el IL, las diferentes piezas
que forman un proyecto: formularios, clases, librerías, etc., pueden estar escritas en
diferentes lenguajes .NET, siendo resueltas de forma transparente las llamadas
efectuadas entre las mismas.



http://geeks.ms/lmblanco

2

Luis Miguel Blanco Ancos

Diagrama de llamadas a ensamblados creados en distintos lenguajes


Las interioridades del código IL

Después de tanto hablar del código intermedio, el lector posiblemente esté intrigado
por la forma y contenido del mismo. .NET Framework proporciona una utilidad
denominada ILDASM (Intermediate Language Disassembler), que como su nombre
indica, se trata de un desensamblador de código intermedio, que nos permite su
visualización dentro de un ensamblado (disculpe el lector este pequeño trabalenguas).

Para invocar esta utilidad, el modo más sencillo consiste en seleccionar desde el menú
de Windows la opción Microsoft Visual Studio .NET 2003 + Herramientas de Visual
Studio .NET + Símbolo del sistema de Visual Studio .NET 2003, que abrirá una ventana
MS-DOS, en cuya variable de entorno PATH ya se encuentran establecidas las rutas a
todas las herramientas de la plataforma.

A través del indicador de comandos ejecutaremos el archivo ILDASM.EXE, que
mostrará una ventana en la que utilizando la opción de menú Archivo + Abrir, nos
permitirá abrir un ensamblado de .NET (archivo .exe o .dll).

Una vez abierto el ensamblado, podemos visualizar su manifiesto y todas las clases de
que está compuesto; si además, hacemos doble clic sobre alguno de estos elementos,
veremos su código IL correspondiente.

La siguiente figura muestra un ensamblado escrito en C#, que visualiza en consola la
cadena Hola mundo desde C#.



http://geeks.ms/lmblanco

3



Aquí estación orbital C# llamando a estación base VB.NET ¿Me oyen?



Visualizando un ensamblado desde la herramienta ILDASM


¿Nostalgia de las antiguas funciones de VB?

Aquellos que hayan trabajado ampliamente con VB conocerán de sobra el excelente
conjunto de funciones que este lenguaje proporciona para el manejo de cadenas,
fechas, etc.

Si nuestro estimado lector pertenece a este perfil de programador, pero por avatares
del destino, se encuentra inmerso en un proyecto .NET a desarrollar con C#, no piense
que ha perdido para siempre el uso de sus muy queridas funciones, que tan
eficazmente le ayudaban en su trabajo cotidiano; sepa que gracias a la arquitectura
multilenguaje de .NET, y en particular al código IL, estas funciones van a seguir estando
disponibles, aunque programe en un lenguaje distinto a VB.

No obstante, la llamada a estas funciones desde un lenguaje diferente a VB, como en
nuestro caso es C#, no es posible realizarla de un modo tan simple y directo como el
que estamos acostumbrados, debido esto a la propia naturaleza y particularidades
sintácticas del lenguaje llamador: C#


Comenzando a llamar a VB.NET desde C#

Cuando en VB.NET queremos, por ejemplo, convertir una cadena en mayúsculas
utilizando la función Ucase, tan sólo hemos de llamar a esta función de un modo
sencillo y directo, como muestra el siguiente código fuente.


Ucase("hola mundo")


Sin embargo, las cosas no son tan simples desde C#, ya que se trata de un lenguaje
distinto de las funciones que necesitamos ejecutar; por ello vamos a ver cómo llamar
desde este lenguaje a las clases y módulos de VB.NET, que son las entidades de código
más representativas del lenguaje VB que contienen funciones y procedimientos.
Comencemos por las clases, por ser un elemento con muchos aspectos en común
entre ambos lenguajes.

En primer lugar crearemos un proyecto con el nombre ClaseVB, de tipo biblioteca de
clases en VB.NET, en el que escribiremos el siguiente código.


Public Class Cliente
Private msNombre As String

Public Property Nombre() As String

http://geeks.ms/lmblanco

4

Luis Miguel Blanco Ancos

Get
Return msNombre
End Get
Set(ByVal Value As String)
msNombre = Value
End Set
End Property

Public Function PasaMayusculas() As String
Return UCase(msNombre)
End Function

End Class


Tras escribir esta clase, seleccionaremos la opción Generar solución de VS.NET, para
obtener el correspondiente archivo DLL con la clase compilada.

A continuación crearemos un proyecto en C#, de tipo consola, con el nombre
LlamarClaseCS, que será el encargado de crear objetos de la clase Cliente escrita en
VB.NET; para esto tendremos que establecer una referencia entre ambos proyectos o
ensamblados de la siguiente manera.

Situados en el proyecto C#, desde la ventana Explorador de soluciones haremos clic
derecho en el nodo References, seleccionaremos la opción Agregar referencia, y en el
cuadro de diálogo del mismo nombre, pulsaremos el botón Examinar, con el que
navegaremos por el disco hasta el directorio bin del proyecto ClaseVB, en el que se
encuentra el archivo ClaseVB.dll; una vez localizado, lo seleccionaremos y aceptaremos
el cuadro de diálogo, con esto ya tenemos referenciada la dll desde el código C#.

A partir de ahora, ya podemos instanciar objetos de la dll VB.NET, teniendo en cuenta
que al crear el objeto es necesario especificar el espacio de nombres raíz del
ensamblado VB.NET que contiene la clase a la que queremos acceder, este espacio de
nombres corresponde al nombre del proyecto VB.NET. El siguiente código fuente
muestra un ejemplo.


[STAThread]
static void Main(string[] args)
{



}


ClaseVB.Cliente oCli;
oCli = new ClaseVB.Cliente();
oCli.Nombre="Luis Naranjo";
Console.WriteLine(oCli.PasaMayusculas());
Console.ReadLine();

http://geeks.ms/lmblanco

5

Aquí estación orbital C# llamando a estación base VB.NET ¿Me oyen?



class Class1
{



}

Cliente oCli;
oCli = new Cliente();
oCli.Nombre="Luis Naranjo";
Console.WriteLine(oCli.PasaMayusculas());
Console.ReadLine();

[STAThread]
static void Main(string[] args)
{
  • Links de descarga
http://lwp-l.com/pdf13262

Comentarios de: Aquí estación orbital C# llamando a estación base VB.NET ¿Me oyen? (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad