Partager des structures d'une API
Re-bonjour à tous.
Je viens préciser mes précédentes demandes, en espérant que ceux qui veulent bien me lire comprenne bien mon problème.
J'ai trouvé sur Internet le source d'un exemple de programme qui utilise l'API WinLanAPI de Windows. Dans cet exemple, j'ai trouvé la structure suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Type WLAN_AVAILABLE_NETWORK
strProfileName As String * WLAN_MAX_NAME_LENGTH '
dot11Ssid As Long 'DOT11_SSID
dot11BssType As Long 'DOT11_BSS_TYPE
uNumberOfBssids As Long
bNetworkConnectable As Byte
wlanNotConnectableReason As Long
uNumberOfPhyTypes As Long
dot11PhyTypes(8) As Long ' DOT11_PHY_TYPE
bMorePhyTypes As Byte
wlanSignalQuality As Long
bSecurityEnabled As Byte
dot11DefaultAuthAlgorithm As Long ' DOT11_AUTH_ALGORITHM
dot11DefaultCipherAlgorithm As Long ' DOT11_CIPHER_ALGORITHM
dwFlags As Long
dwReserved As Long
End Type |
Pour bien souligner le problème, j'attire l'attention des lecteurs sur le fait que cette structure mélange un string* (la longueur est 256), des long et des byte.
Si je veux utiliser cette API en VB6, je vais devoir recopier ce bloc mémoire dans mon "espace VB6", et retrouver mes petits (string, longs et bytes) dans le résultat.
En espérant résoudre ce problème, j'ai fait une recherche sur le thème de l'alignement dans les API windows, et j'ai trouvé ça :
Citation:
The compiler uses these rules for structure alignment:
Unless overridden with __declspec(align(#)), the alignment of a scalar structure member is the minimum of its size and the current packing.
Unless overridden with __declspec(align(#)), the alignment of a structure is the maximum of the individual alignments of its member(s).
A structure member is placed at an offset from the start of its parent structure which is the smallest multiple of its alignment greater than or equal to the offset of the end of the previous member.
The size of a structure is the smallest multiple of its alignment greater than or equal to the offset of the end of its last member.
__declspec(align(#)) can only increase alignment restrictions.
J'ai envie d'en déduire que, dans la structure ci-dessus, chaque "byte" est, en fait, suivi de 3 (ou 7 ???) octets inutilisés. et que l'espace mémoire alloué à la structure est d'autant plus grand.
L'objet de ce message est de demander aux habitués de ce forum de me faire part de leur expérience en la matière.
Qu'ils soient par avance remerciés de leur contribution.
Et je souhaite de joyeuses fêtes à tous.
AMIcalement.