Llamando a una biblioteca enlazada dinámicamente (DLL) desde LabVIEW

Actualizado el Nov 8, 2020

Ambiente

Software

  • LabVIEW

Lenguaje de Programación

  • C++
  • C
  • C# .NET

Tengo un programa / API escrito en C / C ++ y quiero poder llamarlo en LabVIEW. Una vez que haya creado una Librería Enlazada Dinámicamente (DLL) con mi código C, ¿cómo puedo llamar ese DLL desde LabVIEW?

Para llamar a una  Librería Enlazada Dinámicamente (del inglés Dynamically Linked Library  o DLL) , primero debe identificarse si la biblioteca es un DLL de C / C ++ o de Microsoft .NET Assembly . Un DLL de .NET también es denominado como un .NET assembly y es útil al programar sobre .NET. Un DLL de .NET utiliza el Lenguaje de Ejecución Común (Common Language Runtime o CLR en inglés) y el .NET Framework para administrar las funciones dentro del DLL.

Si el DLL es un DLL de C / C ++:
  1. Busque el archivo de cabecera (* .h) o dónde se hayan definido las funciones prototipo.
  2. Identifique las funciones que desea llamar. Observe si los parámetros para la función contienen parámetros de tipo de datos primitivos como int, char, double, etc. o si contienen tipos de datos complejos como una estructura, matriz o vector.
  3. Si la función no contiene ningún tipo de datos complejos y usted tiene un archivo de encabezado (* .h), puede usar el Asistente para importar biblioteca compartida (Import Shared Library Wizard en inglés) para crear una biblioteca de LabVIEW que contenga las funciones en el archivo de encabezado. Puede encontrar esta opción en Tools»Import»Shared Library (.dll)... Continúe con el asistente.
  1. Si no tiene el archivo de cabecera, deberá usar el VI Call Library Function Node junto con la documentación adecuada del .DLL. La siguiente imagen muestra la ubicación del VI en la paleta de funciones:
  1. Haga doble clic en el Call Library Function Node para configurarlo. En la pestaña Function de la ventana de configuración, ingrese la ruta del DLL y seleccione la función a la que desea llamar.

 
  1. Si la función que desea llamar contiene estructuras de datos complejas, deberá definir manualmente el prototipo de la función dentro del cuadro de diálogo del Call Library Function Node (si el DLL ha sido compilado con una biblioteca de tipos, los parámetros y los tipos de retorno serán definidos automáticamente). Navegue a la pestaña Parameters en la ventana de configuración. Aquí agregará parámetros y modificará los datos de retorno hasta que el prototipo de la función en la parte inferior de la ventana coincida con la definición de función del DLL.

Si el DLL es un .NET assembly :
  1. Para usar un .NET assembly en LabVIEW, simplemente use la paleta .NET ( Connectivity».NET) para encontrar todas las funciones disponibles.
  2. Primero use un Nodo Constructor (Constructor Node en inglés) para crear una instancia de una clase dentro del .NET assembly. Esto se puede hacer haciendo doble clic en el Constructor Node para abrir el cuadro de diálogo Select .NET Constructor.
  1. Use los property nodes e invoke nodes para acceder a las propiedades y métodos de la clase simplemente conectando la referencia de clase desde el Constructor Node al property node o invoke node correspondiente.

Additional Information

Tenga en cuenta que si utiliza una estructura de datos compleja con mútiples tipos de datos primitivos (int, double, char ), puede crear un DLL envoltorio a partir de un lenguaje basado en C para simplificar las llamadas a las funciones. Las construcciones de C / C ++ no siempre se correlacionan directamente con los tipos de datos de LabVIEW, y un DLL envoltorio puede extraer adecuadamente el contenido de la estructura y traducirlo a términos primitivos. Por ejemplo, un DLL puede utilizar una estructura en C que contiene un char * (una cadena o una matriz de caracteres). Su DLL envoltorio puede contener una función de envoltorio con el parámetro achar * que coloca al char * en una estructura, y luego a su vez llama al DLL original. En LabVIEW, en su lugar puede llamar a las funciones DLL de contenedor. Alternativamente, si tiene el código fuente de la DLL, puede modificar la DLL directamente para que tome un char * en lugar de una estructura.

El buscador de ejemplos de LabVIEW tiene ejemplos completos y funcionales de cómo llamar correctamente código externo a LabVIEW. Ver Help >> Find Examples >> Communicating with External Applications.