En la clase de estructura de datos 1 el docente planteo realizar un proyecto de administración de vuelos en el cual pudiéramos administrar las rutas de un vuelo a otro, o mejor dicho de un aeropuerto a otro, utilizando un poco de geolocalización, ya que debimos utlizar un API de algún mapa.

El lenguaje utilizado en la clase es C++ pero al realizar la búsqueda de los API de mapas encontramos que el mas conveniente era el de GMAPS en C#.

He ahi el reto planteado… unir dos lenguajes de programacion distintos,es decir, el backend estaria hecho en C++ y el Frontend en C#.



 

Entonces la unica forma era por medio de archivos .dll creados en C++ (los cuales contendrian las funciones) y llamarlo a C# para que retornara lo procesado en C++.

Un reto complicado fue el de leer un archivo de texto y retornar lo que se va leyendo en el ya que al trabajar con distintos lenguajes hay cosas que no pueden ser retornadas en un lenguaje(un poco delicado trabajar con .dll). Al inicio usabamos una funcion en C++ que retornaba un char * lo cual llamado en C# tiraba cierta excepcion, haciendo que todo crasheara.

La solucion ocurrida fue la siguiente: creamos una funcion void en C++ y le mandamos como parametro dos cosas; 1. un char* llamado buff(sera lo que almacene) y 2. un int que es la linea en que nos ubicaremos del archivo; a su vez teniamos una funcion que nos permitia saber el tamaño del archivo(cuantas lineas tiene).

Con eso la idea era hacer un ciclo en C# que me permitiera llamar la funcion la n cantidad de veces para que fuera llenando la variable que le mandamos en como parametro.

Dato Importante: si existe una funcion que tenga un parametro char* en el .dll de C++ en C# hay dos alternativas: un string o un stringbuilder(si lo que quieres es solo mandar un parametro es mejor string, pero si lo que es almacenar en esa variable lo que tu funcion llenó es mejor el stringbuilder).

En nuestro caso esa fue nuestra solucion:un metodo void en C++ que tuviera esos dos parametros de un char* que seria el buff y un int la poscicion y luego mandar a llamar esa funcion en C# pero con la diferencia que de parametro le enviariamos un stringbuilder lo que iria dentro de un ciclo para ir tomando el texto de cada linea y asi leer todo el archivo.En nuestro caso lo ibamos agregando a un datagridview y antes realizabamos un split para manejar los elementos de esa linea de manera individual cada uno.

Ejemplo nuestro(PDF): C++and C#

Captura del Proyecto:

Integrantes: Mario Flores y Andres Figueroa

Repo del proyecto

Print Friendly, PDF & Email

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *