none
关于C#引用非托管(Win32 DLL)的路径问题 RRS feed

  • 常规讨论

  • 各位大神好,鄙人遇到个问题想请教一下,望赐教。
    假设 C# 调用 Win32 DLL 代码如下
    [DllImport("A.dll", EntryPoint = "CVR_Authenticate", CharSet = CharSet.Auto, SetLastError = false)]

    public static extern int CVR_Authenticate();

    [DllImport("F.dll", EntryPoint = "Open", CharSet = CharSet.Auto, SetLastError = false)]

    public static extern int Open();


    那么我知道.net 寻找非托管Dll的路径顺序为 程序所在目录=》system32=》系统环境变量位置,当然不是很严谨,大概如此。
    我需要引用时指定Dll的引用路径,比如:当前目录\Libs\CardSDK。

    这么做的原因是我有很多Win32 SDK 而且 它们有依赖文件(dll),这时候多个SDK 有些文件会重名。不知道能不能听懂我先举例一下。
    当前目录\Libs\CardSDK中有 A.dll,B.dll C.dll 它们的关系是 我引用A.dll, B.dll C.dll是A.dll的依赖。
    当前目录\Libs\GuardSDK中有 F.dll,G.dll C.dll 它们的关系是 我引用F.dll, G.dll C.dll是F.dll的依赖。C.dll 与上个目录的只是名称相同而已。
    那么这些dll不能直接放在根目录下,否则会造成覆盖。我说这么多是想指定dll的调用路径.最终我想将不同的SDK DLL 放入单独的文件夹内。
    曾几何时我在MSDN中查到过有一个标签:
    [DefaultDllImportSearchPathsAttribute] 但是也没能实现,有大神知道实现方法吗?








    • 已更改类型 青侠 2020年1月7日 8:18 未解决
    • 已编辑 青侠 2020年1月7日 8:20 未解决
    2019年9月9日 8:45

全部回复