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}.");
}
}
}