2010-02-09 14 views
24

Comment devrais-je DLLImporter des choses dans VB.NET? Un exemple serait:Comment utiliser <DllImport> dans 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 

Si je le mets dans une classe ou ailleurs, je suis « DllImport n'est pas défini » J'utilise Visual Studio 2008 professionnel

Répondre

33

Vous devez ajouter Imports System.Runtime.InteropServices en haut de votre fichier source.

Vous pouvez qualifier complètement le nom d'attribut:

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

-vous avoir un livre pour Visual Basic 2015 qui ne parle que de la façon d'utiliser n'importe quel type de 'System.Runtime.InteropService.DllImport' pour devenir le maître sur elle? – YumYumYum

6
Imports System.Runtime.InteropServices 
4

j'ai vu dans getwindowtext (user32) sur pinvoke.net que vous pouvez placer une déclaration MarshalAs à dire que le StringBuffer est équivalent à 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

Vous pouvez également essayer

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

J'utilise toujours Declare Function au lieu de DllImport ... Son plus simplement, sa plus courte et fait la même chose

+6

Il y a un grand nombre de choses que vous * ne pouvez pas * faire avec une déclaration Declare. Aucun des attributs d'interopérabilité n'est disponible. Honnêtement, c'est la syntaxe VB 6 héritée, et je pense que tout nouveau code VB.NET devrait être écrit en utilisant la syntaxe standard .NET. –

+0

Eh bien, vous avez raison mais je suis un programmeur paresseux, donc j'essaie toujours d'obtenir le plus court :) Pour mes projets celui-ci m'a toujours aidé –