假设我有一个典型的非托管调用,我想在某些 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/