Partager via


Structures de données de taille variable

Lorsque des structures de données de taille variable sont utilisées pour transmettre des informations entre TAPI et l’application, l’application est chargée d’allouer la mémoire nécessaire. La quantité de mémoire allouée doit être suffisamment grande pour la partie fixe de la structure de données et est définie par l’application dans le dwTotalSize membre de la structure de données. Les membres dwUsedSize et dwNeededSize sont renseignés par TAPI. Si dwTotalSize est inférieur à la taille de la partie fixe, LINEERR/ PHONEERR_STRUCTURETOOSMALL est retourné. Si une fonction retourne la réussite, tous les champs de la partie fixe ont été renseignés. Les membres dwUsedSize et dwNeededSize peuvent être comparés pour déterminer si toutes les parties variables ont été remplies, et la quantité d’espace nécessaire pour les remplir tous.

Si dwNeededSize est égal à dwUsedSize, toutes les parties fixes et variables ont été renseignées. Si dwNeededSize est supérieur à dwUsedSize, certaines parties variables peuvent avoir été renseignées, mais exactement les champs de taille variable qui ont été renseignés ne sont pas définis. Aucune partie variable n’est jamais tronquée, et les parties variables qui auraient été tronquées en raison d’un espace insuffisant sont indiquées en ayant à la fois les parties « Offset » et « Size » correspondantes définies sur zéro. S’ils ne sont pas tous les deux zéro (et qu’aucune erreur n’a été retournée), ils indiquent le décalage et la taille des données de composant variable valides et nontruncées.

Une application peut toujours garantir que toutes les parties variables sont remplies en allouant et en indiquant dwNeededSize octets pour la structure et en appelant à nouveau la fonction « Get » jusqu’à ce que la fonction retourne la réussite et dwNeededSize est égal à dwUsedSize. Cela doit se produire lors de la deuxième tentative, à l’exception des conditions de concurrence qui provoquent des changements dans la taille des parties variables entre les appels, ce qui doit être une occurrence rare.

Note

Toutes les chaînes de texte, quel que soit l’encodage, dans des structures de taille variable doivent être null-terminated en fonction des conventions normales de gestion des chaînes C.