TAPI とアプリケーションの間で情報を送信するために可変サイズのデータ構造を使用する場合、アプリケーションは必要なメモリを割り当てる必要があります。 割り当てられるメモリの量は、データ構造の固定部分に対して少なくとも十分な大きさである必要があり、データ構造の dwTotalSize メンバー内のアプリケーションによって設定されます。 dwUsedSize メンバーと dwNeededSize メンバーは TAPI によって入力されます。 dwTotalSize が固定部分のサイズより小さい場合は、LINEERR/ PHONEERR_STRUCTURETOOSMALLが返されます。 関数が成功を返した場合、固定部分のすべてのフィールドが入力されています。 dwUsedSize メンバーと dwNeededSize メンバーを比較すると、すべての変数パーツが入力されているかどうか、およびすべての部分を埋めるために必要な領域の量を判断できます。
dwNeededSize が dwUsedSize と等しい場合は、固定および変数のすべての部分が入力されています。 dwNeededSize が dwUsedSize より大きい場合、一部の可変部分が入力されている可能性がありますが、入力された可変サイズのフィールドは未定義です。 変数部分は切り捨てられず、スペース不足のために切り捨てられた変数パーツは、対応する "オフセット" パーツと "Size" パーツの両方を 0 に設定することで示されます。 これらが 0 でなく、エラーが返されなかった場合は、有効な非侵入変数部分データのオフセットとサイズを示します。
アプリケーションは、構造体の dwNeededSize バイトを割り当て、指定し、関数が成功を返し、dwNeededSize が dwUsedSize になるまで "Get" 関数を再度呼び出すことによって、すべての変数部分が入力されることを常に保証できます。 これは、呼び出し間の可変部分のサイズが変化する競合状態を除き、2 回目の試行で発生する必要があります。これはまれに発生します。
Note
エンコードに関係なく、可変サイズの構造体内のすべてのテキスト文字列は、通常の C 文字列処理規則に従って NULL で終了する必要があります。