Ciao a tutti,

Ho a disposizione una vecchia DLL scritta in C.
Sto cercando di utilizzarla con VB.Net ma ottengo dei risultati che non riesco a capire.
Da documentazione uno dei metodi pochi chiari della DLL è il seguente :
codice:
ND2_ERR ND2Open ( unsigned long ip,
ND2_HANDLE* ND2,
long timeout,
char* ident,
unsigned long len
)
In pratica i metodi ND2GetHostIP ND2Open pare funzionino correttamente.
Invece il metodo ND2GetDataFieldPtr dovrebbe restituirmi un valore nel campo field :
00001420000 (Questo valore lo ottengo da un vecchio compilato in C)....
La vecchia funzione in C che non capisco effettua una sorta di conversione presumo è : rt_status[i] = *(unsigned short *)field;
Invece io ottengo in .net : 124916
Il codice da me redatto è il seguente :

codice:
Imports System.Runtime.InteropServices

Public Enum ND2Err As UInteger
    ND2_NoError = 0    ' Call was successful 
    .
    .
    .
End Enum

Public Enum ND2DataRegion As Integer
    ND2_DR_Global = 0    'The field is in the global data area */ 
    .
    .
End Enum
Public Enum ND2PositionDataField As Integer
    ND2_PDF_EndOfList = 0    'This field type marks the end of the list of data fields */
    .
    .
End Enum


Module Module1
    '<DllImport("ND2_DLL.DLL", CallingConvention:=CallingConvention.StdCall)> _
    'Function ND2GetHostIP(ByVal hostname As String, ByRef ip As UInt32) As ND2Err
    'End Function


    <DllImport("ND2_DLL.DLL", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl)>
    Function ND2GetHostIP(ByVal hostname As String, ByRef ip As UInt32) As ND2Err
    End Function

    <DllImport("ND2_DLL.DLL", CharSet:=CharSet.Ansi, CallingConvention:=CallingConvention.Cdecl)>
    Function ND2Open(ByVal ip As UInt32, ByRef ND2 As Integer, ByVal timeout As Long, ByRef fw_version As String, ByVal lenn As Integer) As ND2Err
    End Function

    <DllImport("ND2_DLL.DLL", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.Cdecl)>
    Function ND2GetDataFieldPtr(ByVal ND2 As Integer, ByRef data As String, ByVal DataRegion As ND2DataRegion, ByVal type As ND2PositionDataField, ByRef field As UInt32, ByRef size As Long) As ND2Err
    End Function

    Sub Main()
        'TEST FUNZIONE ND2GetHostIP
        Dim ip As UInt32
        Dim host As String
        Dim Err As ND2Err
        host = "192.168.000.002"
        Err = ND2GetHostIP(host, ip)
        Console.WriteLine("Err : " & Err & " IP From ND2GetHostIP : " & ip)

        'TEST FUNZIONE OPEN
        Dim ND2 As Integer
        Dim timeout As Long
        Dim fw_version As String

        timeout = 5000
        Err = ND2Open(ip, ND2, timeout, fw_version, 20)
        Console.WriteLine("Err : " & Err & " ND2 : " & ND2 & " Fw Version : " & fw_version)

        Dim data As String
        Dim field As UInt32
        Dim size As Long
        'TEST FUNZIONE LETTURA
        Err = ND2GetDataFieldPtr(ND2, data, ND2DataRegion.ND2_DR_Encoder1, ND2PositionDataField.ND2_PDF_PositionData, field, size)

        Console.WriteLine("Err : " & Err & " val : " & field)
        Console.ReadKey()


    End Sub

End Module