briziox
13-01-2005, 20:26
Salve a tutti, questo è il mio primo post in questa Comunità e spero possiate essermi di aiuto.
Il mio problema è il seguente:
devo richiamare da VB.Net una funzione da una DLL in C++ che genera una callback ad un'altra funzione
C++
SetFilter(WORD pid,void* lpFunc, DWORD CallBackType, DWORD size, DWORD *lpfilter_num)
La Callback generata deve essere dichiarata come segue:
void __stdcall YourCallBack(BYTE *Buff, int lenBuff)
VB.Net
<DllImport(DLL, EntryPoint:="SetFilter", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function SetFilter(ByVal pid As Integer, ByVal lpFunc As myCallBack, ByVal CallBackType As Integer, ByVal size As Integer, ByVal lpfilter_num As Long) As Boolean
Public Delegate Sub myCallBack(ByVal buff As String, ByVal BuffLen As Integer) 'As Boolean
Normalmente il buffer restituito ha una lenght=188 e il passaggio medio di dati è di circa 80KB al secondo, un flusso abbastanza consistente.
Tutto funziona per il meglio tranne per il fatto che il buffer restituitomi sotto forma di stringa non è della lunghezza esatta segnalata dal bufflen, evidentemente il passagio dal flusso di bytes a string ne tralascia qualcuno ho pensato di risolvere aggiungendo una Structure:
<StructLayout(LayoutKind.Sequential)> _
Public Structure MyBuffer
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=188)> Public Buffer() As Byte
End Structure
e modificando di conseguenza la mia callback
Public Delegate Sub myCallBack(ByVal buff As MyBuffer, ByVal BuffLen As Integer) 'As Boolean
Questa procedura funziona però solo per pochi istanti e poi mi chiude il programma senza nemmeno dare alcun messaggio.
Grazie a tutti coloro che vorranno aiutarmi
Il mio problema è il seguente:
devo richiamare da VB.Net una funzione da una DLL in C++ che genera una callback ad un'altra funzione
C++
SetFilter(WORD pid,void* lpFunc, DWORD CallBackType, DWORD size, DWORD *lpfilter_num)
La Callback generata deve essere dichiarata come segue:
void __stdcall YourCallBack(BYTE *Buff, int lenBuff)
VB.Net
<DllImport(DLL, EntryPoint:="SetFilter", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function SetFilter(ByVal pid As Integer, ByVal lpFunc As myCallBack, ByVal CallBackType As Integer, ByVal size As Integer, ByVal lpfilter_num As Long) As Boolean
Public Delegate Sub myCallBack(ByVal buff As String, ByVal BuffLen As Integer) 'As Boolean
Normalmente il buffer restituito ha una lenght=188 e il passaggio medio di dati è di circa 80KB al secondo, un flusso abbastanza consistente.
Tutto funziona per il meglio tranne per il fatto che il buffer restituitomi sotto forma di stringa non è della lunghezza esatta segnalata dal bufflen, evidentemente il passagio dal flusso di bytes a string ne tralascia qualcuno ho pensato di risolvere aggiungendo una Structure:
<StructLayout(LayoutKind.Sequential)> _
Public Structure MyBuffer
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=188)> Public Buffer() As Byte
End Structure
e modificando di conseguenza la mia callback
Public Delegate Sub myCallBack(ByVal buff As MyBuffer, ByVal BuffLen As Integer) 'As Boolean
Questa procedura funziona però solo per pochi istanti e poi mi chiude il programma senza nemmeno dare alcun messaggio.
Grazie a tutti coloro che vorranno aiutarmi