Fixed InfoIc new API version

This commit is contained in:
radiomanV 2025-06-04 07:22:09 +03:00
parent 7d7e919352
commit 4352559936
3 changed files with 79 additions and 88 deletions

View File

@ -22,14 +22,14 @@ private struct Options
{ {
public bool DumpInfoic; public bool DumpInfoic;
public bool DumpInfoic2; public bool DumpInfoic2;
public bool DumpInfoicT76; public bool DumpInfoic76;
public bool TL866; public bool TL866;
public bool T48; public bool T48;
public bool T56; public bool T56;
public bool T76; public bool T76;
public string InfoicPath; public string InfoicPath;
public string Infoic2Path; public string Infoic2Path;
public string InfoicT76Path; public string Infoic76Path;
public string ConfigsPath; public string ConfigsPath;
public string OutPath; public string OutPath;
public bool Memory; public bool Memory;
@ -48,7 +48,7 @@ private struct Options
private readonly SortedDictionary<string, CSV_STRUCT> config_csv_list; private readonly SortedDictionary<string, CSV_STRUCT> config_csv_list;
private readonly Infoic infoic; private readonly Infoic infoic;
public Dumper(string InfoicPath, string Infoic2Path, string InfoicT76Path, string ConfigsPath) public Dumper(string InfoicPath, string Infoic2Path, string Infoic76Path, string ConfigsPath)
{ {
// Open the configs.csv file // Open the configs.csv file
config_csv_list = []; config_csv_list = [];
@ -75,7 +75,7 @@ public Dumper(string InfoicPath, string Infoic2Path, string InfoicT76Path, strin
Console.WriteLine("configs.csv not found."); Console.WriteLine("configs.csv not found.");
} }
infoic = new(InfoicPath, Infoic2Path, InfoicT76Path); infoic = new(InfoicPath, Infoic2Path, Infoic76Path);
} }
@ -85,19 +85,19 @@ private static void PrintUsage()
"InfoIc Dumper usage:" + Environment.NewLine + "InfoIc Dumper usage:" + Environment.NewLine +
"--infoic-path <file> Specify infoic.dll path" + Environment.NewLine + "--infoic-path <file> Specify infoic.dll path" + Environment.NewLine +
"--infoic2-path <file> Specify infoic2plus.dll path" + Environment.NewLine + "--infoic2-path <file> Specify infoic2plus.dll path" + Environment.NewLine +
"--infoicT76-path <file> Specify infoicT76.dll path" + Environment.NewLine + "--infoic76-path <file> Specify infoic76.dll path" + Environment.NewLine +
"--configs-path <file> Specify configs.csv file path" + Environment.NewLine + "--configs-path <file> Specify configs.csv file path" + Environment.NewLine +
"--output-dir <directory> Specify the dump output directory" + Environment.NewLine + "--output-dir <directory> Specify the dump output directory" + Environment.NewLine +
"--keep-duplicates Don't remove duplicates" + Environment.NewLine + "--keep-duplicates Don't remove duplicates" + Environment.NewLine +
"--no-sorting Don't sort devices by type" + Environment.NewLine + "--no-sorting Don't sort devices by type" + Environment.NewLine +
"--no-group Don't group devices" + Environment.NewLine + "--no-group Don't group devices" + Environment.NewLine +
"--no-infoic Don't dump infoic.dll" + Environment.NewLine + "--no-infoic Don't dump infoic.dll" + Environment.NewLine +
"--no-infoic2 Don't dump infoic2plus.dll" + Environment.NewLine + "--no--infoic2 Don't dump infoic76.dll" + Environment.NewLine +
"--no-infoict76 Don't dump infoicT76.dll" + Environment.NewLine + "--no--infoic76 Don't dump infoic2plus.dll" + Environment.NewLine +
"--no-tl866 Don't dump TL866II+ entries" + Environment.NewLine + "--no-tl866 Don't dump TL866II+ entries" + Environment.NewLine +
"--no-t48 Don't dump T48 entries" + Environment.NewLine + "--no-T48 Don't dump T48 entries" + Environment.NewLine +
"--no-t56 Don't dump T56 entries" + Environment.NewLine + "--no-T56 Don't dump T56 entries" + Environment.NewLine +
"--no-t76 Don't dump T76 entries" + Environment.NewLine + "--no-T76 Don't dump T76 entries" + Environment.NewLine +
"--no-memory Don't dump EPROM/EEPROM/FLASH devices" + Environment.NewLine + "--no-memory Don't dump EPROM/EEPROM/FLASH devices" + Environment.NewLine +
"--no-mcu Don't dump MCU/MPU devices" + Environment.NewLine + "--no-mcu Don't dump MCU/MPU devices" + Environment.NewLine +
"--no-pld Don't dump PLD/CPLD devices" + Environment.NewLine + "--no-pld Don't dump PLD/CPLD devices" + Environment.NewLine +
@ -126,8 +126,8 @@ private static bool ParseArgs(string[] args, ref Options options)
options.DumpInfoic2 = false; options.DumpInfoic2 = false;
break; break;
case "--no-infoict76": case "--no-infoic76":
options.DumpInfoicT76 = false; options.DumpInfoic76 = false;
break; break;
case "--no-tl866": case "--no-tl866":
@ -204,11 +204,11 @@ private static bool ParseArgs(string[] args, ref Options options)
} }
return false; return false;
case "--infoicT76-path": case "--infoic76-path":
if (i + 1 < args.Length) if (i + 1 < args.Length)
{ {
i++; i++;
options.InfoicT76Path = args[i]; options.Infoic76Path = args[i];
continue; continue;
} }
return false; return false;
@ -255,10 +255,10 @@ static int Main(string[] args)
{ {
DumpInfoic = true, DumpInfoic = true,
DumpInfoic2 = true, DumpInfoic2 = true,
DumpInfoicT76 = true, DumpInfoic76 = true,
InfoicPath = StartupPath + "InfoIC.dll", InfoicPath = StartupPath + "InfoIC.dll",
Infoic2Path = StartupPath + "InfoIC2Plus.dll", Infoic2Path = StartupPath + "InfoIC2Plus.dll",
InfoicT76Path = StartupPath + "InfoICT76.dll", Infoic76Path = StartupPath + "InfoICT76.dll",
ConfigsPath = StartupPath + "configs.csv", ConfigsPath = StartupPath + "configs.csv",
OutPath = StartupPath + "output" + Path.DirectorySeparatorChar, OutPath = StartupPath + "output" + Path.DirectorySeparatorChar,
TL866 = true, TL866 = true,
@ -293,7 +293,7 @@ static int Main(string[] args)
return -1; return -1;
} }
if (!options.DumpInfoic && !options.DumpInfoic2 && !options.DumpInfoicT76) if (!options.DumpInfoic && !options.DumpInfoic2 && !options.DumpInfoic76)
{ {
Console.WriteLine("Nothing to dump."); Console.WriteLine("Nothing to dump.");
return -1; return -1;
@ -301,9 +301,9 @@ static int Main(string[] args)
if (!options.DumpInfoic) { options.InfoicPath = string.Empty; } if (!options.DumpInfoic) { options.InfoicPath = string.Empty; }
if (!options.DumpInfoic2) { options.Infoic2Path = string.Empty; } if (!options.DumpInfoic2) { options.Infoic2Path = string.Empty; }
if (!options.DumpInfoicT76) { options.InfoicT76Path = string.Empty; } if (!options.DumpInfoic76) { options.Infoic76Path = string.Empty; }
Dumper dumper = new(options.InfoicPath, options.Infoic2Path, options.InfoicT76Path, options.ConfigsPath); Dumper dumper = new(options.InfoicPath, options.Infoic2Path, options.Infoic76Path, options.ConfigsPath);
return (dumper.BeginDump(ref options)); return (dumper.BeginDump(ref options));
} }
@ -334,19 +334,19 @@ private int BeginDump(ref Options options)
} }
} }
if (options.DumpInfoicT76) if (options.DumpInfoic76)
{ {
if (options.DumpInfoicT76 && infoic.InfoIcT76Loaded) if (options.DumpInfoic76 && infoic.InfoIc76Loaded)
{ {
Console.WriteLine("InfoIcT76.dll loaded. Total devices:{0}", infoic.InfoIcT76NumDevices); Console.WriteLine("InfoIc76.dll loaded. Total devices:{0}", infoic.InfoIc76NumDevices);
} }
else else
{ {
Console.WriteLine("InfoIcT76.dll not found."); Console.WriteLine("InfoIc76.dll not found.");
} }
} }
if (!infoic.InfoIcLoaded && !infoic.InfoIc2Loaded && !infoic.InfoIcT76Loaded) if (!infoic.InfoIcLoaded && !infoic.InfoIc2Loaded && !infoic.InfoIc76Loaded)
{ {
Console.WriteLine("{0}No modules to dump, the program will exit now.", Environment.NewLine); Console.WriteLine("{0}No modules to dump, the program will exit now.", Environment.NewLine);
return -1; return -1;
@ -378,17 +378,17 @@ private int BeginDump(ref Options options)
// Create the root xml // Create the root xml
XElement xml_root = new("infoic"); XElement xml_root = new("infoic");
// Dump the infoicT76.dll // Dump the infoic76.dll
if (infoic.InfoIcT76Loaded && options.DumpInfoicT76) if (infoic.InfoIc76Loaded && options.DumpInfoic76)
{ {
filter = []; filter = [];
total = []; total = [];
device_count = 0; device_count = 0;
XElement[] elements = DumpDatabase(ref options, DB_TYPE.INFOICT76, ref filter, ref total, ref device_count); XElement[] elements = DumpDatabase(ref options, DB_TYPE.INFOIC76, ref filter, ref total, ref device_count);
XElement database = new("database"); XElement database = new("database");
database.Add(new XAttribute("type", "INFOICT76"), elements); database.Add(new XAttribute("type", "INFOIC76"), elements);
xml_root.Add(database); xml_root.Add(database);
if (!WriteLogs(options.OutPath, filter, "filterT76.txt", total, "logT76.txt", device_count)) { return -1; } if (!WriteLogs(options.OutPath, filter, "filter76.txt", total, "log76.txt", device_count)) { return -1; }
} }
// Dump the infoic2plus.dll // Dump the infoic2plus.dll
@ -535,8 +535,8 @@ private bool CompareDevice(DevStruct d1, DevStruct d2)
} }
else else
{ {
db_name = "InfoIcT76.dll"; db_name = "InfoIc76.dll";
num_mfc = infoic.InfoIcT76Manufacturers; num_mfc = infoic.InfoIc76Manufacturers;
} }
Console.WriteLine("{0}{1} dump started.", Environment.NewLine, db_name); Console.WriteLine("{0}{1} dump started.", Environment.NewLine, db_name);
@ -560,14 +560,8 @@ private bool CompareDevice(DevStruct d1, DevStruct d2)
(Devstruct.Category == (uint)CHIP_TYPE.SRAM && !options.Sram) || (Devstruct.Category == (uint)CHIP_TYPE.SRAM && !options.Sram) ||
(Devstruct.Category == (uint)CHIP_TYPE.NAND && !options.Nand) || (Devstruct.Category == (uint)CHIP_TYPE.NAND && !options.Nand) ||
(Devstruct.Category == (uint)CHIP_TYPE.EMMC && !options.Emmc) || (Devstruct.Category == (uint)CHIP_TYPE.EMMC && !options.Emmc) ||
(Devstruct.Category == (uint)CHIP_TYPE.VGA && !options.Vga) || (Devstruct.Category == (uint)CHIP_TYPE.VGA && !options.Vga))
((Devstruct.Opts8 & PROG_MASK) == TL866II_FLAG && !options.TL866) || continue;
((Devstruct.Opts8 & PROG_MASK) == T48_FLAG && !options.T48) ||
((Devstruct.Opts8 & PROG_MASK) == T56_FLAG && !options.T56) ||
((Devstruct.Opts8 & PROG_MASK) == T76_FLAG && !options.T76)){
Console.WriteLine("{0} removed.{1}", Devstruct.Name, Environment.NewLine);
continue;
}
//Remove spaces and bad characters //Remove spaces and bad characters
Devstruct.Name = Devstruct.Name.Replace(" ", "").Replace(",", ";"). Devstruct.Name = Devstruct.Name.Replace(" ", "").Replace(",", ";").

View File

@ -14,11 +14,11 @@ internal class Infoic
public static extern IntPtr GetProcAddress(IntPtr module, string proc); public static extern IntPtr GetProcAddress(IntPtr module, string proc);
// Function pointers delegates // Function pointers delegates
private delegate void DGetMfcStruT76(uint manufacturer, ref MfcStruct mfstruct); private delegate void DGetMfcStru76(uint manufacturer, ref MfcStruct mfstruct);
private delegate void DGetIcStruT76(uint manufacturer, uint device_index, ref InfoIc2Struct devstruct); private delegate void DGetIcStru76(uint manufacturer, uint device_index, ref InfoIc2Struct devstruct);
private delegate uint DGetIcMFCT76(string search, uint[] manufacturer_array, uint type, uint mask); private delegate uint DGetIcMFC76(string search, uint[] manufacturer_array, uint type, uint mask);
private delegate uint DGetIcListT76(string search, uint[] ic_array, uint manufacturer, uint type, uint mask); private delegate uint DGetIcList76(string search, uint[] ic_array, uint manufacturer, uint type, uint mask);
private delegate uint DGetDllInfoT76(ref uint dll_version, ref uint num_mfcs, uint version); private delegate uint DGetDllInfo76(ref uint dll_version, ref uint num_mfcs, uint version);
private delegate void DGetMfcStru2(uint manufacturer, ref MfcStruct mfstruct); private delegate void DGetMfcStru2(uint manufacturer, ref MfcStruct mfstruct);
private delegate void DGetIcStru2(uint manufacturer, uint device_index, ref InfoIc2Struct devstruct); private delegate void DGetIcStru2(uint manufacturer, uint device_index, ref InfoIc2Struct devstruct);
@ -44,11 +44,11 @@ internal class Infoic
private readonly DGetIcList2? GetIcList2; private readonly DGetIcList2? GetIcList2;
private readonly DGetDllInfo2? GetDllInfo2; private readonly DGetDllInfo2? GetDllInfo2;
private readonly DGetMfcStruT76? GetMfcStructT76; private readonly DGetMfcStru76? GetMfcStruct76;
private readonly DGetIcStruT76? GetIcStructT76; private readonly DGetIcStru76? GetIcStruct76;
private readonly DGetIcMFCT76? GetIcMFCT76; private readonly DGetIcMFC76? GetIcMFC76;
private readonly DGetIcListT76? GetIcListT76; private readonly DGetIcList76? GetIcList76;
private readonly DGetDllInfoT76? GetDllInfoT76; private readonly DGetDllInfo76? GetDllInfo76;
public struct DevStruct public struct DevStruct
@ -144,40 +144,37 @@ private struct MfcStruct
public uint Count; public uint Count;
} }
public static readonly uint T56_FLAG = 0x10000000; public static readonly uint T56_MASK = 0x10000000;
public static readonly uint TL866II_FLAG = 0x20000000; public static readonly uint T48_MASK = 0x40000000;
public static readonly uint T48_FLAG = 0x40000000; public static readonly uint TL866II_MASK = 0x20000000;
public static readonly uint T76_FLAG = 0x80000000;
public static readonly uint PROG_MASK = T56_FLAG | TL866II_FLAG | T48_FLAG | T76_FLAG;
public static readonly uint SMT_FLAG = 0x80000000; public static readonly uint SMT_FLAG = 0x80000000;
public static readonly uint PLCC_FLAG = 0x40000000; public static readonly uint PLCC_FLAG = 0x40000000;
public static readonly uint ERASE_FLAG = 0x20; public static readonly uint ERASE_FLAG = 0x20;
public enum CHIP_TYPE : uint { MEMORY = 1, MPU, PLD, SRAM, LOGIC, NAND, EMMC, VGA } public enum CHIP_TYPE : uint { MEMORY = 1, MPU, PLD, SRAM, LOGIC, NAND, EMMC, VGA }
public enum DB_TYPE { INFOIC, INFOIC2, INFOICT76 } public enum DB_TYPE { INFOIC, INFOIC2, INFOIC76 }
private readonly IntPtr HInfoIc = IntPtr.Zero; private readonly IntPtr HInfoIc = IntPtr.Zero;
private readonly IntPtr HInfoIc2 = IntPtr.Zero; private readonly IntPtr HInfoIc2 = IntPtr.Zero;
private readonly IntPtr HInfoIcT76 = IntPtr.Zero; private readonly IntPtr HInfoIc76 = IntPtr.Zero;
private readonly uint InfoicDeviceCount; private readonly uint InfoicDeviceCount;
private readonly uint Infoic2DeviceCount; private readonly uint Infoic2DeviceCount;
private readonly uint InfoicT76DeviceCount; private readonly uint Infoic76DeviceCount;
private readonly uint InfoicManufCount; private readonly uint InfoicManufCount;
private readonly uint Infoic2ManufCount; private readonly uint Infoic2ManufCount;
private readonly uint InfoicT76ManufCount; private readonly uint Infoic76ManufCount;
public bool InfoIcLoaded { get => HInfoIc != IntPtr.Zero; } public bool InfoIcLoaded { get => HInfoIc != IntPtr.Zero; }
public bool InfoIc2Loaded { get => HInfoIc2 != IntPtr.Zero; } public bool InfoIc2Loaded { get => HInfoIc2 != IntPtr.Zero; }
public bool InfoIcT76Loaded { get => HInfoIcT76 != IntPtr.Zero; } public bool InfoIc76Loaded { get => HInfoIc76 != IntPtr.Zero; }
public uint InfoIcNumDevices { get => InfoicDeviceCount; } public uint InfoIcNumDevices { get => InfoicDeviceCount; }
public uint InfoIc2NumDevices { get => Infoic2DeviceCount; } public uint InfoIc2NumDevices { get => Infoic2DeviceCount; }
public uint InfoIcT76NumDevices { get => InfoicT76DeviceCount; } public uint InfoIc76NumDevices { get => Infoic76DeviceCount; }
public uint InfoIcManufacturers { get => InfoicManufCount; } public uint InfoIcManufacturers { get => InfoicManufCount; }
public uint InfoIc2Manufacturers { get => Infoic2ManufCount; } public uint InfoIc2Manufacturers { get => Infoic2ManufCount; }
public uint InfoIcT76Manufacturers { get => InfoicT76ManufCount; } public uint InfoIc76Manufacturers { get => Infoic76ManufCount; }
private static IntPtr GetProc(ref IntPtr handle, string name) private static IntPtr GetProc(ref IntPtr handle, string name)
@ -192,12 +189,12 @@ private static IntPtr GetProc(ref IntPtr handle, string name)
} }
// Class constructor // Class constructor
public Infoic(string InfoicPath, string Infoic2Path, string InfoicT76Path) public Infoic(string InfoicPath, string Infoic2Path, string Infoic76Path)
{ {
// Try to load modules // Try to load modules
if (InfoicPath != string.Empty) { HInfoIc = LoadLibrary(InfoicPath); } if (InfoicPath != string.Empty) { HInfoIc = LoadLibrary(InfoicPath); }
if (Infoic2Path != string.Empty) { HInfoIc2 = LoadLibrary(Infoic2Path); } if (Infoic2Path != string.Empty) { HInfoIc2 = LoadLibrary(Infoic2Path); }
if (InfoicT76Path != string.Empty) { HInfoIcT76 = LoadLibrary(InfoicT76Path); } if (Infoic76Path != string.Empty) { HInfoIc76 = LoadLibrary(Infoic76Path); }
IntPtr ProcAddress; IntPtr ProcAddress;
@ -261,33 +258,33 @@ public Infoic(string InfoicPath, string Infoic2Path, string InfoicT76Path)
} }
} }
if (HInfoIcT76 != IntPtr.Zero) if (HInfoIc76 != IntPtr.Zero)
{ {
ProcAddress = GetProc(ref HInfoIcT76, "GetMfcStru"); ProcAddress = GetProc(ref HInfoIc76, "GetMfcStru");
if (ProcAddress == IntPtr.Zero) { return; } if (ProcAddress == IntPtr.Zero) { return; }
GetMfcStructT76 = (DGetMfcStruT76)Marshal.GetDelegateForFunctionPointer(ProcAddress, typeof(DGetMfcStruT76)); GetMfcStruct76 = (DGetMfcStru76)Marshal.GetDelegateForFunctionPointer(ProcAddress, typeof(DGetMfcStru76));
ProcAddress = GetProc(ref HInfoIcT76, "GetIcStru"); ProcAddress = GetProc(ref HInfoIc76, "GetIcStru");
if (ProcAddress == IntPtr.Zero) { return; } if (ProcAddress == IntPtr.Zero) { return; }
GetIcStructT76 = (DGetIcStruT76)Marshal.GetDelegateForFunctionPointer(ProcAddress, typeof(DGetIcStruT76)); GetIcStruct76 = (DGetIcStru76)Marshal.GetDelegateForFunctionPointer(ProcAddress, typeof(DGetIcStru76));
ProcAddress = GetProc(ref HInfoIcT76, "GetIcMFC"); ProcAddress = GetProc(ref HInfoIc76, "GetIcMFC");
if (ProcAddress == IntPtr.Zero) { return; } if (ProcAddress == IntPtr.Zero) { return; }
GetIcMFCT76 = (DGetIcMFCT76)Marshal.GetDelegateForFunctionPointer(ProcAddress, typeof(DGetIcMFCT76)); GetIcMFC76 = (DGetIcMFC76)Marshal.GetDelegateForFunctionPointer(ProcAddress, typeof(DGetIcMFC76));
ProcAddress = GetProc(ref HInfoIcT76, "GetIcList"); ProcAddress = GetProc(ref HInfoIc76, "GetIcList");
if (ProcAddress == IntPtr.Zero) { return; } if (ProcAddress == IntPtr.Zero) { return; }
GetIcListT76 = (DGetIcListT76)Marshal.GetDelegateForFunctionPointer(ProcAddress, typeof(DGetIcListT76)); GetIcList76 = (DGetIcList76)Marshal.GetDelegateForFunctionPointer(ProcAddress, typeof(DGetIcList76));
ProcAddress = GetProc(ref HInfoIcT76, "GetDllInfo"); ProcAddress = GetProc(ref HInfoIc76, "GetDllInfo");
if (ProcAddress == IntPtr.Zero) { return; } if (ProcAddress == IntPtr.Zero) { return; }
GetDllInfoT76 = (DGetDllInfoT76)Marshal.GetDelegateForFunctionPointer(ProcAddress, typeof(DGetDllInfoT76)); GetDllInfo76 = (DGetDllInfo76)Marshal.GetDelegateForFunctionPointer(ProcAddress, typeof(DGetDllInfo76));
InfoicT76DeviceCount = GetDeviceCount(ref InfoicT76ManufCount, DB_TYPE.INFOICT76); Infoic76DeviceCount = GetDeviceCount(ref Infoic76ManufCount, DB_TYPE.INFOIC76);
if (InfoicT76DeviceCount == 0) if (Infoic76DeviceCount == 0)
{ {
FreeLibrary(HInfoIcT76); FreeLibrary(HInfoIc76);
HInfoIcT76 = IntPtr.Zero; HInfoIc76 = IntPtr.Zero;
} }
} }
} }
@ -310,9 +307,9 @@ private void GetMfc(uint manufacturer, ref MfcStruct mfcstruct, DB_TYPE type)
} }
else else
{ {
if (GetMfcStructT76 is not null) if (GetMfcStruct76 is not null)
{ {
GetMfcStructT76(manufacturer, ref mfcstruct); GetMfcStruct76(manufacturer, ref mfcstruct);
} }
} }
@ -391,10 +388,10 @@ public DevStruct GetDevice(uint manufacturer, uint index, DB_TYPE type)
} }
else else
{ {
if (GetIcStructT76 is null) { return devstruct; } if (GetIcStruct76 is null) { return devstruct; }
InfoIc2Struct device = new(); InfoIc2Struct device = new();
device.Name = string.Empty; device.Name = string.Empty;
GetIcStructT76(manufacturer, index, ref device); GetIcStruct76(manufacturer, index, ref device);
devstruct.ProtocolId = device.ProtocolId; devstruct.ProtocolId = device.ProtocolId;
devstruct.Opts8 = device.Opts8; devstruct.Opts8 = device.Opts8;
devstruct.Category = device.Category; devstruct.Category = device.Category;
@ -447,8 +444,8 @@ private uint GetDeviceCount(ref uint manuf_count, DB_TYPE type)
} }
else else
{ {
if (GetDllInfoT76 is null) { return 0; } if (GetDllInfo76 is null) { return 0; }
GetDllInfoT76(ref dll_version, ref manuf_count, 0); GetDllInfo76(ref dll_version, ref manuf_count, 0);
if (manuf_count < 170) { return 0; } if (manuf_count < 170) { return 0; }
} }
@ -467,10 +464,10 @@ private uint GetDeviceCount(ref uint manuf_count, DB_TYPE type)
if (GetMfcStruct2 is null) { return 0; } if (GetMfcStruct2 is null) { return 0; }
GetMfcStruct2(i, ref mfcstruct); GetMfcStruct2(i, ref mfcstruct);
} }
else if (type == DB_TYPE.INFOICT76) else if (type == DB_TYPE.INFOIC76)
{ {
if (GetMfcStructT76 is null) { return 0; } if (GetMfcStruct76 is null) { return 0; }
GetMfcStructT76(i, ref mfcstruct); GetMfcStruct76(i, ref mfcstruct);
} }
count += mfcstruct.Count; count += mfcstruct.Count;
} }

BIN
InfoIcDump/InfoicDump.exe Normal file → Executable file

Binary file not shown.