How to use coder.ceval to call a void type C++ function
显示 更早的评论
Hi,
I am trying to call an external C++ function, which is a void type function. Here is the code I wrote as an example
function [Y] = example(a,b)
coder.updateBuildInfo('addSourceFiles','cpp_fun.cpp');
coder.cinclude('cpp_fun.h');
coder.ceval('cpp_fun', a, b, Y);
end
The C++ function is defined as:
void cpp_fun(int a, float *b, float *Y);
Here int a, float *b are input of the function and *Y is suppose to be the output of the C++ function.
But when I use the Matlab Coder to convert the matlab function above, I get the following error message: "Variable 'Y' is not fully defined on some execution paths."
Shoud I use something like
Y = coder.opaque(type)
in the matlab function to define Y? If yes, what type should I use for Y?
Any help is greatly appreciated!
回答(1 个)
Darshan Ramakant Bhat
2021-4-2
Try defining the variable 'y' in MATLAB function then try to use coder.wref()
Y = 0;
coder.ceval('cpp_fun', a, b, coder.wref(Y));
Similarly you may need to use coder.ref() for the second input 'b' since it is a pointer.
Hope this will help you.
2 个评论
Erjian
2021-4-2
Darshan Ramakant Bhat
2021-4-5
You need to use proper types at the interface. From the error I can see that you are passing "y" as pointer but in C++ code you are taking by value. This is giving the error. Also type of "y" is real_T, you need to make it as float.
I have modified your example and made it work. Please check the attached file and run doit.m file.
Hope this will help you.
类别
在 帮助中心 和 File Exchange 中查找有关 MATLAB Coder 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
