Compartir a través de


Estructuras de datos de tamaño variable

Cuando se usan estructuras de datos de tamaño variable para transmitir información entre TAPI y la aplicación, la aplicación es responsable de asignar la memoria necesaria. La cantidad de memoria asignada debe ser lo suficientemente grande como para la parte fija de la estructura de datos y la establece la aplicación en el dwTotalSize miembro de la estructura de datos. TapI rellena dwUsedSize y miembros dwNeededSize. Si dwTotalSize es menor que el tamaño de la parte fija, se devuelve LINEERR/ PHONEERR_STRUCTURETOOSMALL. Si una función devuelve éxito, se han rellenado todos los campos de la parte fija. Los dwUsedSize y dwNeededSize miembros se pueden comparar para determinar si se han rellenado todas las partes de variables y cuánto espacio sería necesario para rellenarlos todos.

Si dwNeededSize es igual a dwUsedSize, se han rellenado todas las partes fijas y variables. Si dwNeededSize es mayor que dwUsedSize, es posible que algunas partes variables se hayan rellenado, pero exactamente qué campos de tamaño variable se han rellenado no está definido. Ninguna parte de variable se trunca nunca y las partes variables que se habrían truncado debido a un espacio insuficiente se indican al tener las partes correspondientes "Offset" y "Size" establecidas en cero. Si no son cero (y no se devolvió ningún error), indican el desplazamiento y el tamaño de los datos válidos y no de elementos variables no modificados.

Una aplicación siempre puede garantizar que todas las partes de variables se rellenan asignando e indicando dwNeededSize bytes para la estructura y llamando de nuevo a la función "Get" hasta que la función devuelva éxito y dwNeededSize es igual a dwUsedSize. Esto debería ocurrir en el segundo intento excepto para las condiciones de carrera que provocan cambios en el tamaño de las partes variables entre llamadas, lo que debería ser una aparición poco frecuente.

Nota

Todas las cadenas de texto, independientemente de la codificación, en estructuras de tamaño variable deben ser NULL-terminated según las convenciones normales de control de cadenas de C.