Transmit a Structure from MATLAB to C

1 vue (au cours des 30 derniers jours)
Ziyu Hua
Ziyu Hua le 19 Jan 2022
Commenté : James Tursa le 19 Jan 2022
Hello everyone. I want to transmit a MATLAB structure to C. Like:
a.para1=1;
a.para2=2;
...
In my C code, I want to use these parameters to do my futher work. The current code I used is
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
double *pointerlhs, *pointerrhs[2]; /* pointer to real data in new array */
mwSize index;
/* Check for proper number of arguments. */
if (nrhs != 1) {
mexErrMsgTxt("This function takes one input arguments.");
}
/* Create an m-by-n mxArray; you will copy existing data into it */
plhs[0] = mxCreateNumericMatrix(1, 2, mxDOUBLE_CLASS, mxREAL);
//pointerrhs[1] = mxGetPr(prhs[0]);
pointerlhs = mxGetPr(plhs[0]);
/* Copy data into the mxArray */
for (index = 0; index < 2; index++) {
pointerrhs[index]= mxGetPr(prhs[index]);
pointerlhs[index] = *pointerrhs[index];
}
return;
}
which meed to tramsmit the value of the structure one by one like:
Transmit_Function(a.para1,a.para2...)
How can I get all parameters in a structure while just use one input in my MATLAB code. Like:
Transmic_Function(a)
Then I can get and use all the paramters in a.
Thanks.

Réponse acceptée

Ziyu Hua
Ziyu Hua le 19 Jan 2022
This can be realized by MATALB C API function "mxGetField"
#if !defined(_WIN32)
#define dgesv dgesv_
#endif
#include "mex.h"
#include"matrix.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
if (mxIsStruct(prhs[0]))
{
double *pointer, *pointerrhs;
mxArray *StructValue = mxGetField(prhs[0], 0, "a");
plhs[0] = mxCreateNumericMatrix(1, 1, mxDOUBLE_CLASS, mxREAL);
pointer = mxGetPr(plhs[0]);
pointer[0] = *(mxGetPr(StructValue));
}
else
{
mexErrMsgTxt("The Input is Not a Struct");
}
}
  1 commentaire
James Tursa
James Tursa le 19 Jan 2022
This will not work. The variable name is "a", but the field names are "para1" and "para2". You need to use the field names in your mxGetField( ) call, not "a". Also your code is overly complicated and does not contain argument checking so it will crash with invalid inputs.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Write C Functions Callable from MATLAB (MEX Files) dans Help Center et File Exchange

Tags

Produits


Version

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by