2

私はMexに渡されたMatlabからの構造を持っています。正しく渡されます。クラス型として構造体を返す mxGetClassName(mxArray_pointer_carrying_struct) で確認しました。構造体には 15 個のフィールドと対応するプロパティがあり、すべて 30 個の文字列 (15 個のプロパティ名、15 個のプロパティ値) があります。

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)
}
4

1 に答える 1

5

おそらく探しているのはmxGetFieldByNumber. MATLAB に同梱されている MEX ファイルに構造体を渡す完全な例もあります。Mathworks のこのドキュメントを参照してください。次のように、例を MATLAB に読み込むことができます。

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

編集:mxGetField名前を使用してフィールドにアクセスできるものもあります。

EDIT2: からの結果をmxGetFieldC 文字列に変換するには、 mxArrayToString. 文字列を使用した後は、文字列のメモリを解放する必要があることに注意してください。を使用mxIsCharして、フィールドに MATLAB 文字配列が含まれているかどうかを確認できます。

于 2013-03-01T07:07:04.050 に答える