mirror of
https://github.com/lifegpc/GARbro.git
synced 2026-07-08 01:31:41 +08:00
Fix zstd not loaded
This commit is contained in:
@@ -111,6 +111,7 @@
|
|||||||
<Compile Include="FC01\ArcBDT.cs" />
|
<Compile Include="FC01\ArcBDT.cs" />
|
||||||
<Compile Include="FC01\BdtTables.cs" />
|
<Compile Include="FC01\BdtTables.cs" />
|
||||||
<Compile Include="GScripter\ArcDATA.cs" />
|
<Compile Include="GScripter\ArcDATA.cs" />
|
||||||
|
<Compile Include="ImageJXL.cs" />
|
||||||
<Compile Include="Ism\ImagePNG.cs" />
|
<Compile Include="Ism\ImagePNG.cs" />
|
||||||
<Compile Include="Kogado\ArcARC.cs" />
|
<Compile Include="Kogado\ArcARC.cs" />
|
||||||
<Compile Include="Ice\ImageIBM.cs" />
|
<Compile Include="Ice\ImageIBM.cs" />
|
||||||
@@ -1268,10 +1269,16 @@
|
|||||||
<EmbeddedResource Include="Strings\arcStrings.ru-RU.resx" />
|
<EmbeddedResource Include="Strings\arcStrings.ru-RU.resx" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="x64\zstd.dll">
|
<Content Include="x64\jxl_dec.dll">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="x86\zstd.dll">
|
<Content Include="x64\zstd-1.dll">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="x86\jxl_dec.dll">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="x86\zstd-1.dll">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
23
ArcFormats/ImageJXL.cs
Normal file
23
ArcFormats/ImageJXL.cs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
using System;
|
||||||
|
using System.ComponentModel.Composition;
|
||||||
|
using System.IO;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
|
||||||
|
namespace GameRes.Formats
|
||||||
|
{
|
||||||
|
// [Export(typeof(ImageFormat))]
|
||||||
|
// public class JxlImageFormat : ImageFormat, IDisposable
|
||||||
|
// {
|
||||||
|
// public override string Tag { get { return "JXL"; } }
|
||||||
|
// public override string Description { get { return "JPEG XL image format"; } }
|
||||||
|
// public override uint Signature { get { return 0; } } // JXL signature starts with 0xFF 0x0A
|
||||||
|
// public override bool CanWrite { get { return false; } }
|
||||||
|
|
||||||
|
// public JxlImageFormat()
|
||||||
|
// {
|
||||||
|
// Extensions = new[] { "jxl" };
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
@@ -9,13 +9,13 @@ namespace GameRes.Compression
|
|||||||
{
|
{
|
||||||
private const int BUFFER_SIZE = 4096;
|
private const int BUFFER_SIZE = 4096;
|
||||||
|
|
||||||
[DllImport("zstd.dll", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("zstd-1.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||||
private static extern IntPtr ZSTD_createDStream();
|
private static extern IntPtr ZSTD_createDStream();
|
||||||
|
|
||||||
[DllImport("zstd.dll", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("zstd-1.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||||
private static extern int ZSTD_decompressStream(IntPtr zds, ref ZSTD_outBuffer output, ref ZSTD_inBuffer input);
|
private static extern int ZSTD_decompressStream(IntPtr zds, ref ZSTD_outBuffer output, ref ZSTD_inBuffer input);
|
||||||
|
|
||||||
[DllImport("zstd.dll", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("zstd-1.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||||
private static extern int ZSTD_freeDStream(IntPtr zds);
|
private static extern int ZSTD_freeDStream(IntPtr zds);
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential)]
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
|||||||
BIN
ArcFormats/x64/jxl_dec.dll
Normal file
BIN
ArcFormats/x64/jxl_dec.dll
Normal file
Binary file not shown.
BIN
ArcFormats/x86/jxl_dec.dll
Normal file
BIN
ArcFormats/x86/jxl_dec.dll
Normal file
Binary file not shown.
@@ -30,6 +30,8 @@ using GARbro.GUI.Properties;
|
|||||||
using GameRes;
|
using GameRes;
|
||||||
using GameRes.Compression;
|
using GameRes.Compression;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
namespace GARbro.GUI
|
namespace GARbro.GUI
|
||||||
{
|
{
|
||||||
@@ -46,8 +48,13 @@ namespace GARbro.GUI
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string InitPath { get; private set; }
|
public string InitPath { get; private set; }
|
||||||
|
|
||||||
|
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
||||||
|
[return: MarshalAs(UnmanagedType.Bool)]
|
||||||
|
static extern bool SetDllDirectory(string lpPathName);
|
||||||
|
|
||||||
void ApplicationStartup (object sender, StartupEventArgs e)
|
void ApplicationStartup (object sender, StartupEventArgs e)
|
||||||
{
|
{
|
||||||
|
SetupDllDirectory();
|
||||||
string exe_dir = Path.GetDirectoryName (System.Reflection.Assembly.GetExecutingAssembly().Location);
|
string exe_dir = Path.GetDirectoryName (System.Reflection.Assembly.GetExecutingAssembly().Location);
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
Trace.Listeners.Add (new TextWriterTraceListener (Path.Combine (exe_dir, "trace.log")));
|
Trace.Listeners.Add (new TextWriterTraceListener (Path.Combine (exe_dir, "trace.log")));
|
||||||
@@ -159,5 +166,20 @@ namespace GARbro.GUI
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void SetupDllDirectory() {
|
||||||
|
string arch = Environment.Is64BitProcess ? "x64" : "x86";
|
||||||
|
string appPath = AppDomain.CurrentDomain.BaseDirectory;
|
||||||
|
string dllPath = Path.Combine(appPath, arch);
|
||||||
|
|
||||||
|
if (Directory.Exists(dllPath)) {
|
||||||
|
Console.WriteLine($"Setting DLL search directory to: {dllPath}");
|
||||||
|
if (!SetDllDirectory(dllPath)) {
|
||||||
|
Console.WriteLine("Warning: Failed to set DLL directory.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Console.WriteLine($"Warning: Directory not found: {dllPath}");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user