1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
Imports System.Runtime.InteropServices
'On indique que les éléments de la structure doivent respecter l'ordre de la declaration
'p1 puis p1_len puis p2
<StructLayout(LayoutKind.Sequential)> _
Public Structure MaStructure
Dim p1 As IntPtr
Dim p1_len As byte
Dim p2 As IntPtr
Dim p2_len As byte
End Structure
Dim MyStruct_VB as New MaStructure
'On declare 2 tableaux de Byte (equivalent de unsigned char en VB)
Dim Tab_p1() as byte = {1,2,3,4,5}
dim Tab_p2() as byte = {7,8,9,0}
' Initialisation des pointeurs et allocation memoire
MyStruct_VB.p1 = Marshal.AllocHGlobal(Tab_p1.length)
MyStruct_VB.p2 = Marshal.AllocHGlobal(Tab_p2.length)
'On copie le contenu des tableaux de byte dans la structure
Marshal.copy( Tab_p1, 0 , MyStruct_VB.p1 , Tab_p1.Length )
Marshal.copy( Tab_p2, 0 , MyStruct_VB.p2 , Tab_p2.Length )
'Appel de l'API de la DLL
valeur_retour = MaFonctionPourVB( MyStruct_VB )
'si On veut récupérer les éléments dans la structure
Marshal.copy( MyStruct_VB.p1 , 0 , Tab_p1 , MyStruct_VB.p1_Len )
Marshal.copy( MyStruct_VB.p2 , 0 , Tab_p2 , MyStruct_VB.p2_Len ) |
Partager