如何删除 dllimport 的默认搜索路径

How to remove default search paths of dllimport

我正在使用多个具有相同名称的 DLL,并且我希望在使用 dllimport 时只有一个路径来搜索 DLL。

到目前为止我的代码:

    '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,永远不会到达在'path'中搜索DLL的阶段。我怎样才能使这项工作?

参考资料: How can I specify a [DllImport] path at runtime?

如果您知道 DLL 的完整路径,则通过调用 LoadLibrary 传递该完整路径来显式加载它。如果您在从该 DLL 调用任何 pinvoke 函数之前执行此操作,则系统将使用您显式加载的 DLL。