- https://www.mathworks.com/help/simulink/sfg/integrating-existing-c-functions-into-simulink-models-with-the-legacy-code-tool.html
- https://www.mathworks.com/help/simulink/slref/c-object-methods-as-legacy-functions.html
How to call a function within a class in legacy code tool structure?
5 views (last 30 days)
Show older comments
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?
0 Comments
Answers (1)
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!
0 Comments
See Also
Categories
Find more on C++ with MATLAB in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!