私は、2 つのリストを受け入れる関数を使用して、MathLink アプリケーションを開発しています。
:Pattern: g[zi_List, fi_List]
手動で関数に引き込むつもりでした。どちらのリストも実数または複素数のいずれかであり、いずれかのパラメーターが複素数の場合、結果は複素数になります。さらに、fi
正方行列のリストにすることもできますがzi
、1 次元のリストのままです。
MathLink C API内で使用する最も単純な関数は、配列の最も内側にあるようにMLGetReal64Array
、実数と複素数の両方のデータ型を処理できる関数です。また、複雑さが決定されたら、必要に応じて配列をC99 複合型にキャストできます。現在、は non-rectangular を処理しないため、各要素は他の要素の次元を持ち、同じ型 (実数または複素数) である必要があります。ただし、奇妙なことに、単一のパラメーターを受け入れる関数では、最も外側の要素として1 つの要素を持つデータ構造が返されます。つまり、C 側で return を入力します。Complex
Head
std::complex<double>
MLGetReal64Array
Lists
List
List
MLGetReal64Array
List
h[ {1, 3, 5} ]
List[List[1,3,5]]
のような 2 つのリスト関数の場合g
、 を 1 回呼び出すと、MLGetReal64Array
両方のパラメータが同時に返されます。つまり、 receive が返されg
ますList[ zi, fi ]
。構造と要素の型を統一するために各リストを前処理する予定なので、両方の要素の型が同じであることを確認しても問題ありません。fi
しかし、行列のリストにしたいのですMLGetReal64Array
が、MLEGSQ: MLGet() called out of sequence
エラーが発生します。
だから、私の質問は: を使用MLGetReal64Array
して両方のリストを取得できますか? どうすればいいですか?そして、私が使えない場合MLGetReal64Array
、私の代替手段は何ですか?
MLGetReal64Array
構造が正しければ、各パラメーターに使用できるようにすることで、外側List
をリンクから外すことができると考えています。今のところ、まだ試していません。しかし、それまでの間、何か提案をいただければ幸いです。MLGetFunction
MLGetReal64Array