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