Originariamente inviato da Rocklion
Infatti, ammetto di non capire minimamente come convertire da C a VB =)
Non è solo una tua colpa, molte caratteristiche del C non sono disponibili in VB.NET.
Come posso creare un puntatore in VB?
Non puoi, o almeno, non esplicitamente; se si trattasse di un argomento potresti semplicemente passare la struttura ByRef, ma per un valore di ritorno di una funzione o per il contenuto di una struttura non saprei neanch'io cosa fare... forse usando IntPtr o qualche attributo per cambiare il marshalling che attua PInvoke... ma si tratta di tecniche piuttosto ingarbugliate (al massimo dò un'occhiata sui miei testi sacri e ti faccio sapere). Comunque credo che converrebbe scrivere una dll wrapper in C/C++ che, esportando funzioni più ".NET friendly" chiami le funzioni della dll in questione.
E inoltre come posso fare un puntatore a una funzione?
Anche qui, il .NET Framework non supporta direttamente i puntatori a funzione, ma permette di usare i delegate per questo scopo. Comunque ho visto nella documentazione che se non ti serve specificare una funzione di callback puoi passare a quel parametro NULL, per cui ti basta dichiararlo come IntPtr e passarci IntPtr.Zero.
codice:
Public Declare Function GrfOpen Lib "grf.dll" Alias "grf_open_callback" (ByVal fname As String, ByVal mode As String, ByVal mError As GrfError, ByVal callback As IntPtr) As Grf
Nota che comunque questa dichiarazione è errata, visto che il valore di ritorno dovrebbe essere un puntatore.