Files
2021-01-09 12:06:43 +01:00

89 lines
3.7 KiB
C#

namespace ChanSort.Loader.PhilipsBin
{
class Serializer
{
[DllImport("Cable.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int ConvertToXML_Cable([MarshalAs(UnmanagedType.LPArray)] byte[] path, [MarshalAs(UnmanagedType.LPArray)] byte[] read_buff);
[DllImport("Cable.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int ConvertToBIN_Cable([MarshalAs(UnmanagedType.LPArray)] byte[] read_buff);
//[DllImport("Cable.dll")]
//public static extern int GetFavoriteList([MarshalAs(UnmanagedType.I4)] int ListId, [MarshalAs(UnmanagedType.LPArray)] int[] NoOfRecords, [MarshalAs(UnmanagedType.LPArray)] int[] ChannelIdList);
//[DllImport("Cable.dll")]
//public static extern int SetFavoriteList([MarshalAs(UnmanagedType.I4)] int ListId, [MarshalAs(UnmanagedType.I4)] int NoOfRecords, [MarshalAs(UnmanagedType.LPArray)] int[] ChannelIdList);
[DllImport("dvbs2_cte.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int ConvertToXML_Satellite([MarshalAs(UnmanagedType.LPArray)] byte[] path, [MarshalAs(UnmanagedType.LPArray)] byte[] read_buff);
//public static extern int ConvertToXML_Satellite(IntPtr pathAs8BitChar, [MarshalAs(UnmanagedType.LPArray)] byte[] read_buff);
[DllImport("dvbs2_cte.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int ConvertToBin_Satellite([MarshalAs(UnmanagedType.LPArray)] byte[] read_buff);
/*
[DllImport("dvbs2_cte.dll")]
public static extern int GetFavoriteList([MarshalAs(UnmanagedType.I4)] int ListId, [MarshalAs(UnmanagedType.LPArray)] int[] NoOfRecords, [MarshalAs(UnmanagedType.LPArray)] int[] ChannelIdList);
[DllImport("dvbs2_cte.dll")]
public static extern int SetFavoriteList([MarshalAs(UnmanagedType.I4)] int ListId, [MarshalAs(UnmanagedType.I4)] int NoOfRecords, [MarshalAs(UnmanagedType.LPArray)] int[] ChannelIdList);
*/
[DllImport("kernel32.dll")]
private static extern int LoadLibrary(string strLib);
[DllImport("kernel32.dll")]
private static extern int FreeLibrary(int iModule);
[DllImport("kernel32.dll")]
private static extern IntPtr GetProcAddress(int iModule, string strProcName);
#region Load()
public override void Load()
{
var dir = Path.GetDirectoryName(this.FileName) + "\\";
var fname = Encoding.Default.GetBytes(dir);
//var ptr = Marshal.AllocHGlobal(enc.Length);
//var handle = GCHandle.Alloc(fname, GCHandleType.Pinned);
//var ptr = handle.AddrOfPinnedObject();
var arr = new byte[10 * 1024 * 1024];
//int r1 = 0;
//PhilipsChannelEditor.BinaryDll.CSatellite.GetBinaryFilesToXML(ref r1, dir);
var hLib = LoadLibrary("Cable.dll");
var addr = GetProcAddress(hLib, "ConvertToBIN_Cable");
try
{
//var r1 = PhilipsChannelEditor.BinaryDll.CSatellite.ConvertToXML_Satellite(fname, arr);
//var r1 = ConvertToXML_Cable(ptr, arr);
var sat = this.FileName.Contains("\\s2");
var r1 = sat ? ConvertToXML_Satellite(fname, arr) : ConvertToXML_Cable(fname, arr);
if (r1 != 0)
throw new FileLoadException("Philips DLL returned error code loading file: " + r1);
int len = 0;
while (arr[len] != 0)
++len;
using (var file = new FileStream(@"c:\temp\philips.xml", FileMode.Create))
file.Write(arr, 0, len);
var arr2 = new byte[len + 1];
Array.Copy(arr, arr2, len);
arr2[len] = 0;
var r2 = sat ? ConvertToBin_Satellite(arr2) : ConvertToBIN_Cable(arr2);
if (r2 != 0)
throw new FileLoadException("Philips DLL returned error code saving file: " + r2);
}
finally
{
FreeLibrary(hLib);
}
}
#endregion
}
}