Transmit a Structure from MATLAB to C

조회 수: 1 (최근 30일)
Ziyu Hua
Ziyu Hua 2022년 1월 19일
댓글: James Tursa 2022년 1월 19일
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.

채택된 답변

Ziyu Hua
Ziyu Hua 2022년 1월 19일
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
James Tursa
James Tursa 2022년 1월 19일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Write C Functions Callable from MATLAB (MEX Files)에 대해 자세히 알아보기

태그

제품


릴리스

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by