From bd3d70c9912066c7e877965d0aa38149c0c2c209 Mon Sep 17 00:00:00 2001 From: Eugene Wang Date: Thu, 15 Nov 2018 18:14:26 -0500 Subject: [PATCH] Added GetStatus() call. --- samples/NetCoreConsole/NetCoreConsole.csproj | 1 + samples/NetFXConsole/NetFXConsole.csproj | 2 ++ src/NTwain/DataSource.cs | 11 ++++++++++ src/NTwain/NTwain.csproj | 1 + src/NTwain/Triplets/DGControl.Status.cs | 22 ++++++++++++++++++++ src/NTwain/Triplets/DGControl.cs | 3 +++ src/NTwain/TwainSession.cs | 17 +++++++++++++-- 7 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/NTwain/Triplets/DGControl.Status.cs diff --git a/samples/NetCoreConsole/NetCoreConsole.csproj b/samples/NetCoreConsole/NetCoreConsole.csproj index e6186c2..8eeaeef 100644 --- a/samples/NetCoreConsole/NetCoreConsole.csproj +++ b/samples/NetCoreConsole/NetCoreConsole.csproj @@ -4,6 +4,7 @@ Exe netcoreapp2.1 ConsoleApp + 7.1 diff --git a/samples/NetFXConsole/NetFXConsole.csproj b/samples/NetFXConsole/NetFXConsole.csproj index 7b07811..8daac8d 100644 --- a/samples/NetFXConsole/NetFXConsole.csproj +++ b/samples/NetFXConsole/NetFXConsole.csproj @@ -21,6 +21,7 @@ DEBUG;TRACE prompt 4 + 7.1 AnyCPU @@ -30,6 +31,7 @@ TRACE prompt 4 + 7.1 diff --git a/src/NTwain/DataSource.cs b/src/NTwain/DataSource.cs index afd446c..388a13a 100644 --- a/src/NTwain/DataSource.cs +++ b/src/NTwain/DataSource.cs @@ -35,6 +35,17 @@ namespace NTwain public ReturnCode Close() => Session.DGControl.Identity.CloseDS(Identity); + /// + /// Gets the source status. Useful after getting a non-success return code. + /// + /// + public TW_STATUS GetStatus() + { + TW_STATUS stat = default; + var rc = Session.DGControl.Status.GetSourceStatus(ref stat); + return stat; + } + /// /// Returns a that represents this instance. diff --git a/src/NTwain/NTwain.csproj b/src/NTwain/NTwain.csproj index dd9733c..ee0973b 100644 --- a/src/NTwain/NTwain.csproj +++ b/src/NTwain/NTwain.csproj @@ -19,6 +19,7 @@ 4.0.0.0 4.0.0.0 4.0.0 + 7.1 diff --git a/src/NTwain/Triplets/DGControl.Status.cs b/src/NTwain/Triplets/DGControl.Status.cs new file mode 100644 index 0000000..c4b8163 --- /dev/null +++ b/src/NTwain/Triplets/DGControl.Status.cs @@ -0,0 +1,22 @@ +using NTwain.Data; +using NTwain.Internals; + +namespace NTwain.Triplets +{ + sealed class Status : BaseTriplet + { + internal Status(TwainSession session) : base(session) { } + + public ReturnCode GetManagerStatus(ref TW_STATUS status) + { + return NativeMethods.DsmWin32(Session.Config.AppWin32, null, + DataGroups.Control, DataArgumentType.Status, Message.Get, ref status); + } + + public ReturnCode GetSourceStatus(ref TW_STATUS status) + { + return NativeMethods.DsmWin32(Session.Config.AppWin32, Session.CurrentSource.Identity, + DataGroups.Control, DataArgumentType.Status, Message.Get, ref status); + } + } +} \ No newline at end of file diff --git a/src/NTwain/Triplets/DGControl.cs b/src/NTwain/Triplets/DGControl.cs index f2f6dc8..6e37c8b 100644 --- a/src/NTwain/Triplets/DGControl.cs +++ b/src/NTwain/Triplets/DGControl.cs @@ -27,5 +27,8 @@ namespace NTwain.Triplets Callback2 _callback2; internal Callback2 Callback2 => _callback2 ?? (_callback2 = new Callback2(Session)); + + Status _status; + internal Status Status => _status ?? (_status = new Status(Session)); } } diff --git a/src/NTwain/TwainSession.cs b/src/NTwain/TwainSession.cs index 63e36bb..3cd1594 100644 --- a/src/NTwain/TwainSession.cs +++ b/src/NTwain/TwainSession.cs @@ -82,6 +82,17 @@ namespace NTwain return rc; } + /// + /// Gets the manager status. Useful after getting a non-success return code. + /// + /// + public TW_STATUS GetStatus() + { + TW_STATUS stat = default; + var rc = DGControl.Status.GetManagerStatus(ref stat); + return stat; + } + internal void RegisterCallback() { var callbackPtr = Marshal.GetFunctionPointerForDelegate(_callbackDelegate); @@ -92,7 +103,8 @@ namespace NTwain if (rc == ReturnCode.Success) Debug.WriteLine("Registed Callback2 success."); else { - + var status = GetStatus(); + Debug.WriteLine($"Register Callback2 failed with condition code: {status.ConditionCode}."); } @@ -106,7 +118,8 @@ namespace NTwain if (rc == ReturnCode.Success) Debug.WriteLine("Registed Callback success."); else { - + var status = GetStatus(); + Debug.WriteLine($"Register Callback failed with {status.ConditionCode}."); } } }