Поделиться через


Структуры данных с разными размерами

Если структуры данных изменчивого размера используются для передачи информации между TAPI и приложением, приложение отвечает за выделение необходимой памяти. Объем выделенной памяти должен быть по крайней мере достаточно большим для фиксированной части структуры данных и задается приложением в элементе dwTotalSize структуры данных. Элементы dwUsedSize и dwNeededSize заполняются с помощью TAPI. Если dwTotalSize меньше размера фиксированной части, возвращается PHONEERR_STRUCTURETOOSMALL LINEERR/. Если функция возвращает успешное выполнение, то заполнены все поля в фиксированной части. Элементы dwUsedSize и dwNeededSize можно сравнить, чтобы определить, заполнены ли все части переменных и сколько места потребуется для их заполнения.

Если параметр dwNeededSize равен dwUsedSize, то заполнены все фиксированные и переменные части. Если dwNeededSize больше , чем dwUsedSize, возможно, были заполнены некоторые части переменных, но точное заполнение полей изменчивого размера не определено. Переменная часть никогда не усекается, а переменные части, которые были бы усечены из-за недостаточного пространства, указываются, если для обеих частей "Смещение" и "Размер" задано значение 0. Если они не равны нулю (и ошибка не была возвращена), они указывают на смещение и размер допустимых, неизведанных данных с переменной.

Приложение всегда может гарантировать заполнение всех переменных, выделяя и указывая байты dwNeededSize для структуры и снова вызывая функцию Get, пока функция не вернет успешное выполнение, а dwNeededSize равно dwUsedSize. Это должно произойти во второй попытке, за исключением условий гонки, которые вызывают изменения размера переменных частей между вызовами, что должно быть редким явлением.

Примечание

Все текстовые строки, независимо от кодировки, в структурах с разными размерами должны заканчиваться значением NULL в соответствии с обычными соглашениями об обработке строк C.