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 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.
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 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 interfazmatrixlibInterface.dll
.Ponga el archivo de biblioteca compilada
matrixOperations.dll
en la misma carpeta.Identifique el espacio de nombres (sintaxis de llamada) como
clib.matrixlib
.