在.NET中指定DllImport的搜索路径
有没有一种方法可以指定要用DllImport导入的给定组件的搜索路径?
[DllImport("MyDll.dll")]
static extern void Func();
这将在应用程序目录和PATH环境变量中搜索dll。 但有时DLL会放在其他地方。 这些信息是否可以在app.config或manifest文件中指定,以避免动态加载和动态调用?
在第一次调用导入的函数之前,请使用附加的DLL路径调用SetDllDirectory
。
P /调用签名:
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool SetDllDirectory(string lpPathName);
要设置多个附加DLL搜索路径,请修改PATH
环境变量,例如:
static void AddEnvironmentPaths(string[] paths)
{
string path = Environment.GetEnvironmentVariable("PATH") ?? string.Empty;
path += ";" + string.Join(";", paths);
Environment.SetEnvironmentVariable("PATH", path);
}
有关MSDN上DLL搜索顺序的更多信息。
更新 2013/07/30:
上述使用Path.PathSeparator
更新版本:
static void AddEnvironmentPaths(IEnumerable<string> paths)
{
var path = new[] { Environment.GetEnvironmentVariable("PATH") ?? string.Empty };
string newPath = string.Join(Path.PathSeparator.ToString(), path.Concat(paths));
Environment.SetEnvironmentVariable("PATH", newPath);
}
在第一次调用导入的函数之前,请尝试使用其他DLL路径调用AddDllDirectory
。
如果你的Windows版本低于8,你需要安装这个补丁程序,这个补丁程序通过缺少Windows AddDllDirectory
和Vista的AddDllDirectory
函数来扩展API(虽然没有补丁程序)。
这可能是有用的DefaultDllImportSearchPathsAttribute类
例如
[assembly: DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)]
另外请注意,您也可以使用AddDllDirectory,因此您不会搞砸任何东西:
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool AddDllDirectory(string path);
链接地址: http://www.djcxy.com/p/44579.html
上一篇: Specify the search path for DllImport in .NET
下一篇: How to use foreign keys and a spatial index inside a MySQL table?