Added twaindirect call.

This commit is contained in:
Eugene Wang 2023-04-02 22:48:17 -04:00
parent 679a00818a
commit acfbec6a38
14 changed files with 106 additions and 78 deletions

View File

@ -1,31 +0,0 @@
using System;
namespace NTwain
{
/// <summary>
/// Uses a WPF dispatcher to do the work.
/// </summary>
public class DispatcherMarshaller : IThreadMarshaller
{
private readonly System.Windows.Threading.Dispatcher _dispatcher;
/// <summary>
/// Uses a dispatcher whose UI thread is used to run the work.
/// </summary>
/// <param name="dispatcher"></param>
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);
}
}
}

View File

@ -1,16 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<PackageId>NTwain.Win</PackageId>
<Description>Contains Windows specific things for NTwain.</Description>
<TargetFrameworks>net462;netcoreapp3.1;net5.0-windows;net6.0-windows</TargetFrameworks>
<UseWindowsForms>true</UseWindowsForms>
<UseWPF>true</UseWPF>
<RootNamespace>NTwain</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\NTwain\NTwain.csproj" />
</ItemGroup>
</Project>

View File

@ -1,31 +0,0 @@
using System;
namespace NTwain
{
/// <summary>
/// Uses a winform UI thread to do the work.
/// </summary>
public class WinformMarshaller : IThreadMarshaller
{
private readonly System.Windows.Forms.Control _uiControl;
/// <summary>
/// Uses a control whose UI thread is used to run the work.
/// </summary>
/// <param name="uiControl"></param>
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);
}
}
}

View File

@ -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
(

View File

@ -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
(

View File

@ -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
(

View File

@ -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
(

View File

@ -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
(

View File

@ -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
(

View File

@ -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
(

View File

@ -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
(

View File

@ -28,4 +28,8 @@
<LastGenOutput>DSMGenerator.dummy</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,44 @@
using NTwain.Data;
using NTwain.DSM;
namespace NTwain.Triplets.ControlDATs
{
/// <summary>
/// Contains calls used with <see cref="DG.CONTROL"/> and <see cref="DAT.TWAINDIRECT"/>.
/// </summary>
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;
}
}
}

View File

@ -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();