Marshal Class
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemRuntimeInteropServicesMarshalClassTopic.asp
Marshal.AllocHGlobal Method
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemRuntimeInteropServicesMarshalClassAllocHGlobalTopic.asp
Marshal.FreeHGlobal Method
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemRuntimeInteropServicesMarshalClassFreeHGlobalTopic.asp
How to call the EnumJobs function from a Visual Basic.NET application
http://support.microsoft.com/default.aspx?scid=kb;en-us;821769
Example :
Public Function DatatoDeserial(ByVal datas() As Byte, ByVal type_to_change As Type, _
ByVal NumJub As Long) As Object
'Returns the size of the JOB_INFO_2 structure
Dim Data_to_Size As Long = Marshal.SizeOf(type_to_change)
If Data_to_Size > datas.Length Then
Return Nothing
End If
Dim buffer As IntPtr = Marshal.AllocHGlobal(Data_to_Size)
Dim startindex As Long
Dim i As Integer
For i = 0 To NumJub - 1
If i = 0 Then
startindex = 0
Else
startindex = startindex + Data_to_Size
End If
Next
'Copy data from the datas array to the unmanaged memory pointer.
Marshal.Copy(datas, startindex, buffer, Data_to_Size)
'Marshal data from the buffer pointer to a managed object.
Dim result_obj As Object = Marshal.PtrToStructure(buffer, type_to_change)
'Free the memory that is allocated from the unmanaged memory.
Marshal.FreeHGlobal(buffer)
Return result_obj
End Function