LabView 3.1: crear DLL en C con Dev-C++ y llamada en LabView
Hola, hoy voy a escribir un ejemplo fácil fácil de un camino descubierto para crear DLL (Bibliotecas de Enlace Dinámico) en C y luego poder llamarla en LabView, el ejemplo es una ventana emergente de “Hola Mundo”. Más problema es para mi crear una DLL (porque lo único que dado es compilar directamente para código maquina las librerías fijas), que llamar una función de C en LabView, ya que esto se hace de manera sencilla con el VI Call Library Function Node.
En la página de National Instruments existen tres páginas de como hacer una llamada, crear un archivo C y crear el archivo DLL, he hecho los dos primeros pasos, pero para el tercero hace falta el programa Microsft Visual C++ 6.0 que no tengo, así que aún no sacaré los pasos para hacerlo, os dejo la página aquí de mientras.
Todavía no os puedo dejar las normas para crear vuestras propias librerías y ejecutarlas, pero espero que os sirva este ejemplo para comprender mejor todo este tema de DLL. Supongo que habrá tutoriales de como hacer DLL con Dev, así que no pretendo que esto sea uno, porque además no me leído todavía ninguno y por eso supongo que tengo problemas para compilar mis propios códigos en .c y cabeceras .h y .def. Podeís recomendar en un comentario cualquier otro link para ayudar a crear DLL en C/C++ facilmente de cualquier programa y si explica luego algo de LabView muchísimo mejor.
- Paso 1: Tener instalado Dev-C++ y crear DLL
El ejemplo que pongo es de la versión 4.9.9.2, podéis ver cual está disponible aquí.
Para crear una dll, archivo->nombre->proyecto
Elegir DLL, seleccionar lenguaje en C y poner de nombre de proyecto por ejemplo HelloDll. Debe salir automaticamente al proyecto dos archivos dllmain.c y dll.h . Si se selecciona en C++ salen estos dos arichivos pero sin el ejemplo de Hola Mundo.
Archivo .C (no he remplazado ni la primera línea):
/* Replace “dll.h” with the name of your header */
#include “dll.h”
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>DLLIMPORT void HelloWorld ()
{
MessageBox (0, “Hello World from DLL!\n”, “Hi”, MB_ICONINFORMATION);
}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;
}
El archivo .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 void HelloWorld (void);
#endif /* _DLL_H_ */
Pues ya está, ahora no hace falta escribir nada, simplemente vamos a ejecutar->compilar ó Ctrol+F9 ó el icono de cudraditos de colores más arriba a la izquierda y nos generá el DLL. A lo mejor te pide que guardes el proyecto .dev y los archivos generados .c y .h, el DLL será guardado en la misma carpeta o si quieres indicarlo y su nombre en proyecto->opciones de proyecto->construcción podras cambiarlos.
- Paso 2: Creación del VI
Se coge un nuevo VI, vamos al bloque de diagrama, y se coloca primero el vi Call Library Function Node, se puede encontrar en conectivity->libraries & executables. Y ya esta, así de facil, pero bueno para que el RUN funcione mejor lo colocaremos dentro de una estructura de caso en la cara True, controlado con un boton boleano, y todo dentro de un bucle Loop que puede ser controlado la parada tambien con el mismo botón.
- Paso 3: Rellenar Call Library Function Node
Se le da dos veces al VI o segundo botón configure:
- En Library Name or Path se pone la ruta de la DLL
- En función saldrá HelloWorld y sino la escribimos (pero ya vamos mal creo)
- Calling Conventions ponemos en C
- Parameter void eso lo escribimos nosotros (es decir que no devuelve nada)
- Type void.
Y ya está, abajo aparece la forma de la función void HelloWorld(void); Si no fuera una función de tipo no devolver nada el VI cambiaría de forma para poder conectar entradas o salidas.
Se acabó, a ejecutar el programa y suerte.


13 de Abril de 2009 a las 3:10 pm
Hola
Yo las Dlls las hago con el TurboExploer http://www.turboexplorer.com/ que es gratuito, pero pesa 200 megas. También se pueden hacer con el compilador gratuito que ofrece la Borland (el 5.5).
Saludos!
9 de Junio de 2009 a las 10:45 am
muchisimas gracias! Me ha sido realmente util.
18 de Junio de 2009 a las 7:57 pm
Hola que tal!!
Quiero conectar una cmaara canon power shot g9 y obtener las imagen a través de una ventana de LAbview, al parecer necesito algunas archivos dll para realizar este tipo de intefaces….me podrias ayudar o dar unos tips.
César Jiménez Calvillo.
20 de Junio de 2009 a las 11:32 am
Hola César.
Lo primero que veo de forma más fácil es ¿tu cámara tenía un software para verla como webcam o al conectarla se puede ver en “Mi PC” como webcam?, si es así seguro que puedes utilizar el código del post Labview Vision 0.5: código sencillo de cámara USB
y en el index aparecerá el nombre de la cámara para poder ser seleccionada.
Si no es así, no tiene software o no funciona tu cable usb (que seguro que se conecta así) búsca un driver genérico que te sirva como webcam, o algún programa de fotos que importe directamente de cámara de fotos… no sé, el caso es que si ves vídeo a través del PC con ella, seguro que aparece enumerada en la lista.
No creo que te sea más fácil encontrar (mucho menos hacer) una dll que contenga una función que llame a la secuencia de imágenes que actúe como vídeo. Si la encuentras pues ya sabes llamarla a través del función node (averiguando que tipo de dato hay que llamar a la función o te devuelve, que si array, que si puntero array, etc… para definirla al llamarla).
11 de Julio de 2009 a las 12:26 am
Esta bueno pero, como usar esa libreria con el mismo dev con un lengauje c o c++
11 de Julio de 2009 a las 12:37 pm
Pues como cualquier libreria, pones #include libreria (entre triangulo o comillas según la ubicación del archivo si carpeta por defecto o no) y ya esta, llama a tu función en el programa.
Es más he descubierto que poniendo solamente en el archivo .c delante de la funcion que queremos exportar, cuando definimos las funciones al principio, la palabra clave __declspec (dllexport) ya es funcion publica; luego se le da al botón de crear dll del programa que estemos utlizando para la compilación. Esta palabra clave puede variar ligeramente me parece de un programa a otro, pero en google se ve rapidamente.
20 de Julio de 2009 a las 9:26 pm
Hola oye puedo hacer un programa en builder y usarlo como describes en el labview 6.1? tengo que hacer un programa en labview pero se me hace mas complicado estoy acostumbrado a usar siempre el lenguaje C
Agradeceria mucho me sacaras de la duda !
De antemano gracias !
21 de Julio de 2009 a las 8:32 am
Puedes usar cualquier programa para hacer DLL, si sabes y te lo permite hacer. Para comprobrar que puse las funciones de forma públicas yo utilizo el programita Dependecy Walker.
Y si en Labview 6.1 puede hacer lo mismo para llamar una dll, creo que cambia la forma de hacer y el lugar desde la versión 7, pero tienes el Call Libray Function Node igualmente. Tambien exite el Code Interfaz Node (CIN) que tambien sirve para ejecutar código, pero la verdad que por mucho que he leido no he conseguido enterder como funciona.
Tambien recuerda que puedes utilizar código C o lenguaje de la misma forma estructurado con la estructura formula node, pero no se podrian poner includes aquí dentro, ni llamadas a funciones… Y en lenguaje matlab con MathScrpt Node, pero para este creo que hace falta el LabView que lo incluya un full…
bueno aquí hay un manual en ingles de llamar código externo con labview creo 6.0 y 6.1, vamos como utilizar los node que decia antes pero de forma más larga, tambien creando la dll desde el principio…
http://www.ni.com/pdf/manuals/370109a.pdf