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); } }