Showing posts with label C. Show all posts
Showing posts with label C. Show all posts

Monday, September 24, 2007

Instalando Gnome Vala en Ubuntu

La gente de Gnome ha inciado un proyecto interesante llamado Vala en su intento de Agilizar la Velocidad de Desarrollo para las librerias GNOME sin sacrificar Memoria RAM(cosa que critican directamente de Mono y Java). "Vala" hace parsing de una sintaxis muy pero muy similar a C# pero en vez de compilar a Nativo o a IL, compila a language C(.h y .c) "Compiler for the GObject type system" y por supuesto no necesita runtime. En fin, si quieren probarlo ustedes mismos aqui estan los pasos para instalarlo en Ubuntu: 1. Descargar los fuentes de Vala: wget http://download.gnome.org/sources/vala/0.1/vala-0.1.3.tar.bz2 2. Descomprimir: tar -xvf vala-0.1.3.tar.bz2 La descompresion ha creado el directorio vala-0.1.3 cd vala-0.1.3 3. Preparamos la compilacion ./configure 4. Compilamos. make 5. Instalamos. sudo make install Listo. Ahora solo nos queda probar el compilador(valac) y para esto creamos un archivo llamado "main.valac" y colocamos el siguiente contenido: using GLib; public class Sample : Object { public Sample () { } public void run () { stdout.printf ("Hello World from http://johansoft.blogspot.com\n"); } static int main (string[] args) { var sample = new Sample (); sample.run (); return 0; } } Compilamos: valac -o main main.vala Ejecutamos: ./main Listo:) El resultado deberia ser el siguiente: Hello World from http://johansoft.blogspot.com

Tuesday, May 1, 2007

Mono Embedding Parte II(External Call)

Anteriormente habia creado un embedding para ejecutar un ensamblado Mono desde C y les comente que necesitaba crear una instancia de una clase dentro del universo del Mono y ahora he hecho algo parecido, una llamada externa desde el CLR que se implementa en C. Esta tecnica difiere de el interop usando DllImport el cual consiste en crear el simbolo en C# y vincularlo a una libreria externa sin necesidad de un Host del MonoRuntime, en el caso de las external call el simbolo igualmente se declara en el ensamblado pero el simbolo apunta a la funcion que el Host del MonoRuntime registre. Por ejemplo: public class myMonoClass { [MethodImplAttribute(MethodImplOptions.InternalCall)] public extern static void sayHello(); } En nuestro Host del MonoRuntime creamos la funcion en C que se ejecutara cuando se invoke al metodo expuesto con el atributo MethodImpl como se muestra a continuacion: static void sayHello_myCLR () { printf("Saying hello from C using a CLI Internal Call\n"); } Y por ultimo registramos la llamada externa del CLR con la funcion en C. mono_add_internal_call("myMonoClass::sayHello",sayHello_myCLR); Nota: mono_add_internal_call debe ser invocado SOLO despues de cargar el ensamblado que tiene el methodo externo. Pero aunque esto es muy cool, esto no soluciona mi problema, y aun sigo necesitando crear una instancia de una clase en un ensamblado desde C. [Descargar mono_embedding_ext_call.tar.gz]

Sunday, April 29, 2007

Embedding Mono

Embedding mono es el proceso en el cual se incrusta el Mono Runtime en otro proceso generalmente creado en C o C++. Siguiendo los pasos de la guia oficial de mono he creado este pequeño ejemplo para hacer ejecutar una aplicacion Ejecutable de Mono desde una aplicacion hecha en C. El demo incluye:
  • main.c : Archivo con el embedding para el Runtime de Mono
  • main.cs : Archivo de C# para generar ejecutable.
  • Makefile : Archivo para compilar y ejecutar todo.
[Descargar mono_embedding_exe.tar.gz] Basicamente los pasos son los siguientes:
  1. mono_jit_init y recibir un puntero al dominio de aplicacion.
  2. mono_domain_assembly_open y recibir un puntero al ensamblado.
  3. mono_jit_exec y pasarle el ensamblado y el dominio
  4. mono_jit_cleanup para limpiar la instancia de CLR.
Es todo. Me he tomado el trabajo porque actualmente en mi poco tiempo libre estoy intentando hacer wrappers del x-chat. La verdad lo que necesito es ejecutar una clase en una libreria y aun no lo consigo:P (Continua)