mirror of
https://github.com/soukoku/ntwain.git
synced 2025-12-01 10:54:08 +08:00
Fixed enum cap values not read correctly (#33).
This commit is contained in:
@@ -158,14 +158,14 @@ namespace NTwain
|
|||||||
/// <value>
|
/// <value>
|
||||||
/// The range minimum value.
|
/// The range minimum value.
|
||||||
/// </value>
|
/// </value>
|
||||||
public uint RangeMinValue { get; private set; }
|
public object RangeMinValue { get; private set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The most positive/least negative value of the range.
|
/// The most positive/least negative value of the range.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>
|
/// <value>
|
||||||
/// The range maximum value.
|
/// The range maximum value.
|
||||||
/// </value>
|
/// </value>
|
||||||
public uint RangeMaxValue { get; private set; }
|
public object RangeMaxValue { get; private set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The delta between two adjacent values of the range.
|
/// The delta between two adjacent values of the range.
|
||||||
/// e.g. Item2 - Item1 = StepSize;
|
/// e.g. Item2 - Item1 = StepSize;
|
||||||
@@ -173,7 +173,7 @@ namespace NTwain
|
|||||||
/// <value>
|
/// <value>
|
||||||
/// The size of the range step.
|
/// The size of the range step.
|
||||||
/// </value>
|
/// </value>
|
||||||
public uint RangeStepSize { get; private set; }
|
public object RangeStepSize { get; private set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -207,10 +207,104 @@ namespace NTwain
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ContainerType.Range:
|
case ContainerType.Range:
|
||||||
for (var i = RangeMinValue; i >= RangeMinValue && i <= RangeMaxValue; i += RangeStepSize)
|
// horrible cast but should work.
|
||||||
|
// in the for loop we also compare against min in case the step
|
||||||
|
// is parsed as negative number and causes infinite loop.
|
||||||
|
switch (ItemType)
|
||||||
|
{
|
||||||
|
case Data.ItemType.Fix32:
|
||||||
|
{
|
||||||
|
var min = (TWFix32)RangeMinValue;
|
||||||
|
var counter = min;
|
||||||
|
var max = (TWFix32)RangeMaxValue;
|
||||||
|
var step = (TWFix32)RangeStepSize;
|
||||||
|
|
||||||
|
for (var i = min; i >= min && i <= max; i += step)
|
||||||
{
|
{
|
||||||
toPopulate.Add(i);
|
toPopulate.Add(i);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Data.ItemType.UInt32:
|
||||||
|
{
|
||||||
|
var min = (uint)RangeMinValue;
|
||||||
|
var counter = min;
|
||||||
|
var max = (uint)RangeMaxValue;
|
||||||
|
var step = (uint)RangeStepSize;
|
||||||
|
|
||||||
|
for (var i = min; i >= min && i <= max; i += step)
|
||||||
|
{
|
||||||
|
toPopulate.Add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Data.ItemType.Int32:
|
||||||
|
{
|
||||||
|
var min = (int)RangeMinValue;
|
||||||
|
var counter = min;
|
||||||
|
var max = (int)RangeMaxValue;
|
||||||
|
var step = (int)RangeStepSize;
|
||||||
|
|
||||||
|
for (var i = min; i >= min && i <= max; i += step)
|
||||||
|
{
|
||||||
|
toPopulate.Add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
// these should never happen since TW_ENUM fields are 4 bytes but you never know
|
||||||
|
case Data.ItemType.UInt16:
|
||||||
|
{
|
||||||
|
var min = (ushort)RangeMinValue;
|
||||||
|
var counter = min;
|
||||||
|
var max = (ushort)RangeMaxValue;
|
||||||
|
var step = (ushort)RangeStepSize;
|
||||||
|
|
||||||
|
for (var i = min; i >= min && i <= max; i += step)
|
||||||
|
{
|
||||||
|
toPopulate.Add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Data.ItemType.Int16:
|
||||||
|
{
|
||||||
|
var min = (short)RangeMinValue;
|
||||||
|
var counter = min;
|
||||||
|
var max = (short)RangeMaxValue;
|
||||||
|
var step = (short)RangeStepSize;
|
||||||
|
|
||||||
|
for (var i = min; i >= min && i <= max; i += step)
|
||||||
|
{
|
||||||
|
toPopulate.Add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Data.ItemType.UInt8:
|
||||||
|
{
|
||||||
|
var min = (byte)RangeMinValue;
|
||||||
|
var counter = min;
|
||||||
|
var max = (byte)RangeMaxValue;
|
||||||
|
var step = (byte)RangeStepSize;
|
||||||
|
|
||||||
|
for (var i = min; i >= min && i <= max; i += step)
|
||||||
|
{
|
||||||
|
toPopulate.Add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Data.ItemType.Int8:
|
||||||
|
{
|
||||||
|
var min = (sbyte)RangeMinValue;
|
||||||
|
var counter = min;
|
||||||
|
var max = (sbyte)RangeMaxValue;
|
||||||
|
var step = (sbyte)RangeStepSize;
|
||||||
|
|
||||||
|
for (var i = min; i >= min && i <= max; i += step)
|
||||||
|
{
|
||||||
|
toPopulate.Add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return toPopulate;
|
return toPopulate;
|
||||||
@@ -271,15 +365,22 @@ namespace NTwain
|
|||||||
int offset = 0;
|
int offset = 0;
|
||||||
ItemType = (ItemType)(ushort)Marshal.ReadInt16(baseAddr, offset);
|
ItemType = (ItemType)(ushort)Marshal.ReadInt16(baseAddr, offset);
|
||||||
offset += 2;
|
offset += 2;
|
||||||
RangeMinValue = (uint)Marshal.ReadInt32(baseAddr, offset);
|
|
||||||
offset += 4;
|
RangeMinValue = baseAddr.ReadValue(ref offset, ItemType);
|
||||||
RangeMaxValue = (uint)Marshal.ReadInt32(baseAddr, offset);
|
RangeMaxValue = baseAddr.ReadValue(ref offset, ItemType);
|
||||||
offset += 4;
|
RangeStepSize = baseAddr.ReadValue(ref offset, ItemType);
|
||||||
RangeStepSize = (uint)Marshal.ReadInt32(baseAddr, offset);
|
RangeDefaultValue = baseAddr.ReadValue(ref offset, ItemType);
|
||||||
offset += 4;
|
RangeCurrentValue = baseAddr.ReadValue(ref offset, ItemType);
|
||||||
RangeDefaultValue = (uint)Marshal.ReadInt32(baseAddr, offset);
|
|
||||||
offset += 4;
|
//RangeMinValue = (uint)Marshal.ReadInt32(baseAddr, offset);
|
||||||
RangeCurrentValue = (uint)Marshal.ReadInt32(baseAddr, offset);
|
//offset += 4;
|
||||||
|
//RangeMaxValue = (uint)Marshal.ReadInt32(baseAddr, offset);
|
||||||
|
//offset += 4;
|
||||||
|
//RangeStepSize = (uint)Marshal.ReadInt32(baseAddr, offset);
|
||||||
|
//offset += 4;
|
||||||
|
//RangeDefaultValue = (uint)Marshal.ReadInt32(baseAddr, offset);
|
||||||
|
//offset += 4;
|
||||||
|
//RangeCurrentValue = (uint)Marshal.ReadInt32(baseAddr, offset);
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ namespace NTwain
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// The build release version number.
|
/// The build release version number.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string Build = "3.2.5"; // change this for each nuget release
|
public const string Build = "3.2.6"; // change this for each nuget release
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user