miércoles, 27 de octubre de 2010

Mi primera DLL

Hoy he decidido grabarme un video construyendo una dll básica en c++ y consumiendola desde una aplicación de consola en c++ porque es una tarea util cuando necesitas hacer un wrapper de una librería en c o c++ y usarla desde otros lenguajes como c#. Aunque es algo muy fácil me cuesta muchas veces recordar la nomenglatura de ahí la idea de este tutorial espero que os sea útil para arrancar vuestros proyectos.




El codigo fuente de la dll sería:


#include "stdafx.h"

#define DLL_EXPORT extern "C" __declspec(dllexport)

DLL_EXPORT double Sum(double a, double b);

double Sum(double a, double b)
{
return a+b;
}



y el de la clase en c++ que lo consume sería:


#include "stdafx.h"

#include <iostream>

extern "C" __declspec(dllimport)double Sum(double a, double b);

using namespace std;

int main(){
cout << "hola dll" << endl;
cout << "La suma de 2 + 3 es:" << Sum(2,3);

getchar();
return 0;
}


Y ahora en este segundo video creo un proyecto de consola de c# desde
el cual también consumiremos los métodos de nuestra DLL.



El código de la clase Wrapper:


namespace UseDLLCSharp
{
    class WrapperDLL
    {
        [DllImport("DLL.dll")]
        public static extern double Sum(double a, double b);
    }
}



El código de la clase principal de C#:


namespace UseDLLCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hola mundo");
            Console.WriteLine("La suma de 3 + 2 es: " + WrapperDLL.Sum(3, 2));

            Thread.Sleep(5000);
        }
    }
}

2 comentarios:

Anónimo dijo...

:-) Guay. Es curioso, con gcc, a diferencia de visualC todos los símbolos de funciones son exportados por defecto sin ningún tipo de declaración y no hay que hacer eso. Al menos es así en linux, supongo que con mingw será igual.

Saludos.

Jorge Cantón Ferrero dijo...

Estupendo Pablo si te animas puedes publicar con un comentario como sería el código usando gcc.