簡體   English   中英

從mex訪問Matlab Struct

[英]Access Matlab Struct from mex

我有一個Matlab的結構傳遞給了mex。 它正確傳遞,我用mxGetClassName(mxArray_pointer_carrying_struct)進行了驗證,該函數返回struct作為類類型。 該結構具有15個字段和相應的屬性,全部為30個字符串(15個property_names,15個property_values)。

我可以使用mxGetFieldNameByNumber(mxArray_pointer_carrying_struct,index)訪問屬性名稱;

如何訪問屬性值?

我上面要做的代碼如下:

extract_settings(const mxArray *p)
{
    mwIndex j = 1;
    const char *property;
    mexPrintf("\nInput Arg %i is of type:%s\n",j,mxGetClassName(p));
    for(int i = 0;i<=14;i++)
    {
        property = mxGetFieldNameByNumber(p, i);  %gets property names
        mexPrintf("%s-- \n",property); %Displays 15 property names
    }
}

我的結構看起來如下:

{ 
TRIGGER_POLARITY : LEVEL_LOW
EDGE : EDGE_RISING 
. 
.
. (15 elements as of now)
}

您可能正在尋找mxGetFieldByNumber 還有一個完整的示例,可將結構傳遞給MATLAB隨附的MEX文件,請參閱Mathworks的本文檔 您可以按以下方式在MATLAB中加載示例:

edit([matlabroot '/extern/examples/refbook/phonebook.c']);

編輯:還有mxGetField ,您可以使用它的名稱訪問該字段。

EDIT2:要將結果從mxGetField轉換為C字符串,可以使用mxArrayToString 請注意,使用完字符串后,需要釋放該字符串的內存。 您可以使用mxIsChar來檢查該字段是否包含MATLAB字符數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM