Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Archivos de encabezado y de biblioteca compilada de C++ en Windows

Este ejemplo muestra cómo crear una interfaz de MATLAB® en una biblioteca de C++ para Windows® llamando a clibPublishInterfaceWorkflow. Para este ejemplo, el archivo de encabezado matrixOperations.hpp y el archivo de biblioteca de importación matrixOperations.lib definen la biblioteca. MATLAB proporciona los archivos de biblioteca en esta carpeta:

fullfile(matlabroot,"extern","examples","cpp_interface")

Para este ejemplo, la carpeta es:

ans = 
    "C:\Program Files\MATLAB\R2023a\extern\examples\cpp_interface"

Para crear una interfaz llamada matrixlib para esta biblioteca, siga estos pasos en un script de flujo de trabajo: genere un archivo de definición de biblioteca, defina las construcciones que faltan, cree la interfaz y, a continuación, pruébela. Si necesita iterar sobre el proceso de publicación, puede seguir pasos adicionales para restaurar los parámetros y activar el modo de ejecución fuera de proceso. A continuación, puede compartir su interfaz publicada con otros usuarios.

Crear script de flujo de trabajo

Desplácese a una carpeta que permita la escritura y llame a clibPublishInterfaceWorkflow. En el cuadro de diálogo, especifique el nombre del script de flujo de trabajo, por ejemplo, publishmatrixlib.mlx. El script de flujo de trabajo tiene pasos que ayudan a publicar la interfaz. Utilice el script para guardar los parámetros para publicar la interfaz. Puede utilizar el mismo script en todas las plataformas.

Nota

El script de flujo de trabajo permite generar, definir, crear y probar de forma repetida una interfaz durante varias sesiones de MATLAB. Sin embargo, el script no guarda modificaciones en los archivos de definición de biblioteca que se han vuelto a crear utilizando la opción Overwrite existing definition files.

Paso 1: GENERAR

Primero, genere el archivo de definición de biblioteca. El script de flujo de trabajo contiene la tarea Generate C++ Interface de Live Editor para este paso. Utilice esta tarea para seleccionar los archivos que componen la biblioteca y para establecer opciones para generar el archivo de definición de biblioteca.

Seleccionar archivos

El archivo de encabezado matrixOperations.hpp y el archivo de biblioteca matrixOperations.lib de Windows definen la biblioteca. El valor Library type es Headers and compiled library files, que es la configuración predeterminada.

Para establecer la ruta Library start path, examine la carpeta fullfile(matlabroot,"extern","examples","cpp_interface") y haga clic en Select Folder.

Para seleccionar el archivo de encabezado, haga clic en Browse para abrir el archivo matrixOperations.hpp.

El archivo de encabezado depende del archivo de encabezado cppshrhelp.hpp. Desplácese a la carpeta en Library start path y haga clic en Select Folder.

Para seleccionar el archivo de biblioteca compilada, examine la carpeta win64\mingw64 y abra el archivo matrixOperations.lib.

Seleccionar configuración

En este ejemplo, la opción de C++ compiler está establecida en MinGW64 Compiler (C++).

Cambie Name of interface library a matrixlib. Este nombre se usa con clib para llamar a la funcionalidad desde MATLAB. Por ejemplo, para crear un objeto de biblioteca Mat, desde la línea de comandos, introduzca:

clib.matrixlib.Mat

Compruebe que Output folder sea una carpeta que permita la escritura.

Seleccione la casilla de verificación Overwrite existing definition files para poder recrear el archivo de definición mientras desarrolla la interfaz.

Especificar configuración opcional de la biblioteca de C++

Crear la interfaz de esta biblioteca no requiere la configuración opcional de la biblioteca de C++.

Especificar configuraciones de definición opcionales

Crear la interfaz de esta biblioteca no requiere configuraciones de definición opcionales.

Mostrar los resultados

De forma predeterminada, cuando genera un archivo de definición, la función muestra las construcciones disponibles (clases y funciones de la biblioteca). Mientras desarrolla la interfaz, seleccione también la casilla de verificación Show unavailable constructs ver qué construcciones podrían necesitar más información e incluirla.

Generar archivo de definición

Haga clic en Generate definition file. El script muestra su progreso y crea el archivo de definición de biblioteca definematrixlib.m en la carpeta de salida especificada.

C++ compiler set to 'MinGW64 Compiler (C++)'.
Definition file definematrixlib.m contains definitions for 10 constructs supported by MATLAB.
- 5 constructs are fully defined.
- 5 constructs partially defined and commented out.

To include the 5 undefined constructs in the interface, uncomment and complete the definitions in definematrixlib.m.
To build the interface, call build(definematrixlib).
MATLAB Interface to matrixlib Library

Class clib.matrixlib.Mat

  Constructors:
    clib.matrixlib.Mat(clib.matrixlib.Mat)
    clib.matrixlib.Mat()

  Methods:
    uint64 getLength()
    
  No Properties defined

Functions
clib.matrixlib.updateMatByX(clib.matrixlib.Mat,int32)

Activar herramientas de desarrollo para su uso en varias sesiones

Mientras publica la interfaz, podría iterar sobre los pasos, cerrar y volver a abrir el script publishmatrixlib.mlx o reiniciar MATLAB. Siga las instrucciones en estas secciones para obtener ayuda con estos flujos de trabajo.

  • Conserve las variables del área de trabajo entre sesiones de MATLAB. En la sección Restore library definition, establezca la variable outputFolderPath en el valor del parámetro Output folder. Establezca la variable libraryNameForInterface en el parámetro de Name of interface library matrixlib. A continuación, ejecute la sección. Para obtener más información, consulte Restore Library Definition.

  • Considere ejecutar la sección Enable out-of-process execution mode. Utilizar este modo mientras desarrolla una interfaz elimina la necesidad de reiniciar MATLAB mientras hace pruebas. Después de llamar a la funcionalidad en su biblioteca, puede descargar la biblioteca ejecutando la sección Unload out-of-process library. Para obtener más información, consulte Load Out-of-Process C++ Library

Paso 2: DEFINIR

Cuando creó el archivo de definición de biblioteca, MATLAB informó de que cinco construcciones se han definido parcialmente. Para definir por completo la funcionalidad, edite el archivo definematrixlib.m. Para editar el archivo, ejecute la sección DEFINE.

Desplácese por el archivo de definición de biblioteca para encontrar bloques de código comentado para estas construcciones. MATLAB no puede determinar automáticamente el tamaño de los argumentos usados por estas funciones.

  • setMat: método C++ para la clase Mat

  • getMat: método C++ para la clase Mat

  • copyMat: método C++ para la clase Mat

  • addMat: función de paquete C++

  • updateMatBySize: función de paquete C++

En función de la documentación de la biblioteca de matrixOperations, puede proporcionar valores para <SHAPE> en las instrucciones de definición del argumento. Para obtener más información, consulte Define Missing SHAPE Parameter.

  1. Para cada construcción, elimine el comentario de las instrucciones que lo definen.

  2. Reemplace los argumentos <SHAPE> por estos valores.

    Construcción

    Nombre de argumento

    Definición de argumento C++

    Descripción

    Reemplazo de <SHAPE> por un valor

    setMatsrcint [] src

    La longitud de la matriz se define por el argumento de entrada len.

    "len"
    getMatRetValint const *

    La longitud del argumento de salida se define por el argumento de entrada len.

    "len"
    copyMatdestint * dest

    La longitud de dest se define por el argumento de entrada len.

    "len"
    addMatmatMat const * mat

    La función utiliza un solo argumento mat.

    1
    updateMatBySizearrint * arr

    La longitud de arr se define por el argumento de entrada len.

    "len"
  3. Guarde y cierre el archivo de definición.

  4. Para validar las modificaciones realizadas en el archivo, ejecute la sección Confirm edits and run summary. Solucione los errores indicados en el archivo. La función summary muestra que la interfaz incluye ahora los valores setMat, getMat, copyMat, addMat y updateMatBySize.

MATLAB Interface to matrixlib Library

Class clib.matrixlib.Mat

  Constructors:
    clib.matrixlib.Mat(clib.matrixlib.Mat)
    clib.matrixlib.Mat()

  Methods:
    setMat(clib.array.matrixlib.Int)
    clib.array.matrixlib.Int getMat(uint64)
    uint64 getLength()
    copyMat(clib.array.matrixlib.Int)

  No Properties defined

Functions
int32 clib.matrixlib.addMat(clib.matrixlib.Mat)
clib.matrixlib.updateMatByX(clib.matrixlib.Mat,int32)
clib.matrixlib.updateMatBySize(clib.matrixlib.Mat,clib.array.matrixlib.Int)

Paso 3: CREAR

Para crear la interfaz matrixlib en la biblioteca, ejecute la sección BUILD del script.

Building interface file 'matrixlibInterface.dll' for clib package 'matrixlib'.
Interface file 'matrixlibInterface.dll' built in folder 'C:\Users\Documents\MATLAB\matrixlib'.

To use the library, add the interface file folder to the MATLAB path.
addpath('C:\Users\Documents\MATLAB\matrixlib')

Nota

Puede repetir los pasos para generar, definir y crear. Sin embargo, una vez que haya mostrado ayuda para funciones de la biblioteca o las haya llamado, no puede actualizar el archivo de definición definematrixlib en la misma sesión de MATLAB. Reinicie MATLAB o cree un nuevo archivo de definición cambiando el parámetro Name of interface library en la sección Select configuration.

Paso 4: PROBAR

Configurar y copiar bibliotecas de tiempo de ejecución

Ejecute la sección Set up and copy run-time libraries. Esta biblioteca no tiene dependencias de tiempo de ejecución adicionales, por lo que no necesita modificar los comandos.

Activar el modo de ejecución fuera de proceso

Si el archivo de definición tiene que cambiar, ejecute este comando para configurar la posibilidad de llamar a la biblioteca de interfaces fuera de proceso para que no tenga que reiniciar MATLAB. Para obtener más información, consulte Load C++ Library In-Process or Out-of-Process.

Llamar a la ayuda en la biblioteca de interfaces

Para mostrar ayuda para la biblioteca de interfaces, ejecute la sección Call help on interface library.

Escribir código para llamar a la biblioteca de interfaces y probarla

Utilice la sección de código en Write code to call and test interface library para escribir estas pruebas:

matObj = clib.matrixlib.Mat;   % Create a Mat object
intArr = [1,2,3,4,5];
matObj.setMat(intArr);     % Set the values to intArr
retMat = matObj.getMat(5)  % Display the values
retMat = 

  read-only clib.array.matrixlib.Int with properties:

    Dimensions: 5
     Resizable: 0

Compartir una interfaz

Para compartir la interfaz con otro usuario de MATLAB, cree un archivo (.mltbx) de instalación de la toolbox. Utilizando las instrucciones en Distribute MATLAB Interface to C++ Library:

  • Establezca la carpeta de la toolbox en su carpeta matrixlib, que contiene el archivo de interfaz matrixlibInterface.dll.

  • Ponga el archivo de biblioteca compilada matrixOperations.dll en la misma carpeta.

  • Identifique el espacio de nombres (sintaxis de llamada) como clib.matrixlib.

Consulte también

Temas relacionados