【问题标题】:How does DllImport identify the newest .dll-Version?DllImport 如何识别最新的 .dll 版本?
【发布时间】:2015-03-11 10:01:55
【问题描述】:

我有一个 winforms 应用程序,可以成功调用位于第三方 dll 中的外部方法。这个 dll 文件位于我机器上的任何位置。

[DllImport("ext.dll")]
public static extern int Print(string cmd);

昨天我从开发该 ext.dll 的公司那里得到了一批,因为打印方法中存在一个内部错误。该批次包含一个无错误版本的 ext.dll。

现在我的问题是:DllImport 如何在我的机器上的任何位置找到这个新的无错误版本并使用它而不是旧版本? 附加信息:我使用 DllImport 是因为我无法通过 VS 中的“添加引用”添加 dll 文件。

【问题讨论】:

  • 它没有,它使用搜索算法查找 dll 并加载它找到的第一个。
  • 没有圣诞老人,积极删除有缺陷的版本,这样 DLL Hell 就无法欺骗你了。

标签: c# .net winforms dllimport


【解决方案1】:

p/invoke marshaller 调用LoadLibrary(或LoadLibraryEx)传递您在DllImport 属性中指定的文件名。这意味着系统使用Dynamic-Link Library Search Order 搜索DLL。我链接到的文档包含所有血淋淋的细节。本质上,系统会搜索多个预定义的位置,并使用它遇到的第一个包含指定名称文件的位置。

那么,关于您的具体问题:

DllImport 如何在我的机器上的任何位置找到这个无错误的新版本并使用它来代替旧版本?

它没有。它使用动态链接库搜索顺序。如果碰巧找到了最新版本的 DLL,那么这就是加载的内容。如果搜索中首先出现旧版本的 DLL,则将加载旧版本。

【讨论】:

    猜你喜欢
    • 2013-10-13
    • 1970-01-01
    • 2016-06-07
    • 2020-12-18
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    相关资源
    最近更新 更多