2010-02-09 33 views
24

Come devo DLLImport cose in VB.NET? Un esempio potrebbe essere:Come utilizzare <DllImport> in VB.NET?

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ 
Private Shared Function GetWindowText(ByVal hwnd As IntPtr, ByVal lpString As StringBuilder, ByVal cch As Integer) As Integer 

End Function 

Se ho messo dentro una classe o da qualche altra parte, vengo "dllimport non è definito" Sto usando Visual Studio 2008 professionale

risposta

33

È necessario aggiungere Imports System.Runtime.InteropServices alla parte superiore del vostro file sorgente.

In alternativa, è possibile indicare il nome completo dell'attributo:

<System.Runtime.InteropService.DllImport("user32.dll", _ 
    SetLastError:=True, CharSet:=CharSet.Auto)> _ 
+0

Ti hai qualche libro per Visual Basic 2015 che parla solo di come usare qualsiasi tipo di 'System.Runtime.InteropService.DllImport' per diventare master su di esso? – YumYumYum

6
Imports System.Runtime.InteropServices 
4

ho visto in getwindowtext (user32) su pinvoke.net che è possibile inserire una dichiarazione MarshalAs affermare che la StringBuffer è equivalente a LPSTR.

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Ansi)> _ 
Public Function GetWindowText(hwnd As IntPtr, <MarshalAs(UnManagedType.LPStr)>lpString As System.Text.StringBuilder, cch As Integer) As Integer 
End Function 
3

Si può anche provare questo

Private Declare Function GetWindowText Lib "user32.dll" (ByVal hwnd As IntPtr, ByVal lpString As StringBuilder, ByVal cch As Integer) As Integer 

Io uso sempre Declare Function invece di DllImport ... La sua più semplicemente, la sua breve e fa la stessa

+6

Ci sono un gran numero di cose che * non puoi * fare con un'istruzione Declare. Nessuno degli attributi di interoperabilità è disponibile per te. Onestamente, questa è la sintassi VB 6 legacy, e penso che tutto il nuovo codice VB.NET dovrebbe essere scritto usando la sintassi standard di .NET. –

+0

Beh, sei giusto ma iam un programmatore pigro, quindi cerco sempre di ottenere quello più corto :) Per i miei progetti questo mi ha sempre aiutato –