Marshaling

bidoch78 Messages postés 67 Date d'inscription mercredi 27 février 2002 Statut Membre Dernière intervention 2 décembre 2005 - 27 mai 2005 à 18:08
bidoch78 Messages postés 67 Date d'inscription mercredi 27 février 2002 Statut Membre Dernière intervention 2 décembre 2005 - 27 mai 2005 à 18:11
J'ai un petit pb de marshaling sous vb.net. J'utilise l'api DeviceIoControl pour récuperer un certain nombre d'information, mais je n'arrive pas à formater correctement la structure.

En effet lorsque je déclare mes structures sous cette forme :


<StructLayout(LayoutKind.Sequential)>
Private
Structure GET_MEDIA_TYPES



Public DeviceType
As Int32



Public MediaInfoCount
As Int32


<MarshalAs(UnmanagedType.ByValArray, SizeConst:=320)>
Public MediaInfo
As Int32()



End
Structure

aucun pb si par exemple je veux récup la taille de la structure en faisant :


Dim ptrMediaType
As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(
GetType(GET_MEDIA_TYPES)))

Le pb c'est que j'aimerai avoir plutot un truc comme ca :


<StructLayout(LayoutKind.Sequential, Size:=32)>
Private
Structure DEVICE_MEDIA_INFO



Public Cylinders
As UInt64



Public MediaType
As Int32



Public TracksPerCylinder
As Int32



Public SectorsPerTrack
As Int32



Public BytesPerSector
As Int32



Public NumberMediaSides
As Int32



Public MediaCharacteristics
As Int32



End
Structure


<StructLayout(LayoutKind.Sequential)>
Private
Structure GET_MEDIA_TYPES



Public DeviceType
As Int32



Public MediaInfoCount
As Int32


<MarshalAs(UnmanagedType.ByValArray, SizeConst:=10)>
Public MediaInfo
As DEVICE_MEDIA_INFO()



End
Structure

Et là message d'erreur : Impossible de définir la taille de la structure........

Comment faire ???????

Bidoch78

1 réponse

bidoch78 Messages postés 67 Date d'inscription mercredi 27 février 2002 Statut Membre Dernière intervention 2 décembre 2005
27 mai 2005 à 18:11
Voila le message d'erreur :

Une exception non gérée du type 'System.ArgumentException' s'est produite dans Homma.exe


Informations supplémentaires : Le type GET_MEDIA_TYPES ne peut pas être marshalé comme une structure non managée ; il n'est pas possible de calculer une taille ou un offset.

Bidoch78
0
Rejoignez-nous