diff --git a/src/NTwain.Win/DispatcherMarshaller.cs b/src/NTwain.Win/DispatcherMarshaller.cs deleted file mode 100644 index 87297fd..0000000 --- a/src/NTwain.Win/DispatcherMarshaller.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; - -namespace NTwain -{ - /// - /// Uses a WPF dispatcher to do the work. - /// - public class DispatcherMarshaller : IThreadMarshaller - { - private readonly System.Windows.Threading.Dispatcher _dispatcher; - - /// - /// Uses a dispatcher whose UI thread is used to run the work. - /// - /// - public DispatcherMarshaller(System.Windows.Threading.Dispatcher dispatcher) - { - _dispatcher = dispatcher ?? throw new ArgumentNullException(nameof(dispatcher)); - } - - public void BeginInvoke(Delegate work, params object[] args) - { - _dispatcher.BeginInvoke(work, args); - } - - public object Invoke(Delegate work, params object[] args) - { - return _dispatcher.Invoke(work, args); - } - } -} diff --git a/src/NTwain.Win/NTwain.Win.csproj b/src/NTwain.Win/NTwain.Win.csproj deleted file mode 100644 index 246bebb..0000000 --- a/src/NTwain.Win/NTwain.Win.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - NTwain.Win - Contains Windows specific things for NTwain. - net462;netcoreapp3.1;net5.0-windows;net6.0-windows - true - true - NTwain - - - - - - - diff --git a/src/NTwain.Win/WinformMarshaller.cs b/src/NTwain.Win/WinformMarshaller.cs deleted file mode 100644 index b1f7e25..0000000 --- a/src/NTwain.Win/WinformMarshaller.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; - -namespace NTwain -{ - /// - /// Uses a winform UI thread to do the work. - /// - public class WinformMarshaller : IThreadMarshaller - { - private readonly System.Windows.Forms.Control _uiControl; - - /// - /// Uses a control whose UI thread is used to run the work. - /// - /// - public WinformMarshaller(System.Windows.Forms.Control uiControl) - { - _uiControl = uiControl ?? throw new ArgumentNullException(nameof(uiControl)); - } - - public void BeginInvoke(Delegate work, params object[] args) - { - _uiControl.BeginInvoke(work, args); - } - - public object Invoke(Delegate work, params object[] args) - { - return _uiControl.Invoke(work, args); - } - } -} diff --git a/src/NTwain/DSM/DSMGenerator.tt b/src/NTwain/DSM/DSMGenerator.tt index b5b5189..dd9e0b2 100644 --- a/src/NTwain/DSM/DSMGenerator.tt +++ b/src/NTwain/DSM/DSMGenerator.tt @@ -140,6 +140,13 @@ namespace NTwain.DSM DG dg, DAT dat, MSG msg, ref TW_EVENT evt ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, + DG dg, DAT dat, MSG msg, ref TW_TWAINDIRECT task + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( diff --git a/src/NTwain/DSM/Linux64DSM.cs b/src/NTwain/DSM/Linux64DSM.cs index 5fcd058..9015ec2 100644 --- a/src/NTwain/DSM/Linux64DSM.cs +++ b/src/NTwain/DSM/Linux64DSM.cs @@ -120,6 +120,13 @@ namespace NTwain.DSM DG dg, DAT dat, MSG msg, ref TW_EVENT evt ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_TWAINDIRECT task + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( diff --git a/src/NTwain/DSM/LinuxBotched64DSM.cs b/src/NTwain/DSM/LinuxBotched64DSM.cs index 5f326b8..38cf660 100644 --- a/src/NTwain/DSM/LinuxBotched64DSM.cs +++ b/src/NTwain/DSM/LinuxBotched64DSM.cs @@ -120,6 +120,13 @@ namespace NTwain.DSM DG dg, DAT dat, MSG msg, ref TW_EVENT evt ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref TW_TWAINDIRECT task + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( diff --git a/src/NTwain/DSM/LinuxDSM.cs b/src/NTwain/DSM/LinuxDSM.cs index fac872b..1f2cb83 100644 --- a/src/NTwain/DSM/LinuxDSM.cs +++ b/src/NTwain/DSM/LinuxDSM.cs @@ -120,6 +120,13 @@ namespace NTwain.DSM DG dg, DAT dat, MSG msg, ref TW_EVENT evt ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_TWAINDIRECT task + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( diff --git a/src/NTwain/DSM/OSXLegacyDSM.cs b/src/NTwain/DSM/OSXLegacyDSM.cs index cf25c83..2feccbe 100644 --- a/src/NTwain/DSM/OSXLegacyDSM.cs +++ b/src/NTwain/DSM/OSXLegacyDSM.cs @@ -120,6 +120,13 @@ namespace NTwain.DSM DG dg, DAT dat, MSG msg, ref TW_EVENT evt ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, + DG dg, DAT dat, MSG msg, ref TW_TWAINDIRECT task + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( diff --git a/src/NTwain/DSM/OSXNewDSM.cs b/src/NTwain/DSM/OSXNewDSM.cs index ade4406..d12fd4e 100644 --- a/src/NTwain/DSM/OSXNewDSM.cs +++ b/src/NTwain/DSM/OSXNewDSM.cs @@ -120,6 +120,13 @@ namespace NTwain.DSM DG dg, DAT dat, MSG msg, ref TW_EVENT evt ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, + DG dg, DAT dat, MSG msg, ref TW_TWAINDIRECT task + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( diff --git a/src/NTwain/DSM/WinLegacyDSM.cs b/src/NTwain/DSM/WinLegacyDSM.cs index d5c92be..406245b 100644 --- a/src/NTwain/DSM/WinLegacyDSM.cs +++ b/src/NTwain/DSM/WinLegacyDSM.cs @@ -120,6 +120,13 @@ namespace NTwain.DSM DG dg, DAT dat, MSG msg, ref TW_EVENT evt ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_TWAINDIRECT task + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( diff --git a/src/NTwain/DSM/WinNewDSM.cs b/src/NTwain/DSM/WinNewDSM.cs index a4816db..3205a4b 100644 --- a/src/NTwain/DSM/WinNewDSM.cs +++ b/src/NTwain/DSM/WinNewDSM.cs @@ -120,6 +120,13 @@ namespace NTwain.DSM DG dg, DAT dat, MSG msg, ref TW_EVENT evt ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_TWAINDIRECT task + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( diff --git a/src/NTwain/NTwain.csproj b/src/NTwain/NTwain.csproj index de968e9..34db1ec 100644 --- a/src/NTwain/NTwain.csproj +++ b/src/NTwain/NTwain.csproj @@ -28,4 +28,8 @@ DSMGenerator.dummy + + + + diff --git a/src/NTwain/Triplets/ControlDATs/TwainDirect.cs b/src/NTwain/Triplets/ControlDATs/TwainDirect.cs new file mode 100644 index 0000000..e2af955 --- /dev/null +++ b/src/NTwain/Triplets/ControlDATs/TwainDirect.cs @@ -0,0 +1,44 @@ +using NTwain.Data; +using NTwain.DSM; + +namespace NTwain.Triplets.ControlDATs +{ + /// + /// Contains calls used with and . + /// + public class TwainDirect + { + public STS SetTask(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_TWAINDIRECT data) + => DoIt(ref app, ref ds, MSG.SETTASK, ref data); + + static STS DoIt(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, MSG msg, ref TW_TWAINDIRECT data) + { + var rc = STS.FAILURE; + if (TwainPlatform.IsWindows) + { + if (TwainPlatform.Is32bit && TwainPlatform.PreferLegacyDSM) + { + rc = (STS)WinLegacyDSM.DSM_Entry(ref app, ref ds, DG.IMAGE, DAT.CIECOLOR, msg, ref data); + } + else + { + rc = (STS)WinNewDSM.DSM_Entry(ref app, ref ds, DG.IMAGE, DAT.CIECOLOR, msg, ref data); + } + } + else if (TwainPlatform.IsMacOSX) + { + TW_IDENTITY_MACOSX app2 = app; + TW_IDENTITY_MACOSX ds2 = ds; + if (TwainPlatform.PreferLegacyDSM) + { + rc = (STS)OSXLegacyDSM.DSM_Entry(ref app2, ref ds2, DG.IMAGE, DAT.CIECOLOR, msg, ref data); + } + else + { + rc = (STS)OSXNewDSM.DSM_Entry(ref app2, ref ds2, DG.IMAGE, DAT.CIECOLOR, msg, ref data); + } + } + return rc; + } + } +} diff --git a/src/NTwain/Triplets/DGControl.cs b/src/NTwain/Triplets/DGControl.cs index 89fe318..55ca624 100644 --- a/src/NTwain/Triplets/DGControl.cs +++ b/src/NTwain/Triplets/DGControl.cs @@ -41,6 +41,8 @@ namespace NTwain.Triplets public static readonly StatusUtf8 StatusUtf8 = new(); + public static readonly TwainDirect TwainDirect = new(); + public static readonly UserInterface UserInterface = new(); public static readonly XferGroup XferGroup = new();