我有一个winforms应用程序,可以成功调用位于第三方-dll的外部方法。这个dll文件位于我的机器上的任何位置。
[DllImport("ext.dll")]
public static extern int Print(string cmd);
昨天我从开发该ext.dll的公司获得了一个批处理,因为Print-Method中存在内部错误。该批处理包含ext.dll的无错误版本。
现在我的问题是:DllImport如何在我的机器上的任何位置找到这个新的无错误版本并使用它而不是旧版本? 附加信息:我使用DllImport,因为我无法通过"添加参考"添加dll文件。在VS。
答案 0 :(得分:6)
p / invoke marshaller调用LoadLibrary
(或LoadLibraryEx
)传递您在DllImport
属性中指定的文件名。这意味着系统使用Dynamic-Link Library Search Order搜索DLL。我链接的文档包含所有血腥细节。本质上,系统会在许多预定义的位置进行搜索,并且会使用它遇到的第一个包含指定名称文件的位置。
那么,关于你的具体问题:
DllImport如何在我的机器上的任何位置找到这个新的无错误版本并使用它而不是旧版本?
它没有。它使用动态链接库搜索顺序。如果碰巧找到了最新版本的DLL,那么那就是加载的内容。如果在搜索中首先出现旧版本的DLL,则将加载旧版本。