#if WINDOWS_NT using System; using System.IO; using System.Reflection; namespace SevenZip { static class SevenZipLibraryManager { static readonly Type Type = Type.GetType("SevenZip.SevenZipLibraryManager, SevenZipSharp")!; public static void SetLibraryPath(string libraryPath) { try { Type.GetMethod(nameof(SetLibraryPath), BindingFlags.Static | BindingFlags.Public) !.Invoke(null, new[] { libraryPath }); } catch (TargetInvocationException e) { if (e.InnerException != null) { throw e.InnerException; } else { throw; } } } public static LibraryFeature CurrentLibraryFeatures { get { return (LibraryFeature)Type.GetProperty( nameof(CurrentLibraryFeatures), BindingFlags.Static | BindingFlags.Public) !.GetValue(null)!; } } } static class FileChecker { static readonly Type Type = Type.GetType("SevenZip.FileChecker, SevenZipSharp")!; public static InArchiveFormat CheckSignature(Stream stream, out int offset, out bool isExecutable) { var args = new object?[] { stream, null, null }; var result = (InArchiveFormat)Type.GetMethod(nameof(CheckSignature), BindingFlags.Static | BindingFlags.Public, new[] { typeof(Stream), typeof(int).MakeByRefType(), typeof(bool).MakeByRefType() }) !.Invoke(null, args)!; offset = (int)args[1]!; isExecutable = (bool)args[2]!; return result; } public static InArchiveFormat CheckSignature(string fileName, out int offset, out bool isExecutable) { var args = new object?[] { fileName, null, null }; var result = (InArchiveFormat)Type.GetMethod(nameof(CheckSignature), BindingFlags.Static | BindingFlags.Public, new[] { typeof(string), typeof(int).MakeByRefType(), typeof(bool).MakeByRefType() }) !.Invoke(null, args)!; offset = (int)args[1]!; isExecutable = (bool)args[2]!; return result; } } } #endif