Idea for getting EXT_IMAGEINFO in transferred event.

This commit is contained in:
Eugene Wang 2023-04-09 13:20:10 -04:00
parent 96a212a42b
commit 63b10c85e0
9 changed files with 702 additions and 470 deletions

View File

@ -32,7 +32,7 @@ namespace WinFormSample
twain.DefaultSourceChanged += Twain_DefaultSourceChanged;
twain.CurrentSourceChanged += Twain_CurrentSourceChanged;
twain.TransferReady += Twain_TransferReady;
twain.DataTransferred += Twain_DataTransferred;
twain.Transferred += Twain_DataTransferred;
twain.TransferError += Twain_TransferError;
twain.DeviceEvent += Twain_DeviceEvent;
@ -101,7 +101,7 @@ namespace WinFormSample
}
private void Twain_DataTransferred(TwainAppSession sender, DataTransferredEventArgs e)
private void Twain_DataTransferred(TwainAppSession sender, TransferredEventArgs e)
{
Debug.WriteLine($"[thread {Environment.CurrentManagedThreadId}] data transferred with info {e.ImageInfo}");
if (e.Data == null) return;
@ -174,7 +174,7 @@ namespace WinFormSample
if (twain.GetCapCurrent(c, out TW_CAPABILITY twcap).RC == TWRC.SUCCESS)
{
var enumType = KnownCapEnumMap.GetEnumType(c);
var enumType = SizeAndConversionUtils.GetEnumType(c);
var realType = twcap.DetermineValueType(twain);
it.SubItems.Add(enumType?.Name.ToString() ?? realType.ToString());
it.SubItems.Add(ReadTypedValue(c, enumType, realType, forCurrent: true));

View File

@ -3,23 +3,25 @@ using System.Collections.Generic;
namespace NTwain.Data
{
/// <summary>
/// Just an attempt for mapping <see cref="CAP"/>
/// type with its enum value type when applicable.
/// </summary>
public static class KnownCapEnumMap
public static class SizeAndConversionUtils
{
/// <summary>
/// Maps <see cref="CAP"/> id with its enum
/// value type when applicable
/// (e.g. <see cref="CAP.ICAP_XFERMECH"/> to <see cref="TWSX"/>).
/// </summary>
/// <param name="cap"></param>
/// <returns></returns>
public static Type? GetEnumType(CAP cap)
{
if (__map.ContainsKey(cap)) return __map[cap];
return null;
}
static readonly Dictionary<CAP, Type> __map = new()
static readonly Dictionary<CAP, Type> __map = new()
{
{ CAP.ACAP_XFERMECH, typeof(TWSX) },
{ CAP.CAP_ALARMS, typeof(TWAL) },
{ CAP.CAP_AUTHOR, typeof(TWSX) },
{ CAP.CAP_AUTOFEED, typeof(TW_BOOL) },
{ CAP.CAP_AUTOMATICSENSEMEDIUM, typeof(TW_BOOL) },
{ CAP.CAP_AUTOSCAN, typeof(TW_BOOL) },
@ -149,6 +151,40 @@ namespace NTwain.Data
{ CAP.ICAP_TILES, typeof(TW_BOOL) },
{ CAP.ICAP_UNDEFINEDIMAGESIZE, typeof(TW_BOOL) },
{ CAP.ICAP_UNITS, typeof(TWUN) },
{ CAP.ICAP_XFERMECH, typeof(TWSX) },
};
/// <summary>
/// Gets the byte size of the TWAIN item value type.
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public static int GetItemTypeSize(this TWTY type)
{
if (__sizes.TryGetValue(type, out int size))
{
return size;
}
return 0;
}
static readonly IDictionary<TWTY, int> __sizes = new Dictionary<TWTY, int>
{
{TWTY.INT8, 1},
{TWTY.UINT8, 1},
{TWTY.INT16, 2},
{TWTY.UINT16, 2},
{TWTY.BOOL, 2},
{TWTY.INT32, 4},
{TWTY.UINT32, 4},
{TWTY.FIX32, 4},
{TWTY.FRAME, 16},
{TWTY.STR32, TW_STR32.Size},
{TWTY.STR64, TW_STR64.Size},
{TWTY.STR128, TW_STR128.Size},
{TWTY.STR255, TW_STR255.Size},
// is it fixed 4 bytes or intptr size?
{TWTY.HANDLE, IntPtr.Size},
};
}
}

View File

@ -1241,16 +1241,16 @@ namespace NTwain.Data
/// Provides information about the Event that was raised by the Source.
/// </summary>
[StructLayout(LayoutKind.Sequential, Pack = 2)]
public struct TW_DEVICEEVENT
public partial struct TW_DEVICEEVENT
{
public uint Event;
private uint _Event;
public TW_STR255 DeviceName;
public uint BatteryMinutes;
public short BatteryPercentage;
public int PowerSupply;
public TW_FIX32 XResolution;
public TW_FIX32 YResolution;
public uint FlashUsed2;
private uint _FlashUsed2;
public uint AutomaticCapture;
public uint TimeBeforeFirstCapture;
public uint TimeBetweenCaptures;
@ -1395,225 +1395,222 @@ namespace NTwain.Data
/// This structure is used to pass specific information between the data source and the application.
/// </summary>
[StructLayout(LayoutKind.Sequential, Pack = 2)]
public struct TW_INFO
public partial struct TW_INFO
{
public ushort InfoId;
public ushort ItemType;
public TWEI InfoId;
public TWTY ItemType;
public ushort NumItems;
public ushort ReturnCode;
public TWRC ReturnCode;
[SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible")]
public UIntPtr Item;
}
/// <summary>
/// This structure is used to pass specific information between the data source and the application.
/// </summary>
[StructLayout(LayoutKind.Sequential, Pack = 2)]
public struct TW_EXTIMAGEINFO
public partial struct TW_EXTIMAGEINFO
{
public uint NumInfos;
public TW_INFO Info_000;
public TW_INFO Info_001;
public TW_INFO Info_002;
public TW_INFO Info_003;
public TW_INFO Info_004;
public TW_INFO Info_005;
public TW_INFO Info_006;
public TW_INFO Info_007;
public TW_INFO Info_008;
public TW_INFO Info_009;
public TW_INFO Info_010;
public TW_INFO Info_011;
public TW_INFO Info_012;
public TW_INFO Info_013;
public TW_INFO Info_014;
public TW_INFO Info_015;
public TW_INFO Info_016;
public TW_INFO Info_017;
public TW_INFO Info_018;
public TW_INFO Info_019;
public TW_INFO Info_020;
public TW_INFO Info_021;
public TW_INFO Info_022;
public TW_INFO Info_023;
public TW_INFO Info_024;
public TW_INFO Info_025;
public TW_INFO Info_026;
public TW_INFO Info_027;
public TW_INFO Info_028;
public TW_INFO Info_029;
public TW_INFO Info_030;
public TW_INFO Info_031;
public TW_INFO Info_032;
public TW_INFO Info_033;
public TW_INFO Info_034;
public TW_INFO Info_035;
public TW_INFO Info_036;
public TW_INFO Info_037;
public TW_INFO Info_038;
public TW_INFO Info_039;
public TW_INFO Info_040;
public TW_INFO Info_041;
public TW_INFO Info_042;
public TW_INFO Info_043;
public TW_INFO Info_044;
public TW_INFO Info_045;
public TW_INFO Info_046;
public TW_INFO Info_047;
public TW_INFO Info_048;
public TW_INFO Info_049;
public TW_INFO Info_050;
public TW_INFO Info_051;
public TW_INFO Info_052;
public TW_INFO Info_053;
public TW_INFO Info_054;
public TW_INFO Info_055;
public TW_INFO Info_056;
public TW_INFO Info_057;
public TW_INFO Info_058;
public TW_INFO Info_059;
public TW_INFO Info_060;
public TW_INFO Info_061;
public TW_INFO Info_062;
public TW_INFO Info_063;
public TW_INFO Info_064;
public TW_INFO Info_065;
public TW_INFO Info_066;
public TW_INFO Info_067;
public TW_INFO Info_068;
public TW_INFO Info_069;
public TW_INFO Info_070;
public TW_INFO Info_071;
public TW_INFO Info_072;
public TW_INFO Info_073;
public TW_INFO Info_074;
public TW_INFO Info_075;
public TW_INFO Info_076;
public TW_INFO Info_077;
public TW_INFO Info_078;
public TW_INFO Info_079;
public TW_INFO Info_080;
public TW_INFO Info_081;
public TW_INFO Info_082;
public TW_INFO Info_083;
public TW_INFO Info_084;
public TW_INFO Info_085;
public TW_INFO Info_086;
public TW_INFO Info_087;
public TW_INFO Info_088;
public TW_INFO Info_089;
public TW_INFO Info_090;
public TW_INFO Info_091;
public TW_INFO Info_092;
public TW_INFO Info_093;
public TW_INFO Info_094;
public TW_INFO Info_095;
public TW_INFO Info_096;
public TW_INFO Info_097;
public TW_INFO Info_098;
public TW_INFO Info_099;
public TW_INFO Info_100;
public TW_INFO Info_101;
public TW_INFO Info_102;
public TW_INFO Info_103;
public TW_INFO Info_104;
public TW_INFO Info_105;
public TW_INFO Info_106;
public TW_INFO Info_107;
public TW_INFO Info_108;
public TW_INFO Info_109;
public TW_INFO Info_110;
public TW_INFO Info_111;
public TW_INFO Info_112;
public TW_INFO Info_113;
public TW_INFO Info_114;
public TW_INFO Info_115;
public TW_INFO Info_116;
public TW_INFO Info_117;
public TW_INFO Info_118;
public TW_INFO Info_119;
public TW_INFO Info_120;
public TW_INFO Info_121;
public TW_INFO Info_122;
public TW_INFO Info_123;
public TW_INFO Info_124;
public TW_INFO Info_125;
public TW_INFO Info_126;
public TW_INFO Info_127;
public TW_INFO Info_128;
public TW_INFO Info_129;
public TW_INFO Info_130;
public TW_INFO Info_131;
public TW_INFO Info_132;
public TW_INFO Info_133;
public TW_INFO Info_134;
public TW_INFO Info_135;
public TW_INFO Info_136;
public TW_INFO Info_137;
public TW_INFO Info_138;
public TW_INFO Info_139;
public TW_INFO Info_140;
public TW_INFO Info_141;
public TW_INFO Info_142;
public TW_INFO Info_143;
public TW_INFO Info_144;
public TW_INFO Info_145;
public TW_INFO Info_146;
public TW_INFO Info_147;
public TW_INFO Info_148;
public TW_INFO Info_149;
public TW_INFO Info_150;
public TW_INFO Info_151;
public TW_INFO Info_152;
public TW_INFO Info_153;
public TW_INFO Info_154;
public TW_INFO Info_155;
public TW_INFO Info_156;
public TW_INFO Info_157;
public TW_INFO Info_158;
public TW_INFO Info_159;
public TW_INFO Info_160;
public TW_INFO Info_161;
public TW_INFO Info_162;
public TW_INFO Info_163;
public TW_INFO Info_164;
public TW_INFO Info_165;
public TW_INFO Info_166;
public TW_INFO Info_167;
public TW_INFO Info_168;
public TW_INFO Info_169;
public TW_INFO Info_170;
public TW_INFO Info_171;
public TW_INFO Info_172;
public TW_INFO Info_173;
public TW_INFO Info_174;
public TW_INFO Info_175;
public TW_INFO Info_176;
public TW_INFO Info_177;
public TW_INFO Info_178;
public TW_INFO Info_179;
public TW_INFO Info_180;
public TW_INFO Info_181;
public TW_INFO Info_182;
public TW_INFO Info_183;
public TW_INFO Info_184;
public TW_INFO Info_185;
public TW_INFO Info_186;
public TW_INFO Info_187;
public TW_INFO Info_188;
public TW_INFO Info_189;
public TW_INFO Info_190;
public TW_INFO Info_191;
public TW_INFO Info_192;
public TW_INFO Info_193;
public TW_INFO Info_194;
public TW_INFO Info_195;
public TW_INFO Info_196;
public TW_INFO Info_197;
public TW_INFO Info_198;
public TW_INFO Info_199;
private uint NumInfos;
private TW_INFO Info_000;
private TW_INFO Info_001;
private TW_INFO Info_002;
private TW_INFO Info_003;
private TW_INFO Info_004;
private TW_INFO Info_005;
private TW_INFO Info_006;
private TW_INFO Info_007;
private TW_INFO Info_008;
private TW_INFO Info_009;
private TW_INFO Info_010;
private TW_INFO Info_011;
private TW_INFO Info_012;
private TW_INFO Info_013;
private TW_INFO Info_014;
private TW_INFO Info_015;
private TW_INFO Info_016;
private TW_INFO Info_017;
private TW_INFO Info_018;
private TW_INFO Info_019;
private TW_INFO Info_020;
private TW_INFO Info_021;
private TW_INFO Info_022;
private TW_INFO Info_023;
private TW_INFO Info_024;
private TW_INFO Info_025;
private TW_INFO Info_026;
private TW_INFO Info_027;
private TW_INFO Info_028;
private TW_INFO Info_029;
private TW_INFO Info_030;
private TW_INFO Info_031;
private TW_INFO Info_032;
private TW_INFO Info_033;
private TW_INFO Info_034;
private TW_INFO Info_035;
private TW_INFO Info_036;
private TW_INFO Info_037;
private TW_INFO Info_038;
private TW_INFO Info_039;
private TW_INFO Info_040;
private TW_INFO Info_041;
private TW_INFO Info_042;
private TW_INFO Info_043;
private TW_INFO Info_044;
private TW_INFO Info_045;
private TW_INFO Info_046;
private TW_INFO Info_047;
private TW_INFO Info_048;
private TW_INFO Info_049;
private TW_INFO Info_050;
private TW_INFO Info_051;
private TW_INFO Info_052;
private TW_INFO Info_053;
private TW_INFO Info_054;
private TW_INFO Info_055;
private TW_INFO Info_056;
private TW_INFO Info_057;
private TW_INFO Info_058;
private TW_INFO Info_059;
private TW_INFO Info_060;
private TW_INFO Info_061;
private TW_INFO Info_062;
private TW_INFO Info_063;
private TW_INFO Info_064;
private TW_INFO Info_065;
private TW_INFO Info_066;
private TW_INFO Info_067;
private TW_INFO Info_068;
private TW_INFO Info_069;
private TW_INFO Info_070;
private TW_INFO Info_071;
private TW_INFO Info_072;
private TW_INFO Info_073;
private TW_INFO Info_074;
private TW_INFO Info_075;
private TW_INFO Info_076;
private TW_INFO Info_077;
private TW_INFO Info_078;
private TW_INFO Info_079;
private TW_INFO Info_080;
private TW_INFO Info_081;
private TW_INFO Info_082;
private TW_INFO Info_083;
private TW_INFO Info_084;
private TW_INFO Info_085;
private TW_INFO Info_086;
private TW_INFO Info_087;
private TW_INFO Info_088;
private TW_INFO Info_089;
private TW_INFO Info_090;
private TW_INFO Info_091;
private TW_INFO Info_092;
private TW_INFO Info_093;
private TW_INFO Info_094;
private TW_INFO Info_095;
private TW_INFO Info_096;
private TW_INFO Info_097;
private TW_INFO Info_098;
private TW_INFO Info_099;
//private TW_INFO Info_100;
//private TW_INFO Info_101;
//private TW_INFO Info_102;
//private TW_INFO Info_103;
//private TW_INFO Info_104;
//private TW_INFO Info_105;
//private TW_INFO Info_106;
//private TW_INFO Info_107;
//private TW_INFO Info_108;
//private TW_INFO Info_109;
//private TW_INFO Info_110;
//private TW_INFO Info_111;
//private TW_INFO Info_112;
//private TW_INFO Info_113;
//private TW_INFO Info_114;
//private TW_INFO Info_115;
//private TW_INFO Info_116;
//private TW_INFO Info_117;
//private TW_INFO Info_118;
//private TW_INFO Info_119;
//private TW_INFO Info_120;
//private TW_INFO Info_121;
//private TW_INFO Info_122;
//private TW_INFO Info_123;
//private TW_INFO Info_124;
//private TW_INFO Info_125;
//private TW_INFO Info_126;
//private TW_INFO Info_127;
//private TW_INFO Info_128;
//private TW_INFO Info_129;
//private TW_INFO Info_130;
//private TW_INFO Info_131;
//private TW_INFO Info_132;
//private TW_INFO Info_133;
//private TW_INFO Info_134;
//private TW_INFO Info_135;
//private TW_INFO Info_136;
//private TW_INFO Info_137;
//private TW_INFO Info_138;
//private TW_INFO Info_139;
//private TW_INFO Info_140;
//private TW_INFO Info_141;
//private TW_INFO Info_142;
//private TW_INFO Info_143;
//private TW_INFO Info_144;
//private TW_INFO Info_145;
//private TW_INFO Info_146;
//private TW_INFO Info_147;
//private TW_INFO Info_148;
//private TW_INFO Info_149;
//private TW_INFO Info_150;
//private TW_INFO Info_151;
//private TW_INFO Info_152;
//private TW_INFO Info_153;
//private TW_INFO Info_154;
//private TW_INFO Info_155;
//private TW_INFO Info_156;
//private TW_INFO Info_157;
//private TW_INFO Info_158;
//private TW_INFO Info_159;
//private TW_INFO Info_160;
//private TW_INFO Info_161;
//private TW_INFO Info_162;
//private TW_INFO Info_163;
//private TW_INFO Info_164;
//private TW_INFO Info_165;
//private TW_INFO Info_166;
//private TW_INFO Info_167;
//private TW_INFO Info_168;
//private TW_INFO Info_169;
//private TW_INFO Info_170;
//private TW_INFO Info_171;
//private TW_INFO Info_172;
//private TW_INFO Info_173;
//private TW_INFO Info_174;
//private TW_INFO Info_175;
//private TW_INFO Info_176;
//private TW_INFO Info_177;
//private TW_INFO Info_178;
//private TW_INFO Info_179;
//private TW_INFO Info_180;
//private TW_INFO Info_181;
//private TW_INFO Info_182;
//private TW_INFO Info_183;
//private TW_INFO Info_184;
//private TW_INFO Info_185;
//private TW_INFO Info_186;
//private TW_INFO Info_187;
//private TW_INFO Info_188;
//private TW_INFO Info_189;
//private TW_INFO Info_190;
//private TW_INFO Info_191;
//private TW_INFO Info_192;
//private TW_INFO Info_193;
//private TW_INFO Info_194;
//private TW_INFO Info_195;
//private TW_INFO Info_196;
//private TW_INFO Info_197;
//private TW_INFO Info_198;
//private TW_INFO Info_199;
public void Get(uint a_uIndex, ref TW_INFO a_twinfo)
public void Get(int a_uIndex, ref TW_INFO a_twinfo)
{
switch (a_uIndex)
{
@ -1718,110 +1715,110 @@ namespace NTwain.Data
case 97: a_twinfo = Info_097; return;
case 98: a_twinfo = Info_098; return;
case 99: a_twinfo = Info_099; return;
case 100: a_twinfo = Info_100; return;
case 101: a_twinfo = Info_101; return;
case 102: a_twinfo = Info_102; return;
case 103: a_twinfo = Info_103; return;
case 104: a_twinfo = Info_104; return;
case 105: a_twinfo = Info_105; return;
case 106: a_twinfo = Info_106; return;
case 107: a_twinfo = Info_107; return;
case 108: a_twinfo = Info_108; return;
case 109: a_twinfo = Info_109; return;
case 110: a_twinfo = Info_110; return;
case 111: a_twinfo = Info_111; return;
case 112: a_twinfo = Info_112; return;
case 113: a_twinfo = Info_113; return;
case 114: a_twinfo = Info_114; return;
case 115: a_twinfo = Info_115; return;
case 116: a_twinfo = Info_116; return;
case 117: a_twinfo = Info_117; return;
case 118: a_twinfo = Info_118; return;
case 119: a_twinfo = Info_119; return;
case 120: a_twinfo = Info_120; return;
case 121: a_twinfo = Info_121; return;
case 122: a_twinfo = Info_122; return;
case 123: a_twinfo = Info_123; return;
case 124: a_twinfo = Info_124; return;
case 125: a_twinfo = Info_125; return;
case 126: a_twinfo = Info_126; return;
case 127: a_twinfo = Info_127; return;
case 128: a_twinfo = Info_128; return;
case 129: a_twinfo = Info_129; return;
case 130: a_twinfo = Info_130; return;
case 131: a_twinfo = Info_131; return;
case 132: a_twinfo = Info_132; return;
case 133: a_twinfo = Info_133; return;
case 134: a_twinfo = Info_134; return;
case 135: a_twinfo = Info_135; return;
case 136: a_twinfo = Info_136; return;
case 137: a_twinfo = Info_137; return;
case 138: a_twinfo = Info_138; return;
case 139: a_twinfo = Info_139; return;
case 140: a_twinfo = Info_140; return;
case 141: a_twinfo = Info_141; return;
case 142: a_twinfo = Info_142; return;
case 143: a_twinfo = Info_143; return;
case 144: a_twinfo = Info_144; return;
case 145: a_twinfo = Info_145; return;
case 146: a_twinfo = Info_146; return;
case 147: a_twinfo = Info_147; return;
case 148: a_twinfo = Info_148; return;
case 149: a_twinfo = Info_149; return;
case 150: a_twinfo = Info_150; return;
case 151: a_twinfo = Info_151; return;
case 152: a_twinfo = Info_152; return;
case 153: a_twinfo = Info_153; return;
case 154: a_twinfo = Info_154; return;
case 155: a_twinfo = Info_155; return;
case 156: a_twinfo = Info_156; return;
case 157: a_twinfo = Info_157; return;
case 158: a_twinfo = Info_158; return;
case 159: a_twinfo = Info_159; return;
case 160: a_twinfo = Info_160; return;
case 161: a_twinfo = Info_161; return;
case 162: a_twinfo = Info_162; return;
case 163: a_twinfo = Info_163; return;
case 164: a_twinfo = Info_164; return;
case 165: a_twinfo = Info_165; return;
case 166: a_twinfo = Info_166; return;
case 167: a_twinfo = Info_167; return;
case 168: a_twinfo = Info_168; return;
case 169: a_twinfo = Info_169; return;
case 170: a_twinfo = Info_170; return;
case 171: a_twinfo = Info_171; return;
case 172: a_twinfo = Info_172; return;
case 173: a_twinfo = Info_173; return;
case 174: a_twinfo = Info_174; return;
case 175: a_twinfo = Info_175; return;
case 176: a_twinfo = Info_176; return;
case 177: a_twinfo = Info_177; return;
case 178: a_twinfo = Info_178; return;
case 179: a_twinfo = Info_179; return;
case 180: a_twinfo = Info_180; return;
case 181: a_twinfo = Info_181; return;
case 182: a_twinfo = Info_182; return;
case 183: a_twinfo = Info_183; return;
case 184: a_twinfo = Info_184; return;
case 185: a_twinfo = Info_185; return;
case 186: a_twinfo = Info_186; return;
case 187: a_twinfo = Info_187; return;
case 188: a_twinfo = Info_188; return;
case 189: a_twinfo = Info_189; return;
case 190: a_twinfo = Info_190; return;
case 191: a_twinfo = Info_191; return;
case 192: a_twinfo = Info_192; return;
case 193: a_twinfo = Info_193; return;
case 194: a_twinfo = Info_194; return;
case 195: a_twinfo = Info_195; return;
case 196: a_twinfo = Info_196; return;
case 197: a_twinfo = Info_197; return;
case 198: a_twinfo = Info_198; return;
case 199: a_twinfo = Info_199; return;
//case 100: a_twinfo = Info_100; return;
//case 101: a_twinfo = Info_101; return;
//case 102: a_twinfo = Info_102; return;
//case 103: a_twinfo = Info_103; return;
//case 104: a_twinfo = Info_104; return;
//case 105: a_twinfo = Info_105; return;
//case 106: a_twinfo = Info_106; return;
//case 107: a_twinfo = Info_107; return;
//case 108: a_twinfo = Info_108; return;
//case 109: a_twinfo = Info_109; return;
//case 110: a_twinfo = Info_110; return;
//case 111: a_twinfo = Info_111; return;
//case 112: a_twinfo = Info_112; return;
//case 113: a_twinfo = Info_113; return;
//case 114: a_twinfo = Info_114; return;
//case 115: a_twinfo = Info_115; return;
//case 116: a_twinfo = Info_116; return;
//case 117: a_twinfo = Info_117; return;
//case 118: a_twinfo = Info_118; return;
//case 119: a_twinfo = Info_119; return;
//case 120: a_twinfo = Info_120; return;
//case 121: a_twinfo = Info_121; return;
//case 122: a_twinfo = Info_122; return;
//case 123: a_twinfo = Info_123; return;
//case 124: a_twinfo = Info_124; return;
//case 125: a_twinfo = Info_125; return;
//case 126: a_twinfo = Info_126; return;
//case 127: a_twinfo = Info_127; return;
//case 128: a_twinfo = Info_128; return;
//case 129: a_twinfo = Info_129; return;
//case 130: a_twinfo = Info_130; return;
//case 131: a_twinfo = Info_131; return;
//case 132: a_twinfo = Info_132; return;
//case 133: a_twinfo = Info_133; return;
//case 134: a_twinfo = Info_134; return;
//case 135: a_twinfo = Info_135; return;
//case 136: a_twinfo = Info_136; return;
//case 137: a_twinfo = Info_137; return;
//case 138: a_twinfo = Info_138; return;
//case 139: a_twinfo = Info_139; return;
//case 140: a_twinfo = Info_140; return;
//case 141: a_twinfo = Info_141; return;
//case 142: a_twinfo = Info_142; return;
//case 143: a_twinfo = Info_143; return;
//case 144: a_twinfo = Info_144; return;
//case 145: a_twinfo = Info_145; return;
//case 146: a_twinfo = Info_146; return;
//case 147: a_twinfo = Info_147; return;
//case 148: a_twinfo = Info_148; return;
//case 149: a_twinfo = Info_149; return;
//case 150: a_twinfo = Info_150; return;
//case 151: a_twinfo = Info_151; return;
//case 152: a_twinfo = Info_152; return;
//case 153: a_twinfo = Info_153; return;
//case 154: a_twinfo = Info_154; return;
//case 155: a_twinfo = Info_155; return;
//case 156: a_twinfo = Info_156; return;
//case 157: a_twinfo = Info_157; return;
//case 158: a_twinfo = Info_158; return;
//case 159: a_twinfo = Info_159; return;
//case 160: a_twinfo = Info_160; return;
//case 161: a_twinfo = Info_161; return;
//case 162: a_twinfo = Info_162; return;
//case 163: a_twinfo = Info_163; return;
//case 164: a_twinfo = Info_164; return;
//case 165: a_twinfo = Info_165; return;
//case 166: a_twinfo = Info_166; return;
//case 167: a_twinfo = Info_167; return;
//case 168: a_twinfo = Info_168; return;
//case 169: a_twinfo = Info_169; return;
//case 170: a_twinfo = Info_170; return;
//case 171: a_twinfo = Info_171; return;
//case 172: a_twinfo = Info_172; return;
//case 173: a_twinfo = Info_173; return;
//case 174: a_twinfo = Info_174; return;
//case 175: a_twinfo = Info_175; return;
//case 176: a_twinfo = Info_176; return;
//case 177: a_twinfo = Info_177; return;
//case 178: a_twinfo = Info_178; return;
//case 179: a_twinfo = Info_179; return;
//case 180: a_twinfo = Info_180; return;
//case 181: a_twinfo = Info_181; return;
//case 182: a_twinfo = Info_182; return;
//case 183: a_twinfo = Info_183; return;
//case 184: a_twinfo = Info_184; return;
//case 185: a_twinfo = Info_185; return;
//case 186: a_twinfo = Info_186; return;
//case 187: a_twinfo = Info_187; return;
//case 188: a_twinfo = Info_188; return;
//case 189: a_twinfo = Info_189; return;
//case 190: a_twinfo = Info_190; return;
//case 191: a_twinfo = Info_191; return;
//case 192: a_twinfo = Info_192; return;
//case 193: a_twinfo = Info_193; return;
//case 194: a_twinfo = Info_194; return;
//case 195: a_twinfo = Info_195; return;
//case 196: a_twinfo = Info_196; return;
//case 197: a_twinfo = Info_197; return;
//case 198: a_twinfo = Info_198; return;
//case 199: a_twinfo = Info_199; return;
}
}
public void Set(uint a_uIndex, ref TW_INFO a_twinfo)
public void Set(int a_uIndex, ref TW_INFO a_twinfo)
{
switch (a_uIndex)
{
@ -1926,106 +1923,106 @@ namespace NTwain.Data
case 97: Info_097 = a_twinfo; return;
case 98: Info_098 = a_twinfo; return;
case 99: Info_099 = a_twinfo; return;
case 100: Info_100 = a_twinfo; return;
case 101: Info_101 = a_twinfo; return;
case 102: Info_102 = a_twinfo; return;
case 103: Info_103 = a_twinfo; return;
case 104: Info_104 = a_twinfo; return;
case 105: Info_105 = a_twinfo; return;
case 106: Info_106 = a_twinfo; return;
case 107: Info_107 = a_twinfo; return;
case 108: Info_108 = a_twinfo; return;
case 109: Info_109 = a_twinfo; return;
case 110: Info_110 = a_twinfo; return;
case 111: Info_111 = a_twinfo; return;
case 112: Info_112 = a_twinfo; return;
case 113: Info_113 = a_twinfo; return;
case 114: Info_114 = a_twinfo; return;
case 115: Info_115 = a_twinfo; return;
case 116: Info_116 = a_twinfo; return;
case 117: Info_117 = a_twinfo; return;
case 118: Info_118 = a_twinfo; return;
case 119: Info_119 = a_twinfo; return;
case 120: Info_120 = a_twinfo; return;
case 121: Info_121 = a_twinfo; return;
case 122: Info_122 = a_twinfo; return;
case 123: Info_123 = a_twinfo; return;
case 124: Info_124 = a_twinfo; return;
case 125: Info_125 = a_twinfo; return;
case 126: Info_126 = a_twinfo; return;
case 127: Info_127 = a_twinfo; return;
case 128: Info_128 = a_twinfo; return;
case 129: Info_129 = a_twinfo; return;
case 130: Info_130 = a_twinfo; return;
case 131: Info_131 = a_twinfo; return;
case 132: Info_132 = a_twinfo; return;
case 133: Info_133 = a_twinfo; return;
case 134: Info_134 = a_twinfo; return;
case 135: Info_135 = a_twinfo; return;
case 136: Info_136 = a_twinfo; return;
case 137: Info_137 = a_twinfo; return;
case 138: Info_138 = a_twinfo; return;
case 139: Info_139 = a_twinfo; return;
case 140: Info_140 = a_twinfo; return;
case 141: Info_141 = a_twinfo; return;
case 142: Info_142 = a_twinfo; return;
case 143: Info_143 = a_twinfo; return;
case 144: Info_144 = a_twinfo; return;
case 145: Info_145 = a_twinfo; return;
case 146: Info_146 = a_twinfo; return;
case 147: Info_147 = a_twinfo; return;
case 148: Info_148 = a_twinfo; return;
case 149: Info_149 = a_twinfo; return;
case 150: Info_150 = a_twinfo; return;
case 151: Info_151 = a_twinfo; return;
case 152: Info_152 = a_twinfo; return;
case 153: Info_153 = a_twinfo; return;
case 154: Info_154 = a_twinfo; return;
case 155: Info_155 = a_twinfo; return;
case 156: Info_156 = a_twinfo; return;
case 157: Info_157 = a_twinfo; return;
case 158: Info_158 = a_twinfo; return;
case 159: Info_159 = a_twinfo; return;
case 160: Info_160 = a_twinfo; return;
case 161: Info_161 = a_twinfo; return;
case 162: Info_162 = a_twinfo; return;
case 163: Info_163 = a_twinfo; return;
case 164: Info_164 = a_twinfo; return;
case 165: Info_165 = a_twinfo; return;
case 166: Info_166 = a_twinfo; return;
case 167: Info_167 = a_twinfo; return;
case 168: Info_168 = a_twinfo; return;
case 169: Info_169 = a_twinfo; return;
case 170: Info_170 = a_twinfo; return;
case 171: Info_171 = a_twinfo; return;
case 172: Info_172 = a_twinfo; return;
case 173: Info_173 = a_twinfo; return;
case 174: Info_174 = a_twinfo; return;
case 175: Info_175 = a_twinfo; return;
case 176: Info_176 = a_twinfo; return;
case 177: Info_177 = a_twinfo; return;
case 178: Info_178 = a_twinfo; return;
case 179: Info_179 = a_twinfo; return;
case 180: Info_180 = a_twinfo; return;
case 181: Info_181 = a_twinfo; return;
case 182: Info_182 = a_twinfo; return;
case 183: Info_183 = a_twinfo; return;
case 184: Info_184 = a_twinfo; return;
case 185: Info_185 = a_twinfo; return;
case 186: Info_186 = a_twinfo; return;
case 187: Info_187 = a_twinfo; return;
case 188: Info_188 = a_twinfo; return;
case 189: Info_189 = a_twinfo; return;
case 190: Info_190 = a_twinfo; return;
case 191: Info_191 = a_twinfo; return;
case 192: Info_192 = a_twinfo; return;
case 193: Info_193 = a_twinfo; return;
case 194: Info_194 = a_twinfo; return;
case 195: Info_195 = a_twinfo; return;
case 196: Info_196 = a_twinfo; return;
case 197: Info_197 = a_twinfo; return;
case 198: Info_198 = a_twinfo; return;
case 199: Info_199 = a_twinfo; return;
//case 100: Info_100 = a_twinfo; return;
//case 101: Info_101 = a_twinfo; return;
//case 102: Info_102 = a_twinfo; return;
//case 103: Info_103 = a_twinfo; return;
//case 104: Info_104 = a_twinfo; return;
//case 105: Info_105 = a_twinfo; return;
//case 106: Info_106 = a_twinfo; return;
//case 107: Info_107 = a_twinfo; return;
//case 108: Info_108 = a_twinfo; return;
//case 109: Info_109 = a_twinfo; return;
//case 110: Info_110 = a_twinfo; return;
//case 111: Info_111 = a_twinfo; return;
//case 112: Info_112 = a_twinfo; return;
//case 113: Info_113 = a_twinfo; return;
//case 114: Info_114 = a_twinfo; return;
//case 115: Info_115 = a_twinfo; return;
//case 116: Info_116 = a_twinfo; return;
//case 117: Info_117 = a_twinfo; return;
//case 118: Info_118 = a_twinfo; return;
//case 119: Info_119 = a_twinfo; return;
//case 120: Info_120 = a_twinfo; return;
//case 121: Info_121 = a_twinfo; return;
//case 122: Info_122 = a_twinfo; return;
//case 123: Info_123 = a_twinfo; return;
//case 124: Info_124 = a_twinfo; return;
//case 125: Info_125 = a_twinfo; return;
//case 126: Info_126 = a_twinfo; return;
//case 127: Info_127 = a_twinfo; return;
//case 128: Info_128 = a_twinfo; return;
//case 129: Info_129 = a_twinfo; return;
//case 130: Info_130 = a_twinfo; return;
//case 131: Info_131 = a_twinfo; return;
//case 132: Info_132 = a_twinfo; return;
//case 133: Info_133 = a_twinfo; return;
//case 134: Info_134 = a_twinfo; return;
//case 135: Info_135 = a_twinfo; return;
//case 136: Info_136 = a_twinfo; return;
//case 137: Info_137 = a_twinfo; return;
//case 138: Info_138 = a_twinfo; return;
//case 139: Info_139 = a_twinfo; return;
//case 140: Info_140 = a_twinfo; return;
//case 141: Info_141 = a_twinfo; return;
//case 142: Info_142 = a_twinfo; return;
//case 143: Info_143 = a_twinfo; return;
//case 144: Info_144 = a_twinfo; return;
//case 145: Info_145 = a_twinfo; return;
//case 146: Info_146 = a_twinfo; return;
//case 147: Info_147 = a_twinfo; return;
//case 148: Info_148 = a_twinfo; return;
//case 149: Info_149 = a_twinfo; return;
//case 150: Info_150 = a_twinfo; return;
//case 151: Info_151 = a_twinfo; return;
//case 152: Info_152 = a_twinfo; return;
//case 153: Info_153 = a_twinfo; return;
//case 154: Info_154 = a_twinfo; return;
//case 155: Info_155 = a_twinfo; return;
//case 156: Info_156 = a_twinfo; return;
//case 157: Info_157 = a_twinfo; return;
//case 158: Info_158 = a_twinfo; return;
//case 159: Info_159 = a_twinfo; return;
//case 160: Info_160 = a_twinfo; return;
//case 161: Info_161 = a_twinfo; return;
//case 162: Info_162 = a_twinfo; return;
//case 163: Info_163 = a_twinfo; return;
//case 164: Info_164 = a_twinfo; return;
//case 165: Info_165 = a_twinfo; return;
//case 166: Info_166 = a_twinfo; return;
//case 167: Info_167 = a_twinfo; return;
//case 168: Info_168 = a_twinfo; return;
//case 169: Info_169 = a_twinfo; return;
//case 170: Info_170 = a_twinfo; return;
//case 171: Info_171 = a_twinfo; return;
//case 172: Info_172 = a_twinfo; return;
//case 173: Info_173 = a_twinfo; return;
//case 174: Info_174 = a_twinfo; return;
//case 175: Info_175 = a_twinfo; return;
//case 176: Info_176 = a_twinfo; return;
//case 177: Info_177 = a_twinfo; return;
//case 178: Info_178 = a_twinfo; return;
//case 179: Info_179 = a_twinfo; return;
//case 180: Info_180 = a_twinfo; return;
//case 181: Info_181 = a_twinfo; return;
//case 182: Info_182 = a_twinfo; return;
//case 183: Info_183 = a_twinfo; return;
//case 184: Info_184 = a_twinfo; return;
//case 185: Info_185 = a_twinfo; return;
//case 186: Info_186 = a_twinfo; return;
//case 187: Info_187 = a_twinfo; return;
//case 188: Info_188 = a_twinfo; return;
//case 189: Info_189 = a_twinfo; return;
//case 190: Info_190 = a_twinfo; return;
//case 191: Info_191 = a_twinfo; return;
//case 192: Info_192 = a_twinfo; return;
//case 193: Info_193 = a_twinfo; return;
//case 194: Info_194 = a_twinfo; return;
//case 195: Info_195 = a_twinfo; return;
//case 196: Info_196 = a_twinfo; return;
//case 197: Info_197 = a_twinfo; return;
//case 198: Info_198 = a_twinfo; return;
//case 199: Info_199 = a_twinfo; return;
}
}
}

View File

@ -821,9 +821,208 @@ namespace NTwain.Data
}
}
//partial struct TW_DEVICEEVENT
//{
// public TWDE Event { get { return (TWDE)_event; } }
// public TWFL FlashUsed2 { get { return (TWFL)_flashUsed2; } }
//}
partial struct TW_DEVICEEVENT
{
// provide casted versions over raw value
public TWDE Event { get { return (TWDE)_Event; } }
public TWFL FlashUsed2 { get { return (TWFL)_FlashUsed2; } }
}
/// <summary>
/// Container for querying ext image info. After querying and done with
/// the data you must call <see cref="Free(IMemoryManager)"/> to
/// free the memory allocated.
/// </summary>
public partial struct TW_EXTIMAGEINFO
{
/// <summary>
/// A quick way to create a query object with only <see cref="TWEI"/> values.
/// Limit is 100 at this time.
/// </summary>
/// <param name="memMgr"></param>
/// <param name="infoNames"></param>
/// <returns></returns>
public static TW_EXTIMAGEINFO CreateRequest(params TWEI[] infoNames)
{
if (infoNames == null || infoNames.Length == 0) return default;
if (infoNames.Length > 100) throw new InvalidOperationException("Cannot query more than 100 TWEIs at this time.");
TW_EXTIMAGEINFO container = new()
{
NumInfos = (uint)infoNames.Length,
};
for (var i = 0; i < infoNames.Length; i++)
{
TW_INFO info = new() { InfoId = infoNames[i] };
container.Set(i, ref info);
}
return container;
}
/// <summary>
/// Reads the info out of this as array.
/// </summary>
/// <param name="memMgr"></param>
/// <returns></returns>
public TW_INFO[] AsInfos()
{
if (NumInfos == 0) return Array.Empty<TW_INFO>();
var arr = new TW_INFO[NumInfos];
for (var i = 0; i < NumInfos; i++)
{
TW_INFO blah = default;
Get(i, ref blah);
arr[i] = blah;
}
return arr;
}
/// <summary>
/// Frees all data contained here.
/// </summary>
/// <param name="memMgr"></param>
public void Free(IMemoryManager memMgr)
{
Info_000.Free(memMgr);
Info_001.Free(memMgr);
Info_002.Free(memMgr);
Info_003.Free(memMgr);
Info_004.Free(memMgr);
Info_005.Free(memMgr);
Info_006.Free(memMgr);
Info_007.Free(memMgr);
Info_008.Free(memMgr);
Info_009.Free(memMgr);
Info_010.Free(memMgr);
Info_011.Free(memMgr);
Info_012.Free(memMgr);
Info_013.Free(memMgr);
Info_014.Free(memMgr);
Info_015.Free(memMgr);
Info_016.Free(memMgr);
Info_017.Free(memMgr);
Info_018.Free(memMgr);
Info_019.Free(memMgr);
Info_020.Free(memMgr);
Info_021.Free(memMgr);
Info_022.Free(memMgr);
Info_023.Free(memMgr);
Info_024.Free(memMgr);
Info_025.Free(memMgr);
Info_026.Free(memMgr);
Info_027.Free(memMgr);
Info_028.Free(memMgr);
Info_029.Free(memMgr);
Info_030.Free(memMgr);
Info_031.Free(memMgr);
Info_032.Free(memMgr);
Info_033.Free(memMgr);
Info_034.Free(memMgr);
Info_035.Free(memMgr);
Info_036.Free(memMgr);
Info_037.Free(memMgr);
Info_038.Free(memMgr);
Info_039.Free(memMgr);
Info_040.Free(memMgr);
Info_041.Free(memMgr);
Info_042.Free(memMgr);
Info_043.Free(memMgr);
Info_044.Free(memMgr);
Info_045.Free(memMgr);
Info_046.Free(memMgr);
Info_047.Free(memMgr);
Info_048.Free(memMgr);
Info_049.Free(memMgr);
Info_050.Free(memMgr);
Info_051.Free(memMgr);
Info_052.Free(memMgr);
Info_053.Free(memMgr);
Info_054.Free(memMgr);
Info_055.Free(memMgr);
Info_056.Free(memMgr);
Info_057.Free(memMgr);
Info_058.Free(memMgr);
Info_059.Free(memMgr);
Info_060.Free(memMgr);
Info_061.Free(memMgr);
Info_062.Free(memMgr);
Info_063.Free(memMgr);
Info_064.Free(memMgr);
Info_065.Free(memMgr);
Info_066.Free(memMgr);
Info_067.Free(memMgr);
Info_068.Free(memMgr);
Info_069.Free(memMgr);
Info_070.Free(memMgr);
Info_071.Free(memMgr);
Info_072.Free(memMgr);
Info_073.Free(memMgr);
Info_074.Free(memMgr);
Info_075.Free(memMgr);
Info_076.Free(memMgr);
Info_077.Free(memMgr);
Info_078.Free(memMgr);
Info_079.Free(memMgr);
Info_080.Free(memMgr);
Info_081.Free(memMgr);
Info_082.Free(memMgr);
Info_083.Free(memMgr);
Info_084.Free(memMgr);
Info_085.Free(memMgr);
Info_086.Free(memMgr);
Info_087.Free(memMgr);
Info_088.Free(memMgr);
Info_089.Free(memMgr);
Info_090.Free(memMgr);
Info_091.Free(memMgr);
Info_092.Free(memMgr);
Info_093.Free(memMgr);
Info_094.Free(memMgr);
Info_095.Free(memMgr);
Info_096.Free(memMgr);
Info_097.Free(memMgr);
Info_098.Free(memMgr);
Info_099.Free(memMgr);
}
}
partial struct TW_INFO
{
//public unsafe TValue ReadTWTYData<TValue>(int itemIndex = 0) where TValue : struct
//{
// if (ReturnCode != TWRC.SUCCESS || NumItems == 0) return default;
// var sz = ItemType.GetItemTypeSize();
// if (ItemType == TWTY.HANDLE || (sz * NumItems) > 4)
// {
// // read as ptr
// // this is probably not correct
// //((IntPtr)Item.ToPointer()).ReadTWTYData<TValue>(ItemType;
// }
// else
// {
// // read as 4 byte number
// }
//}
/// <summary>
/// Frees any memory used by this if necessary.
/// </summary>
/// <param name="memMgr"></param>
internal unsafe void Free(IMemoryManager memMgr)
{
if (ReturnCode == TWRC.SUCCESS && Item != UIntPtr.Zero &&
(ItemType == TWTY.HANDLE || (ItemType.GetItemTypeSize() * NumItems) > 4))
{
// this is probably not correct
memMgr.Free((IntPtr)Item.ToPointer());
Item = UIntPtr.Zero; // this is only a copy but whatev
}
}
}
}

View File

@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
@ -118,7 +117,7 @@ namespace NTwain.Data
lockedPtr += Marshal.SizeOf(onevalue);
}
return ReadContainerData<TValue>(lockedPtr, itemType, 0);
return ReadTWTYData<TValue>(lockedPtr, itemType, 0);
}
finally
{
@ -188,7 +187,7 @@ namespace NTwain.Data
for (var i = 0; i < count; i++)
{
retVal.Items[i] = ReadContainerData<TValue>(lockedPtr, itemType, i);
retVal.Items[i] = ReadTWTYData<TValue>(lockedPtr, itemType, i);
}
}
finally
@ -235,7 +234,7 @@ namespace NTwain.Data
var arr = new TValue[count];
for (var i = 0; i < count; i++)
{
arr[i] = ReadContainerData<TValue>(lockedPtr, itemType, i);
arr[i] = ReadTWTYData<TValue>(lockedPtr, itemType, i);
}
return arr;
}
@ -425,13 +424,13 @@ namespace NTwain.Data
/// <summary>
/// Read the container pointer content.
/// Read the pointer content as a value specified by <see cref="TWTY"/>.
/// </summary>
/// <param name="intptr">A locked pointer to the container's data pointer. If data is array this is the 0th item.</param>
/// <param name="intptr">A locked pointer to the data pointer. If data is array this is the 0th item.</param>
/// <param name="type">The twain type.</param>
/// <param name="itemIndex">Index of the item if pointer is array.</param>
/// <returns></returns>
static TValue ReadContainerData<TValue>(IntPtr intptr, TWTY type, int itemIndex) where TValue : struct
static TValue ReadTWTYData<TValue>(this IntPtr intptr, TWTY type, int itemIndex) where TValue : struct
{
var isEnum = typeof(TValue).IsEnum;

View File

@ -8,22 +8,18 @@ namespace NTwain.Triplets.ImageDATs
/// </summary>
public class ExtImageInfo
{
public TWRC Get(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, out TW_EXTIMAGEINFO data)
=> DoIt(ref app, ref ds, MSG.GET, out data);
static TWRC DoIt(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, MSG msg, out TW_EXTIMAGEINFO data)
public TWRC Get(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_EXTIMAGEINFO data)
{
var rc = TWRC.FAILURE;
data = default;
if (TwainPlatform.IsWindows)
{
if (TwainPlatform.Is32bit && TwainPlatform.PreferLegacyDSM)
{
rc = WinLegacyDSM.DSM_Entry(ref app, ref ds, DG.IMAGE, DAT.EXTIMAGEINFO, msg, ref data);
rc = WinLegacyDSM.DSM_Entry(ref app, ref ds, DG.IMAGE, DAT.EXTIMAGEINFO, MSG.GET, ref data);
}
else
{
rc = WinNewDSM.DSM_Entry(ref app, ref ds, DG.IMAGE, DAT.EXTIMAGEINFO, msg, ref data);
rc = WinNewDSM.DSM_Entry(ref app, ref ds, DG.IMAGE, DAT.EXTIMAGEINFO, MSG.GET, ref data);
}
}
else if (TwainPlatform.IsMacOSX)
@ -32,11 +28,11 @@ namespace NTwain.Triplets.ImageDATs
TW_IDENTITY_MACOSX ds2 = ds;
if (TwainPlatform.PreferLegacyDSM)
{
rc = OSXLegacyDSM.DSM_Entry(ref app2, ref ds2, DG.IMAGE, DAT.EXTIMAGEINFO, msg, ref data);
rc = OSXLegacyDSM.DSM_Entry(ref app2, ref ds2, DG.IMAGE, DAT.EXTIMAGEINFO, MSG.GET, ref data);
}
else
{
rc = OSXNewDSM.DSM_Entry(ref app2, ref ds2, DG.IMAGE, DAT.EXTIMAGEINFO, msg, ref data);
rc = OSXNewDSM.DSM_Entry(ref app2, ref ds2, DG.IMAGE, DAT.EXTIMAGEINFO, MSG.GET, ref data);
}
}
return rc;

View File

@ -61,11 +61,11 @@ namespace NTwain
{
_uiThreadMarshaller.Invoke(() =>
{
try
{
try
{
StateChanged.Invoke(this, value);
}
catch { }
}
catch { }
});
}
}
@ -127,7 +127,7 @@ namespace NTwain
/// <summary>
/// Fires when <see cref="State"/> changes.
/// Fires when <see cref="State"/> changes.
/// </summary>
public event TwainEventDelegate<STATE>? StateChanged;

View File

@ -3,14 +3,8 @@ using NTwain.Native;
using NTwain.Triplets;
using System;
using System.Buffers;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
using System.Xml.Serialization;
using static NTwain.Native.ImageTools;
namespace NTwain
{
@ -23,6 +17,17 @@ namespace NTwain
// so the array max is made with 32 MB. Typical usage should be a lot less.
static readonly ArrayPool<byte> XferMemPool = ArrayPool<byte>.Create(32 * 1024 * 1024, 8);
/// <summary>
/// Can only be called in state 7, so it's hidden here and
/// only exposed in data transferred event.
/// </summary>
/// <param name="container"></param>
/// <returns></returns>
internal STS GetExtendedImageInfo(ref TW_EXTIMAGEINFO container)
{
return WrapInSTS(DGImage.ExtImageInfo.Get(ref _appIdentity, ref _currentDS, ref container));
}
/// <summary>
/// Start the transfer loop.
@ -69,14 +74,14 @@ namespace NTwain
var readyArgs = new TransferReadyEventArgs(pending.Count, (TWEJ)pending.EOJ);
if (TransferReady != null)
{
_uiThreadMarshaller.Invoke(() =>
{
try
_uiThreadMarshaller.Invoke(() =>
{
try
{
TransferReady.Invoke(this, readyArgs);
}
catch { } // don't let consumer kill the loop if they have exception
});
}
catch { } // don't let consumer kill the loop if they have exception
});
}
if (readyArgs.Cancel == CancelType.EndNow || _closeDsRequested)
@ -153,15 +158,15 @@ namespace NTwain
{
_uiThreadMarshaller.Invoke(() =>
{
try
{
TransferError?.Invoke(this, new TransferErrorEventArgs(ex));
}
catch { }
try
{
TransferError?.Invoke(this, new TransferErrorEventArgs(ex));
}
catch { }
});
}
}
}
}
} while (sts.RC == TWRC.SUCCESS && pending.Count != 0);
}

View File

@ -148,7 +148,7 @@ namespace NTwain
case MSG.XFERREADY:
//_uiThreadMarshaller.Invoke(() =>
//{
State = STATE.S6;
State = STATE.S6;
//});
EnterTransferRoutine();
break;