mover - ¿Cómo usar<DllImport> en VB.NET?
dllimport user32 dll entrypoint releasecapture)] vb (5)
¿Cómo debo DLLImportar cosas en VB.NET ? Un ejemplo sería:
<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 lo pongo dentro de una clase o en otro lugar, obtengo "DLLimport no está definido" Estoy usando Visual Studio 2008 Professional
Sé que esto ya se ha respondido, pero aquí hay un ejemplo para las personas que intentan usar los tipos de SQL Server en un proyecto vb:
Imports System
Imports System.IO
Imports System.Runtime.InteropServices
Namespace SqlServerTypes
Public Class Utilities
<DllImport("kernel32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
Public Shared Function LoadLibrary(ByVal libname As String) As IntPtr
End Function
Public Shared Sub LoadNativeAssemblies(ByVal rootApplicationPath As String)
Dim nativeBinaryPath = If(IntPtr.Size > 4, Path.Combine(rootApplicationPath, "SqlServerTypes/x64/"), Path.Combine(rootApplicationPath, "SqlServerTypes/x86/"))
LoadNativeAssembly(nativeBinaryPath, "msvcr120.dll")
LoadNativeAssembly(nativeBinaryPath, "SqlServerSpatial140.dll")
End Sub
Private Shared Sub LoadNativeAssembly(ByVal nativeBinaryPath As String, ByVal assemblyName As String)
Dim path = System.IO.Path.Combine(nativeBinaryPath, assemblyName)
Dim ptr = LoadLibrary(path)
If ptr = IntPtr.Zero Then
Throw New Exception(String.Format("Error loading {0} (ErrorCode: {1})", assemblyName, Marshal.GetLastWin32Error()))
End If
End Sub
End Class
End Namespace
Vi en getwindowtext (user32) en pinvoke.net que puede colocar una instrucción MarshalAs
para indicar que StringBuffer es 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
también puedes probar esto
Private Declare Function GetWindowText Lib "user32.dll" (ByVal hwnd As IntPtr, ByVal lpString As StringBuilder, ByVal cch As Integer) As Integer
Siempre uso Declare Function en lugar de DllImport ... Es más simple, es más corto y hace lo mismo
Imports System.Runtime.InteropServices
agregar Imports System.Runtime.InteropServices
a la parte superior de su archivo fuente.
Alternativamente, puede calificar completamente el nombre del atributo:
<System.Runtime.InteropService.DllImport("user32.dll", _
SetLastError:=True, CharSet:=CharSet.Auto)> _
Imports System.Runtime.InteropServices