C++ を使用したことがある場合、emxArray
データ型は生成された C のstd::vector
. つまり、これは生成されたコードが動的に割り当てられた配列を表す方法です。それらは、データとサイズのポインター、およびその他のいくつかの詳細を保存します。
コードを生成したディレクトリを見ると、 という名前のファイルが見つかるはずです<functionName>_emxAPI.h
。このファイルは、値の構築と破棄emxArray
をより簡単にするいくつかのユーティリティ関数を宣言します。それらを使用して値を作成emxArray
すると、すべてのフィールドが適切に初期化され、コードがemxArray
型に変更される可能性がなくなります。
値の配列を取り、uint32
そのような配列を返す私が作成した例では、次の関数が表示されます。
extern emxArray_uint32_T *emxCreateWrapperND_uint32_T(unsigned int *data, int
numDimensions, int *size);
extern emxArray_uint32_T *emxCreateWrapper_uint32_T(unsigned int *data, int rows,
int cols);
extern emxArray_uint32_T *emxCreateND_uint32_T(int numDimensions, int *size);
extern emxArray_uint32_T *emxCreate_uint32_T(int rows, int cols);
extern void emxDestroyArray_uint32_T(emxArray_uint32_T *emxArray);
emxArray
最初の 4 つの関数は、さまざまな状況で値を作成するために使用できます。
最初のペア、つまりemxCreateWrapper_uint32_T, emxCreateWrapperND_uint32_T
を使用しuint32
emxArray
て、指定された数の次元とサイズで既存のデータから を作成できます。そのため、すでに入力データがメモリに割り当てられている場合、これらの関数は、データにemxArray
追加のメモリを割り当てることなく、指定されたサイズの にそのデータをラップします。
/* Create a 10-by-10 C array of uint32 values and wrap an emxArray around it */
uint32_T x[100];
emxArray *pEmx = NULL;
int k = 0;
for (k = 0; k < 100; k++) {
x[k] = (uint32_T) k;
}
pEmx = emxCreateWrapper_uint32_T(x, 10, 10);
/* Use pEmx here*/
/* Deallocate any memory allocated in pEmx. */
/* This DOES NOT free pEmx->data because the "wrapper" function was used */
emxDestroyArray_uint32_T(pEmx);
2 番目のペア、つまりemxCreate_uint32_T, emxCreateND_uint32_T
も値を作成しemxArray
ます。ただしdata
、emxArray
. このメモリは、それぞれのサイズ引数で指定された要素数を保持するのに十分な大きさになります。これらを呼び出した後、返された構造体のdata
フィールドに格納されたデータを設定する必要があります。emxArray
/* Allocate a 10-by-10 uint32 emxArray and fill the values */
int k = 0;
emxArray *pEmx = emxCreate_uint32_T(10, 10);
for (k = 0; k < 100; ++k) {
pEmx->data[k] = (uint32_T) k;
}
/* Use pEmx here*/
/* Deallocate any memory allocated in pEmx. */
/* This DOES free pEmx->data */
emxDestroyArray_uint32_T(pEmx);
最後の ,emxDestroyArray_uint32_T
は、配列を破棄し、前のメソッドによって割り当てられたメモリの割り当てを解除するために使用されます。
最後に、出力をキャプチャするために、適切な場所で 1 つ以上のサイズに 0 を渡すことにより、適切な次元数で空の値を作成するためにemxCreate_struct_T
orを使用できます。生成されたコードは、実行時に結果のデータを出力に保持するのに十分なメモリを割り当てます。次に、この出力のフィールドをチェックして、フィールドのディメンションのサイズを表示し、必要に応じてデータを抽出できます。emxCreateND_struct_T
emxArray
struct_T
emxArray
size
emxArray
data
emxArray
引数の使用に関するドキュメントは、こちらから入手できます。