Variabel dimensionierte Datenstrukturen
Wenn Datenstrukturen mit unterschiedlicher Größe verwendet werden, um Informationen zwischen TAPI und der Anwendung zu übertragen, ist die Anwendung für die Zuweisung des erforderlichen Arbeitsspeichers verantwortlich. Der zugeordnete Arbeitsspeicher muss mindestens groß genug für den festen Teil der Datenstruktur sein und wird von der Anwendung im dwTotalSize-Element der Datenstruktur festgelegt. Die Elemente dwUsedSize und dwNeededSize werden von TAPI ausgefüllt. Wenn dwTotalSize kleiner als die Größe des festen Teils ist, wird LINEERR/PHONEERR _ STRUCTURETOOSMALL zurückgegeben. Wenn eine Funktion erfolgreich zurückgegeben wird, wurden alle Felder im festen Teil ausgefüllt. Die Member dwUsedSize und dwNeededSize können verglichen werden, um zu bestimmen, ob alle Variablenteile ausgefüllt wurden und wie viel Speicherplatz erforderlich wäre, um sie alle aufzufüllen.
Wenn dwNeededSize gleich dwUsedSize ist, wurden alle festen und variablen Teile ausgefüllt. Wenn dwNeededSize größer als dwUsedSize ist, wurden möglicherweise einige variable Teile ausgefüllt, aber genau die Felder mit unterschiedlicher Größe sind nicht definiert. Es wird kein Variablenteil abgeschnitten, und variablen Teile, die aufgrund von unzureichendem Speicherplatz abgeschnitten worden wären, werden durch festlegen, dass beide zugehörigen Teile "Offset" und "Size" auf 0 (null) festgelegt sind. Wenn diese nicht beide null sind (und kein Fehler zurückgegeben wurde), geben sie den Offset und die Größe gültiger, nichttrunkter Variablenteildaten an.
Eine Anwendung kann immer garantieren, dass alle Variablenteile ausgefüllt werden, indem dwNeededSize-Bytes für die Struktur zugewiesen und angegeben werden und die Get-Funktion erneut aufgerufen wird, bis die Funktion erfolgreich zurückgegeben wird und dwNeededSize gleich dwUsedSize ist. Dies sollte beim zweiten Versuch geschehen, mit Ausnahme von Racebedingungen, die Änderungen an der Größe variabler Teile zwischen Aufrufen verursachen, die selten vorkommen sollten.
Hinweis
Alle Textzeichenfolgen sollten unabhängig von der Codierung in Strukturen mit unterschiedlicher Größe NULL sein und gemäß den normalen C-Konventionen zur Behandlung von Zeichenfolgen enden.