private static bool LoadDynamicLibrary(SupportedPlatform platform, string name, out IntPtr handle, out string location) { switch (platform) { case SupportedPlatform.Windows: handle = NativeWindowsMethods.LoadLibrary(name); if (handle == IntPtr.Zero) { goto default; } location = GetLocationWindows(handle) ?? name; return(true); case SupportedPlatform.Linux: case SupportedPlatform.MacOSX: handle = NativeUnixMehods.dlopen(name, 2 /* RTLD_NOW */); if (handle == IntPtr.Zero) { goto default; } location = GetLocationUnix(handle) ?? name; return(true); default: handle = IntPtr.Zero; location = null; return(false); } }
public static void LoadDynamicLibrary(SupportedPlatform platform, string[] possibleNames, out IntPtr handle, out string location) { if (platform != SupportedPlatform.Android) { throw new NotSupportedException(); } foreach (string possibleName in possibleNames) { handle = NativeUnixMehods.dlopen(possibleName, 2 /* RTLD_NOW */); if (handle != IntPtr.Zero) { location = possibleName; return; } } string message = string.Join(", ", possibleNames); throw new DllNotFoundException(message, GetLastError()); }