|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jan 2005
Messaggi: 1
|
Callback da VB.Net a DLL in C++
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 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:57.