How do I pass a string from a C++ Mex file to the MATLAB workspace?
Show older comments
I am trying to pass a string from a C++ Mex file I am working on to the MATLAB workspace for plotting purposes. It is a fairly complicated program, but all I want to do is pass a std::string in my MexFunction (which I defined as "var") to the MATLAB workspace. This is the important part of the code:
#include "mex.hpp"
#include "mexAdapter.hpp"
using namespace matlab::data;
using namespace matlab::engine;
using namespace std;
using matlab::mex::ArgumentList;
// "some code here" //
class MexFunction : public matlab::mex::Function{
public:
void operator()(ArgumentList outputs, ArgumentList inputs){
std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine();
ArrayFactory factory;
// "more code here" //
for(int i = 0; i < 100; i++){
std::vector<ToolData> toolData = apiSupportsBX2 ? capi.getTrackingDataBX2() : capi.getTrackingDataBX();
for (int i = 0; i < toolData.size(); i++)
{
std::string var = toolDataToCSV(toolData[i]);
std::cout << var << std::endl;
// Pass "var" to MATLAB here //
}
usleep(5000);
}
matlabPtr->eval(u"printData = true");
// "more code here" //
std::cout << "Press Enter to continue...";
std::cin.ignore();
}
};
I'm fairly new to C++/MATLAB-implementations and don't have that much experience with Mex file programming, so thanks in advance!
Accepted Answer
More Answers (1)
Sreelakshmi S.B
on 6 May 2019
0 votes
You can convert var to an mxArray and use 'engPutVariable' to write the mxArray into the Matlab Engine Worspace.You can find details about using this function in C and Fortran at this link: https://in.mathworks.com/help/matlab/apiref/engputvariable.html
This will work with C++ too.
2 Comments
André C. D.
on 6 May 2019
Edited: André C. D.
on 6 May 2019
Sreelakshmi S.B
on 7 May 2019
"The MATLAB Data API supports modern C++ features and is not compatible with the C Matrix API" ------- as taken from the official documentation page.This is why the initial error is happening.
You can try using 'setVariable' instead.This link has more details on how to go about doing that:
Categories
Find more on Write C++ Functions Callable from MATLAB (MEX Files) in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!