c# - DllImport 在搜索 DLL 时是否遵循 SafeDllSearchMode?

标签 c# runtime dllimport

假设我有一个典型的非托管调用,我想在某些 DLL 中进行:

[DllImport("unmanaged.dll")]
static extern int SomeFuncion1(int parm);

DllImportAttribute根据SafeDllSearchMode搜索DLL在注册表中设置?我在 MSDN 中找不到任何表明搜索顺序是否确实遵循“标准搜索顺序”的信息。

最佳答案

是的,P/Invoke 编码器只使用 LoadLibrary()。观察设置。无法证明它在 SO 帖子中确实如此,除非您自己尝试,否则我得出的结论是非常确定没有合理的选择。 LoadLibrary 完全属于“硬”API 函数类别。

Fwiw,它永远不会找到带有您的 [DllImport] 声明的 DLL。非托管 DLL 只有一个路径,它们没有托管程序集属性,如版本、文化、pkt。如果这实际上是一个具有这些属性的托管程序集,那么您可以使用 Assembly.Load() 加载它。但是你会很难调用静态函数,CLR 不支持,每个方法都必须属于一个类。

在该 DLL 上使用 Dumpbin.exe/exports 来找出从该 DLL 实际导出的内容。

关于c# - DllImport 在搜索 DLL 时是否遵循 SafeDllSearchMode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4091244/

相关文章:

c# - 为什么是 ;;在局部变量声明之后允许,但在字段声明之后不允许?

android - 我不在 list 文件中使用联系人权限。但我在应用程序信息屏幕上获得了联系许可

c++ - 尝试计算算法的运行时间

c++ - 使用来自 C++ 程序的 dll。 (borland c++ builder 和一般)

c++ - 嵌套 DLL 包含 Visual Studio 中的配置

c# - 方法范围的实例变量

c# - 在 c# metro 应用程序中创建 3D 立方体

c# - (C#) 为什么 Visual Studio 说它是一个对象,而 GetType 说它是一个 Func<object>?

wpf - 在运行时从具有相同名称的程序集中加载 ResourceDictionary 资源

c# - 使用 DllImport 在 C# 中调用 OpenGL 函数?