Как удалить пути поиска по умолчанию из dllimport - PullRequest
0 голосов
/ 06 июля 2019

Я использую несколько библиотек DLL с одним и тем же именем, и я хотел бы иметь только один путь для поиска DLL при использовании dllimport.

Пока мой код:

    'Trying to remove default search paths    
    <System.AttributeUsage(System.AttributeTargets.Assembly Or System.AttributeTargets.Method, AllowMultiple:=False)>
        Public NotInheritable Class DefaultDllImportSearchPathsAttribute
            Inherits Attribute
        End Class

        'Trying to add my own path
        <DllImport("kernel32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
        Public Shared Function SetDllDirectory(ByVal lpPathName As String) As Long
        End Function

    'Importing my DLL
        <DllImport("A.dll", CallingConvention:=CallingConvention.StdCall)>
        Public Shared Sub B(<MarshalAs(UnmanagedType.BStr)> ByRef X As String)

        End Sub

    Dim path As String = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\A\", "path", Nothing)

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            SetDllDirectory(path)
    End Sub

Он продолжает загружать другую DLL и никогда не достигает стадии поиска DLL в «пути».Как я могу сделать эту работу?

Ссылки: Как мне указать путь [DllImport] во время выполнения?

1 Ответ

0 голосов
/ 06 июля 2019

Если вы знаете полный путь к вашей DLL, загрузите ее явно с помощью вызова LoadLibrary, передающего этот полный путь.Если вы сделаете это до вызова каких-либо функций pinvoke из этой библиотеки DLL, то система использует библиотеку DLL, которую вы загрузили явно.

...