How to convert C struct from mxArray pointer of structs?

3 visualizzazioni (ultimi 30 giorni)
If I have in C file
struct FooInner {
double Bar;
int32 Baz;
};
struct Foo {
struct FooInner inner;
....
};
which is called via Matlab SDK C Compiler with following code:
if (mlxDo_smth_api(n_out, out, n_in, in))
{
mxArray *fooArrPtr = mxGetData(out[0]);
for (int i = 0; i < 100; i++)
{
struct FooInner *fooInnerPtr = (struct FooInner *) mxGetPr(fooArrPtr);
printf("Bar = %f, baz = %d\n", fooInnerPtr->Bar, fooInnerPtr->Baz);
}
}
then I'm getting random numbers. I know how to parse a single struct fields from Matlab (need to mxGetData and cast it to proper struct field data type), however, how to do with array of structs? I can't increment fooArrPtr as well -- giving me error that I can't increment mxArray.
  2 Commenti
James Tursa
James Tursa il 8 Ago 2022
Modificato: James Tursa il 8 Ago 2022
Where is out[0] coming from? Unless you have something very strange going on, it looks like you are mixing mxArray struct types with native C struct types, which I wouldn't expect to work. That is, the result of the mxGetData(out[0]) might be an mxArray pointer if out[0] is a an mxArray cell or struct, but then the result of the mxGetPr(fooArrPtr) call I would definitely not expect to be a native C struct type. Hence my question.
Sabyrzhan Tasbolatov
Sabyrzhan Tasbolatov il 8 Ago 2022
I'm gathering information from Matlab function like
function [output] = MyFunc(in1, in2)
..
output = struct('inner', {}, 'smth', {})
..
output{ii}.inner = inner_result
end
Thanks for pointing out not to mix mxArray with C struct. Will reformat to collect result into flatten array of values, rather than array of structs for output.

Accedi per commentare.

Risposte (0)

Categorie

Scopri di più su MATLAB Compiler SDK in Help Center e File Exchange

Prodotti


Release

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by