当可变大小的数据结构用于在 TAPI 和应用程序之间传输信息时,应用程序负责分配必要的内存。 分配的内存量必须至少足以容纳数据结构的固定部分,并由 dwTotalSize 数据结构成员中的应用程序设置。 tapI 填充了 dwUsedSize 和 dwNeededSize 成员。 如果 dwTotalSize 小于固定部分的大小,则返回 LINEERR/PHONEERR_STRUCTURETOOSMALL。 如果函数返回成功,则已填充固定部分中的所有字段。 dwUsedSize 和 dwNeededSize 成员进行比较,以确定是否已填充所有变量部件,以及填充它们所需的空间量。
如果 dwNeededSize 等于 dwUsedSize,则填充了所有固定部件和变量部分。 如果 dwNeededSize 大于 dwUsedSize,则某些变量部分可能已填入,但确切地说,填充了可变大小的字段是未定义的。 不会截断任何变量部分,并且由于空间不足而将被截断的变量部分通过将相应的“Offset”和“Size”部分设置为零来指示。 如果这些不是零(也没有返回任何错误),则它们指示有效、未构造的变量部分数据的偏移量和大小。
应用程序始终可以通过分配和指示结构 dwNeededSize 字节来保证填充所有变量部件,并再次调用“Get”函数,直到函数返回成功,dwNeededSize 等于 dwUsedSize。 第二次尝试时应发生这种情况,但导致调用之间可变部分大小变化的争用条件除外,这应该是罕见的。
注意
无论编码如何,所有文本字符串都应根据正常的 C 字符串处理约定 NULL终止。