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 :
In pratica i metodi ND2GetHostIP ND2Open pare funzionino correttamente.codice:ND2_ERR ND2Open ( unsigned long ip, ND2_HANDLE* ND2, long timeout, char* ident, unsigned long len )
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

Rispondi quotando