Como hace unos dias prometi que escribiria un ejemplo de como usar una dll escrita en c con el entorno de programacion dev-cpp aqui pongo lo prometido.

Codigo escrito en c, dllmain.c

#include "dll.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

DLLIMPORT __stdcall void hola ()
{
printf("hola\n");
}

DLLIMPORT __stdcall int suma(int a, int b)
{
    return (a+b);
}

DLLIMPORT __stdcall char* cadena(char* s)
{
          strcat(s,"b");
          return (s);
          }

BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;

      case DLL_PROCESS_DETACH:
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}

codigo dll.h

#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */

DLLIMPORT __stdcall void hola (void);
DLLIMPORT __stdcall int suma(int, int);
DLLIMPORT __stdcall char* cadena(char*);

#endif /* _DLL_H_ */

Y a continuacion pongo el codigo que llama a la dll desde visual basic .net

Imports System.Runtime.InteropServices
Module Module1
    Private Declare Function cadena Lib "c:\dev-cpp\Proyecto1.dll" (ByVal s As String) As String
    Private Declare Sub hola Lib "c:\dev-cpp\Proyecto1.dll" ()
    Private Declare Function suma Lib "c:\dev-cpp\Proyecto1.dll" (ByVal a As Integer, ByVal b As Integer) As Integer
    Sub Main()
        Dim i As Integer
        i = suma(5, 4)
        hola()
        Console.WriteLine("Resultado: " & i)
        Dim ss As String = "a"
        Console.WriteLine("Resultado: " & cadena(ss))
        Console.ReadKey()

    End Sub

End Module

Etiquetas: , , , ,