Archivos de encabezado y archivos fuente de C++
Este ejemplo muestra cómo crear una interfaz de MATLAB® en una biblioteca de C++ declarada en el archivo de encabezado matrixOperations.hpp
y definida en el archivo fuente de C++ matrixOperations.cpp
llamando a clibPublishInterfaceWorkflow
.
MATLAB proporciona los archivos fuente 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"
Crear script de flujo de trabajo
Desplácese a una carpeta que permite la escritura (por ejemplo, C:\work\publish
) 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 fuente matrixOperations.cpp
de Windows® definen la biblioteca. Seleccione Headers and source files
como Library type.
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, utilice el botón de examinar 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 fuente de respaldo, utilice el botón de examinar para abrir el archivo matrixOperations.cpp
.
Seleccionar configuración
En este ejemplo, la opción de C++ compiler está establecida en MinGW64 Compiler (C++)
.
La opción de Name of interface library predeterminada es matrixOperations
. 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, escriba:
clib.matrixOperations.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++
Seleccione el parámetro Treat .h files as C header files.
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 para 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 definematrixOperations.m
en la carpeta de salida especificada.
C++ compiler set to 'MinGW64 Compiler (C++)'. Definition file definematrixOperations.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 definematrixOperations.m. To build the interface, call build(definematrixOperations).
MATLAB Interface to matrixOperations Library Class clib.matrixOperations.Mat Constructors: clib.matrixOperations.Mat(clib.matrixOperations.Mat) clib.matrixOperations.Mat() Methods: uint64 getLength() No Properties defined Functions clib.matrixOperations.updateMatByX(clib.matrixOperations.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 variablelibraryNameForInterface
en el parámetro de Name of interface librarymatrixlib
. 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.
Definir construcciones faltantes
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 claseMat
getMat
: método C++ para la claseMat
copyMat
: método C++ para la claseMat
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.
Para cada construcción, elimine el comentario de las instrucciones que lo definen.
Reemplace los argumentos
<SHAPE>
por estos valores.Construcción
Nombre de argumento
Definición de argumento C++
Descripción
Reemplazo de
<SHAPE>
por un valorsetMat
src
int [] src
La longitud de la matriz se define por el argumento de entrada
len
."len"
getMat
RetVal
int const *
La longitud del argumento de salida se define por el argumento de entrada
len
."len"
copyMat
dest
int * dest
La longitud de
dest
se define por el argumento de entradalen
."len"
addMat
mat
Mat const * mat
La función utiliza un solo argumento
mat
.1
updateMatBySize
arr
int * arr
La longitud de
arr
se define por el argumento de entradalen
."len"
Guarde y cierre el archivo de definición.
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 valoressetMat
,getMat
,copyMat
,addMat
yupdateMatBySize
.
MATLAB Interface to matrixOperations Library Class clib.matrixOperations.Mat Constructors: clib.matrixOperations.Mat(clib.matrixOperations.Mat) clib.matrixOperations.Mat() Methods: setMat(clib.array.matrixOperations.Int) clib.array.matrixOperations.Int getMat(uint64) uint64 getLength() copyMat(clib.array.matrixOperations.Int) No Properties defined Functions int32 clib.matrixOperations.addMat(clib.matrixOperations.Mat) clib.matrixOperations.updateMatByX(clib.matrixOperations.Mat,int32) clib.matrixOperations.updateMatBySize(clib.matrixOperations.Mat,clib.array.matrixOperations.Int)
Paso 3: CREAR
Para crear la interfaz matrixOperations
en la biblioteca, ejecute la sección BUILD del script.
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
matrixOperations
, que contiene el archivo de interfazmatrixOperationsInterface.dll
.Ponga el archivo de biblioteca compilada
matrixOperations.dll
en la misma carpeta.Identifique el espacio de nombres (sintaxis de llamada) como
clib.matrixOperations
.