I have a C++ DLL and its header file. I'm trying to build a MEX function for each function in the DLL, and one of the functions has the following signature: % // This is from the C++ header file int myFunc( const char * const Input1, SomeStructType * Output1, int & Output2); { ... } When I try to build a MEX in defining the inputs in my MATLAB workspace and then I run this command: myFuncReturnValue = coder.ceval('myFunc', coder.ref(Input1), coder.ref(Output1), ***???***) The error i get is: ...error C2664: 'int myFunc( const char * const Input1, SomeStructType * Output1, int & Output2)': cannot convert argument 3 from 'int16_t' to 'int &'... I couldn't find any help defining 'int &' as a MATLAB datatype so i can't pass it into the MEX builder.
Kshitij Singh answered .
2025-11-20
int myFunc(int& out);
myFunc.cpp
#include "myFunc.hpp"
int myFunc(int& out)
{
out = 2;
return 5;
}
myFuncWrapper.hpp
#include "myFunc.hpp"
inline int myFuncWrapper(int* out) {
return myFunc(*out);
};
callMyFuncWrapper.m
function y = callMyFuncWrapper %#codegen
y = int32(0);
if coder.target('MATLAB')
% Executing in MATLAB, call MATLAB equivalent of
% C function myFuncWrapper
y = int32(5 + 2);
else
% Executing in generated code, call C function myFuncWrapper
coder.updateBuildInfo('addSourceFiles','myFunc.cpp');
coder.cinclude('myFuncWrapper.hpp');
in = int32(0);
y = coder.ceval('myFuncWrapper', coder.ref(in));
y = y + in;
end
end
Call codegen
>> codegen callMyFuncWrapper -report -lang:c++