Buongiorno a tutti.
Ho un problemino nel convertire una funzione C++ in Vb.Net; cerco di spiegare brevemente la situazione.
Ho alcuni programmi, scritti in diversi linguaggi di programmazione, che accedono ad alcune informazioni mediante delle chiamate ad una DLL esterna (chiamiamola CppDll.dll). Di questa Dll, so cosa ritorna, ma non ho i sorgenti.
Avrei quindi la necessità di riscrivere la Dll in Vb.Net in modo che, ai programmi che la chiamano, ritorni gli stessi valori ritornati da CppDll.dll, ma ho qualche problema con una funzione che ritorna un puntatore ad un array di long (integer in vb.net)
Sapete aiutarmi per favore?
Grazie mille
Ho un problemino nel convertire una funzione C++ in Vb.Net; cerco di spiegare brevemente la situazione.
Ho alcuni programmi, scritti in diversi linguaggi di programmazione, che accedono ad alcune informazioni mediante delle chiamate ad una DLL esterna (chiamiamola CppDll.dll). Di questa Dll, so cosa ritorna, ma non ho i sorgenti.
Avrei quindi la necessità di riscrivere la Dll in Vb.Net in modo che, ai programmi che la chiamano, ritorni gli stessi valori ritornati da CppDll.dll, ma ho qualche problema con una funzione che ritorna un puntatore ad un array di long (integer in vb.net)
Queste di seguito, le definizioni della funzione e dell'array passato come descritto nel PDF della CppDll.dll:
[code]
long Dt[256]; /* Buffer to read
short DLL_Read( long Param1, long *Param2, short Param3, short Param4, short Param5 );
[/code]
Ho provato quindi a riscrivere la DLL in Vb.Net...Tutte le altre funzioni riscritte in VB.NET e richiamate dai diversi programmini, funzionano correttamente, mentre questa, che deve ritornare l'array, mi genera un errore di "Access violation at address....".
Questo il codice della funzione nella mia DLL:
[code]
Public Shared Function DLL_Read(ByVal Param1 As Integer, ByRef Param2() As Integer, ByVal Param3 As Short, ByVal Param4 As Short, ByVal Param5 As Short) As Short_
ReDim Param2(256)
Param2(0)=0
Param2(1)=1
Param2(2)=2
Param2(3)=3
...
Return 1 End Function
[/code]Ho provato anche a definire Param2 come IntPtr e fare dei "Marshal.Copy", ma probabilmente sbaglio qualche cosa...
Sapete aiutarmi per favore?
Grazie mille