diff --git a/Handle/BNFileMetadata.cs b/Handle/BNFileMetadata.cs
index 758fc2d..9d11332 100644
--- a/Handle/BNFileMetadata.cs
+++ b/Handle/BNFileMetadata.cs
@@ -46,6 +46,26 @@ internal static FileMetadata MustTakeHandle(IntPtr handle)
return new FileMetadata(handle, true);
}
+
+ internal static FileMetadata? NewFromHandle(IntPtr handle)
+ {
+ if (IntPtr.Zero == handle)
+ {
+ return null;
+ }
+
+ return new FileMetadata(NativeMethods.BNNewFileReference(handle), true);
+ }
+
+ internal static FileMetadata MustNewFromHandle(IntPtr handle)
+ {
+ if (IntPtr.Zero == handle)
+ {
+ throw new ArgumentNullException(nameof(handle));
+ }
+
+ return new FileMetadata(NativeMethods.BNNewFileReference(handle), true);
+ }
internal static FileMetadata? BorrowHandle(IntPtr handle)
{
@@ -77,6 +97,12 @@ public static FileMetadata FromFile(string filename)
return file;
}
+ /// Acquires an independent native reference to this file metadata object.
+ public FileMetadata Duplicate()
+ {
+ return FileMetadata.MustNewFromHandle(this.handle);
+ }
+
protected override bool ReleaseHandle()
{
if (!this.IsInvalid)
@@ -87,7 +113,6 @@ protected override bool ReleaseHandle()
this.navigationHandler = null;
}
- NativeMethods.BNCloseFile(this.handle);
NativeMethods.BNFreeFileMetadata(this.handle);
this.SetHandleAsInvalid();
}
diff --git a/Handle/BNLogger.cs b/Handle/BNLogger.cs
index bb63e3e..22b60ea 100644
--- a/Handle/BNLogger.cs
+++ b/Handle/BNLogger.cs
@@ -38,6 +38,26 @@ internal static Logger MustTakeHandle(IntPtr handle)
return new Logger(handle, true);
}
+
+ internal static Logger? NewFromHandle(IntPtr handle)
+ {
+ if (IntPtr.Zero == handle)
+ {
+ return null;
+ }
+
+ return new Logger(NativeMethods.BNNewLoggerReference(handle), true);
+ }
+
+ internal static Logger MustNewFromHandle(IntPtr handle)
+ {
+ if (IntPtr.Zero == handle)
+ {
+ throw new ArgumentNullException(nameof(handle));
+ }
+
+ return new Logger(NativeMethods.BNNewLoggerReference(handle), true);
+ }
public static Logger? GetLogger(string name , ulong sessionId = 0)
{
@@ -81,6 +101,12 @@ public static Logger GetOrCreateLogger(string name , ulong sessionId = 0)
);
}
+ /// Acquires an independent native reference to this logger.
+ public Logger Duplicate()
+ {
+ return Logger.MustNewFromHandle(this.handle);
+ }
+
public static string[] GetLoggerNames()
{
IntPtr arrayPointer = NativeMethods.BNLogGetLoggerNames(out ulong arrayLength);
@@ -161,4 +187,4 @@ public void LogAlert(string format , params object[] args)
this.LogString( LogLevel.AlertLog , text );
}
}
-}
\ No newline at end of file
+}