How to call a function within a class in legacy code tool structure?

5 views (last 30 days)
Hello,
I do have a .cpp file that I want to integrate with Matlab through legacy code tool. My original code involves functions defined within a class, what is the proper way to write "def.OutputFcnSpec" command?

Answers (1)

Shantanu Dixit
Shantanu Dixit on 13 Jan 2025
Edited: Shantanu Dixit on 13 Jan 2025
Hi Eiman,
To integrate a class method from a '.cpp' file with MATLAB using the 'Legacy Code Tool', you can create a wrapper function for the class method. This wrapper acts as an intermediary between MATLAB and the C++ class, allowing to reference it in the 'def.OutputFcnSpec' command.
Below is an example snippet for invoking C++ function using Legacy Code Tool:
Header File ("MyClass.h")
#ifndef _MYCLASS_H_
#define _MYCLASS_H_
class MyClass {
private:
int state;
public:
MyClass() : state(0) {}
int increment(int val) { state += val; return state; }
};
extern MyClass* myInstance;
extern void createMyClass(); // Creates the instance
extern void deleteMyClass(); // Deletes the instance
extern int incrementWrapper(int val); // Wrapper for 'increment' method
#endif /* _MYCLASS_H_ */
Source File ("MyClass.cpp")
#include "MyClass.h"
MyClass* myInstance;
void createMyClass() { myInstance = new MyClass(); }
void deleteMyClass() { delete myInstance; }
int incrementWrapper(int val) { return myInstance->increment(val); }
MATLAB Legacy Code Tool usage
% Initialization
def = legacy_code('initialize');
def.SFunctionName = 'sfun_myclass';
def.StartFcnSpec = 'createMyClass()';
% Referencing the wrapper function
def.OutputFcnSpec = 'int32 y1 = incrementWrapper(int32 u1)';
def.TerminateFcnSpec = 'deleteMyClass()';
def.HeaderFiles = {'MyClass.h'};
def.SourceFiles = {'MyClass.cpp'};
def.Options.language = 'C++';
% Generate the S-Function for Simulink
legacy_code('generate_for_sim', def);
You can also refer to the useful MathWorks documentation on Integrating C/C++ code using Legacy Code Tool
Hope this helps!

Categories

Find more on C++ with MATLAB in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!