diff --git a/libzopfli-sharp/NativeBinaries/amd64/zopfli.dll b/libzopfli-sharp/NativeBinaries/amd64/zopfli.dll
index c32933c..4e386f8 100644
Binary files a/libzopfli-sharp/NativeBinaries/amd64/zopfli.dll and b/libzopfli-sharp/NativeBinaries/amd64/zopfli.dll differ
diff --git a/libzopfli-sharp/NativeBinaries/amd64/zopfli.exp b/libzopfli-sharp/NativeBinaries/amd64/zopfli.exp
index 5d7adbb..8b11864 100644
Binary files a/libzopfli-sharp/NativeBinaries/amd64/zopfli.exp and b/libzopfli-sharp/NativeBinaries/amd64/zopfli.exp differ
diff --git a/libzopfli-sharp/NativeBinaries/amd64/zopfli.lib b/libzopfli-sharp/NativeBinaries/amd64/zopfli.lib
index 1ef024e..9a52830 100644
Binary files a/libzopfli-sharp/NativeBinaries/amd64/zopfli.lib and b/libzopfli-sharp/NativeBinaries/amd64/zopfli.lib differ
diff --git a/libzopfli-sharp/NativeBinaries/x86/zopfli.dll b/libzopfli-sharp/NativeBinaries/x86/zopfli.dll
index 9f373f3..502214e 100644
Binary files a/libzopfli-sharp/NativeBinaries/x86/zopfli.dll and b/libzopfli-sharp/NativeBinaries/x86/zopfli.dll differ
diff --git a/libzopfli-sharp/NativeBinaries/x86/zopfli.exp b/libzopfli-sharp/NativeBinaries/x86/zopfli.exp
index cf7bcb3..50332d9 100644
Binary files a/libzopfli-sharp/NativeBinaries/x86/zopfli.exp and b/libzopfli-sharp/NativeBinaries/x86/zopfli.exp differ
diff --git a/libzopfli-sharp/NativeBinaries/x86/zopfli.lib b/libzopfli-sharp/NativeBinaries/x86/zopfli.lib
index 7e2d32e..8e4cfa2 100644
Binary files a/libzopfli-sharp/NativeBinaries/x86/zopfli.lib and b/libzopfli-sharp/NativeBinaries/x86/zopfli.lib differ
diff --git a/libzopfli-sharp/Zopfli.cs b/libzopfli-sharp/Zopfli.cs
index 4f43bfb..4dc4b19 100644
--- a/libzopfli-sharp/Zopfli.cs
+++ b/libzopfli-sharp/Zopfli.cs
@@ -67,7 +67,10 @@ public static byte[] compress(byte[] data_in, ZopfliFormat type, ZopfliOptions o
finally
{
// Free unmanaged memory
- Marshal.FreeHGlobal(result);
+ if (Environment.Is64BitProcess)
+ ZopfliCompressor64.ZopfliFree(result);
+ else
+ ZopfliCompressor32.ZopfliFree(result);
}
}
}
diff --git a/libzopfli-sharp/ZopfliCompressor.cs b/libzopfli-sharp/ZopfliCompressor.cs
index 52b07f4..238bf39 100644
--- a/libzopfli-sharp/ZopfliCompressor.cs
+++ b/libzopfli-sharp/ZopfliCompressor.cs
@@ -25,6 +25,13 @@ public class ZopfliCompressor32
/// This is the size of the memory block pointed to by the dynamic output array size
[DllImport("x86\\zopfli.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void ZopfliCompress(ref ZopfliOptions options, ZopfliFormat output_type, byte[] data, int data_size, ref IntPtr data_out, ref UIntPtr data_out_size);
+
+ ///
+ /// Frees memory allocated by the native Zopfli library.
+ ///
+ /// Pointer to the unmanaged memory to free
+ [DllImport("x86\\zopfli.dll", CallingConvention = CallingConvention.Cdecl)]
+ public static extern void ZopfliFree(IntPtr mem);
}
///
@@ -43,5 +50,12 @@ public class ZopfliCompressor64
/// This is the size of the memory block pointed to by the dynamic output array size
[DllImport("amd64\\zopfli.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void ZopfliCompress(ref ZopfliOptions options, ZopfliFormat output_type, byte[] data, int data_size, ref IntPtr data_out, ref UIntPtr data_out_size);
+
+ ///
+ /// Frees memory allocated by the native Zopfli library.
+ ///
+ /// Pointer to the unmanaged memory to free
+ [DllImport("amd64\\zopfli.dll", CallingConvention = CallingConvention.Cdecl)]
+ public static extern void ZopfliFree(IntPtr mem);
}
}