首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何删除dllimport的默认搜索路径

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

Stack Overflow用户
提问于 2019-07-06 03:20:33
回答 1查看 144关注 0票数 0

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

到目前为止我的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    '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的阶段。我怎么才能让它工作呢?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-06 08:18:19

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56910989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文