/// <summary> /// Try to load a native library by providing the full path including the file name of the library. /// </summary> /// <returns>True if the library was successfully loaded or if it has already been loaded.</returns> static bool TryLoadFile(string directory, string relativePath, string fileName) { lock (StaticLock) { if (NativeHandles.Value.TryGetValue(fileName, out IntPtr libraryHandle)) { return(true); } var fullPath = Path.GetFullPath(Path.Combine(Path.Combine(directory, relativePath), fileName)); if (!File.Exists(fullPath)) { // If the library isn't found within an architecture specific folder then return false // to allow normal P/Invoke searching behavior when the library is called return(false); } // If successful this will return a handle to the library libraryHandle = IsUnix ? UnixLoader.LoadLibrary(fullPath) : WindowsLoader.LoadLibrary(fullPath); if (libraryHandle == IntPtr.Zero) { int lastError = Marshal.GetLastWin32Error(); var exception = new System.ComponentModel.Win32Exception(lastError); LastException = exception; } else { LastException = null; NativeHandles.Value[fileName] = libraryHandle; } return(libraryHandle != IntPtr.Zero); } }
/// <summary> /// Try to load a native library by providing the full path including the file name of the library. /// </summary> /// <returns>True if the library was successfully loaded or if it has already been loaded.</returns> public static bool TryLoadFile(FileInfo file) { lock (StaticLock) { IntPtr libraryHandle; if (NativeHandles.Value.TryGetValue(file.Name, out libraryHandle)) { return(true); } if (!file.Exists) { // If the library isn't found within an architecture specific folder then return false // to allow normal P/Invoke searching behavior when the library is called return(false); } // If successful this will return a handle to the library libraryHandle = IsUnix ? UnixLoader.LoadLibrary(file.FullName) : WindowsLoader.LoadLibrary(file.FullName); if (libraryHandle == IntPtr.Zero) { int lastError = Marshal.GetLastWin32Error(); var exception = new System.ComponentModel.Win32Exception(lastError); LastException = exception; } else { LastException = null; NativeHandles.Value[file.Name] = libraryHandle; } return(libraryHandle != IntPtr.Zero); } }