c++ - MATLAB array conversion with clibgen
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hello,
I am binding my c++ toolsets to MATLAB. The code is very Object Oriented so I cannot just use simple mex functions and have to use clibgen.
Ideally I'd only need 2 functions: one that convert 1D MATLAB array into c++ vectors, and another one converting c++ vectors to 1D MATLAB array. The first eventually work (with data copy, not references), but getting a vector out does not.
Here is a simple example, on Windows with minGW installed through MATLAB:
// c++ code in main.hpp file:
#include "MatlabDataArray.hpp"
// DUmmy function adding 5 to an array
matlab::data::Array add5(std::vector<double> foo)
{
std::vector<double> bar(foo);
for(auto &v:bar)
v+=5;
matlab::data::ArrayFactory fac;
return fac.createArray({bar.size()}, bar.begin(),bar.end());
}
// MATLAB side:
% getting the library path
library_files = [fullfile(matlabroot,"extern","lib","win64","mingw64","libMatlabDataArray.lib"),...
fullfile(matlabroot,"extern","lib","win64","mingw64","libMatlabEngine.lib")];
% generating headers
clibgen.generateLibraryDefinition("main.hpp",... % Headers
"OverwriteExistingDefinitionFiles",true, ...
"Libraries",library_files, ... % Uses the MATLAB libraries (.lib linked to MinGW)
PackageName="test"); % in clib, the package will be ingested as DAGGER
% compiling and adding to path
build(definetest);
addpath("test");
% Then generating MATLAB array
arr = zeros(1,5)+2;
% adding 5 to each elements
arr2 = clib.DAGGER.add5(arr);
% so far so good
% But the following line throw an error:
arr2 + arr
arr2 is not a MATLAB array and cannot be used in simple operation with other arrays, or figures, ...
I get errors like that...
Operator '+' is not supported for operands of type 'clib.test.matlab.data.Array'
The real questions are: Is there a way, on the c++ side to return MATLAB arrays usable in MATLAB (eventually without data copy)? and is there an easy way to convert it back from MATLAB (although it would add a LOT of code overhead)?
Thanks in advance,
B.
0 comentarios
Respuestas (1)
Divyanshu
el 23 de Mzo. de 2023
According to the code snippet of “main.hpp” file, you are trying to create a MATLAB array using ArrayFactory and want to transfer it to the MATLAB workspace from C++ program.
You can go through the following documentation which explains in detail that how one can use the array created in C++ in the MATLAB workspace. Moreover, it has an example with code where an array is created in C++ and is then moved to the workspace of MATLAB and after certain calculations the result is fetched from MATLAB workspace and displayed in the C++ program.
0 comentarios
Ver también
Categorías
Más información sobre Build MATLAB Interface to C++ Library en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!