I just love reorganizing.

This commit is contained in:
Eugene Wang
2023-04-02 15:32:19 -04:00
parent 306a67f7a2
commit 890e5680be
37 changed files with 479 additions and 222 deletions

View File

@@ -1,8 +1,8 @@
using NTwain; using NTwain;
using NTwain.Data;
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Reflection; using System.Reflection;
using TWAINWorkingGroup;
namespace SampleConsole namespace SampleConsole
{ {

View File

@@ -1,10 +1,10 @@
using NTwain; using NTwain;
using NTwain.Data;
using System; using System;
using System.ComponentModel; using System.ComponentModel;
using System.Diagnostics; using System.Diagnostics;
using System.Reflection; using System.Reflection;
using System.Windows.Forms; using System.Windows.Forms;
using TWAINWorkingGroup;
namespace WinForm32 namespace WinForm32
{ {

View File

@@ -1,92 +1,123 @@
using System; using NTwain.Data;
using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using TWAINWorkingGroup;
namespace NTwain.DSM namespace NTwain.DSM
{ {
static class OSXLegacyDSM /// <summary>
/// Low-level pinvoke methods for /System/Library/Frameworks/framework/TWAIN.
/// </summary>
public static class OSXLegacyDSM
{ {
const string DsmName = "/System/Library/Frameworks/framework/TWAIN"; const string DsmName = "/System/Library/Frameworks/framework/TWAIN";
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, IntPtr dest, ref TW_IDENTITY_MACOSX origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref IntPtr hwnd DG dg, DAT dat, MSG msg, ref IntPtr hwnd
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, IntPtr dest, ref TW_IDENTITY_MACOSX origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_IDENTITY_MACOSX twidentity DG dg, DAT dat, MSG msg, ref TW_IDENTITY_MACOSX twidentity
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest,
DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, IntPtr dest, ref TW_IDENTITY_MACOSX origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, IntPtr dest, ref TW_IDENTITY_MACOSX origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_STATUSUTF8 twstatusutf8 DG dg, DAT dat, MSG msg, ref TW_STATUSUTF8 twstatusutf8
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, IntPtr dest, ref TW_IDENTITY_MACOSX origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_ENTRYPOINT twentrypoint DG dg, DAT dat, MSG msg, ref TW_ENTRYPOINT twentrypoint
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest,
DG dg, DAT dat, MSG msg, ref TW_DEVICEEVENT twdeviceevent DG dg, DAT dat, MSG msg, ref TW_DEVICEEVENT twdeviceevent
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest,
DG dg, DAT dat, MSG msg, ref TW_CUSTOMDSDATA twcustomedsdata DG dg, DAT dat, MSG msg, ref TW_CUSTOMDSDATA twcustomedsdata
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest,
DG dg, DAT dat, MSG msg, ref TW_CALLBACK twcallback DG dg, DAT dat, MSG msg, ref TW_CALLBACK twcallback
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest,
DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest,
DG dg, DAT dat, MSG msg, ref DG xfergroup DG dg, DAT dat, MSG msg, ref DG xfergroup
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest,
DG dg, DAT dat, MSG msg, ref TW_USERINTERFACE userinterface DG dg, DAT dat, MSG msg, ref TW_USERINTERFACE userinterface
); );
[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_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_PENDINGXFERS pendingxfers
);
[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_SETUPMEMXFER memxfer
);
[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_SETUPFILEXFER filexfer
);
} }
} }

View File

@@ -1,92 +1,123 @@
using System; using NTwain.Data;
using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using TWAINWorkingGroup;
namespace NTwain.DSM namespace NTwain.DSM
{ {
static class OSXNewDSM /// <summary>
/// Low-level pinvoke methods for /Library/Frameworks/TWAINDSM.framework/TWAINDSM.
/// </summary>
public static class OSXNewDSM
{ {
const string DsmName = "/Library/Frameworks/TWAINDSM.framework/TWAINDSM"; const string DsmName = "/Library/Frameworks/TWAINDSM.framework/TWAINDSM";
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, IntPtr dest, ref TW_IDENTITY_MACOSX origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref IntPtr hwnd DG dg, DAT dat, MSG msg, ref IntPtr hwnd
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, IntPtr dest, ref TW_IDENTITY_MACOSX origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_IDENTITY_MACOSX twidentity DG dg, DAT dat, MSG msg, ref TW_IDENTITY_MACOSX twidentity
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest,
DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, IntPtr dest, ref TW_IDENTITY_MACOSX origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, IntPtr dest, ref TW_IDENTITY_MACOSX origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_STATUSUTF8 twstatusutf8 DG dg, DAT dat, MSG msg, ref TW_STATUSUTF8 twstatusutf8
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, IntPtr dest, ref TW_IDENTITY_MACOSX origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_ENTRYPOINT twentrypoint DG dg, DAT dat, MSG msg, ref TW_ENTRYPOINT twentrypoint
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest,
DG dg, DAT dat, MSG msg, ref TW_DEVICEEVENT twdeviceevent DG dg, DAT dat, MSG msg, ref TW_DEVICEEVENT twdeviceevent
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest,
DG dg, DAT dat, MSG msg, ref TW_CUSTOMDSDATA twcustomedsdata DG dg, DAT dat, MSG msg, ref TW_CUSTOMDSDATA twcustomedsdata
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest,
DG dg, DAT dat, MSG msg, ref TW_CALLBACK twcallback DG dg, DAT dat, MSG msg, ref TW_CALLBACK twcallback
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest,
DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest,
DG dg, DAT dat, MSG msg, ref DG xfergroup DG dg, DAT dat, MSG msg, ref DG xfergroup
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest,
DG dg, DAT dat, MSG msg, ref TW_USERINTERFACE userinterface DG dg, DAT dat, MSG msg, ref TW_USERINTERFACE userinterface
); );
[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_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_PENDINGXFERS pendingxfers
);
[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_SETUPMEMXFER memxfer
);
[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_SETUPFILEXFER filexfer
);
} }
} }

7
src/NTwain/DSM/Readme.md Normal file
View File

@@ -0,0 +1,7 @@
This contains the pinvoke methods for the DSM entry.
This is the lowest API level of the lib and should not
be used directly unless you know what you're doing.
A higher level abstraction such as the ones in the
Triplets namespace or the TwainSession object
would be easier to use.

View File

@@ -1,92 +1,123 @@
using System; using NTwain.Data;
using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using TWAINWorkingGroup;
namespace NTwain.DSM namespace NTwain.DSM
{ {
static class WinLegacyDSM /// <summary>
/// Low-level pinvoke methods for twain_32.dll.
/// </summary>
public static class WinLegacyDSM
{ {
const string DsmName = "twain_32.dll"; const string DsmName = "twain_32.dll";
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, IntPtr dest, ref TW_IDENTITY_LEGACY origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref IntPtr hwnd DG dg, DAT dat, MSG msg, ref IntPtr hwnd
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, IntPtr dest, ref TW_IDENTITY_LEGACY origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_IDENTITY_LEGACY twidentity DG dg, DAT dat, MSG msg, ref TW_IDENTITY_LEGACY twidentity
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest,
DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, IntPtr dest, ref TW_IDENTITY_LEGACY origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, IntPtr dest, ref TW_IDENTITY_LEGACY origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_STATUSUTF8 twstatusutf8 DG dg, DAT dat, MSG msg, ref TW_STATUSUTF8 twstatusutf8
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, IntPtr dest, ref TW_IDENTITY_LEGACY origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_ENTRYPOINT twentrypoint DG dg, DAT dat, MSG msg, ref TW_ENTRYPOINT twentrypoint
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest,
DG dg, DAT dat, MSG msg, ref TW_DEVICEEVENT twdeviceevent DG dg, DAT dat, MSG msg, ref TW_DEVICEEVENT twdeviceevent
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest,
DG dg, DAT dat, MSG msg, ref TW_CUSTOMDSDATA twcustomedsdata DG dg, DAT dat, MSG msg, ref TW_CUSTOMDSDATA twcustomedsdata
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest,
DG dg, DAT dat, MSG msg, ref TW_CALLBACK twcallback DG dg, DAT dat, MSG msg, ref TW_CALLBACK twcallback
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest,
DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest,
DG dg, DAT dat, MSG msg, ref DG xfergroup DG dg, DAT dat, MSG msg, ref DG xfergroup
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest,
DG dg, DAT dat, MSG msg, ref TW_USERINTERFACE userinterface DG dg, DAT dat, MSG msg, ref TW_USERINTERFACE userinterface
); );
[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_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_PENDINGXFERS pendingxfers
);
[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_SETUPMEMXFER memxfer
);
[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_SETUPFILEXFER filexfer
);
} }
} }

View File

@@ -1,92 +1,123 @@
using System; using NTwain.Data;
using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using TWAINWorkingGroup;
namespace NTwain.DSM namespace NTwain.DSM
{ {
static class WinNewDSM /// <summary>
/// Low-level pinvoke methods for twaindsm.dll.
/// </summary>
public static class WinNewDSM
{ {
const string DsmName = "twaindsm.dll"; const string DsmName = "twaindsm.dll";
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, IntPtr dest, ref TW_IDENTITY_LEGACY origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref IntPtr hwnd DG dg, DAT dat, MSG msg, ref IntPtr hwnd
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, IntPtr dest, ref TW_IDENTITY_LEGACY origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_IDENTITY_LEGACY twidentity DG dg, DAT dat, MSG msg, ref TW_IDENTITY_LEGACY twidentity
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest,
DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, IntPtr dest, ref TW_IDENTITY_LEGACY origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, IntPtr dest, ref TW_IDENTITY_LEGACY origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_STATUSUTF8 twstatusutf8 DG dg, DAT dat, MSG msg, ref TW_STATUSUTF8 twstatusutf8
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, IntPtr dest, ref TW_IDENTITY_LEGACY origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_ENTRYPOINT twentrypoint DG dg, DAT dat, MSG msg, ref TW_ENTRYPOINT twentrypoint
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest,
DG dg, DAT dat, MSG msg, ref TW_DEVICEEVENT twdeviceevent DG dg, DAT dat, MSG msg, ref TW_DEVICEEVENT twdeviceevent
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest,
DG dg, DAT dat, MSG msg, ref TW_CUSTOMDSDATA twcustomedsdata DG dg, DAT dat, MSG msg, ref TW_CUSTOMDSDATA twcustomedsdata
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest,
DG dg, DAT dat, MSG msg, ref TW_CALLBACK twcallback DG dg, DAT dat, MSG msg, ref TW_CALLBACK twcallback
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest,
DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest,
DG dg, DAT dat, MSG msg, ref DG xfergroup DG dg, DAT dat, MSG msg, ref DG xfergroup
); );
[DllImport(DsmName, CharSet = CharSet.Ansi)] [DllImport(DsmName, CharSet = CharSet.Ansi)]
internal static extern ushort DSM_Entry public static extern ushort DSM_Entry
( (
ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest,
DG dg, DAT dat, MSG msg, ref TW_USERINTERFACE userinterface DG dg, DAT dat, MSG msg, ref TW_USERINTERFACE userinterface
); );
[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_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_PENDINGXFERS pendingxfers
);
[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_SETUPMEMXFER memxfer
);
[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_SETUPFILEXFER filexfer
);
} }
} }

11
src/NTwain/Data/README.md Normal file
View File

@@ -0,0 +1,11 @@
This namespace contains types and utilities that were modified
from the [twaincs project](https://github.com/twain/twain-cs).
Version initially used is 2.5.0.0.
I just couldn't trust myself with making correct struct definitions
so used those instead.
The TWAINH.cs file are minimally modified so they could be updated
easily should I need to. Most modifications are added in
TWAINH_EXTRAS.cs.

View File

@@ -46,7 +46,7 @@ using System.Diagnostics.CodeAnalysis;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text; using System.Text;
namespace TWAINWorkingGroup namespace NTwain.Data
{ {
///// <summary> ///// <summary>
///// This file contains content gleaned from version 2.4 of the C/C++ H ///// This file contains content gleaned from version 2.4 of the C/C++ H

View File

@@ -4,9 +4,9 @@ using System.Globalization;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text; using System.Text;
namespace TWAINWorkingGroup namespace NTwain.Data
{ {
// this contains my additions under the TWAINWorkingGroup namespace // this contains my additions
// that makes some twain types easier to work with. // that makes some twain types easier to work with.
/// <summary> /// <summary>

View File

@@ -1,15 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<PackageId>NTwain</PackageId> <PackageId>NTwain</PackageId>
<Description>Library containing the TWAIN API for dotnet.</Description> <Description>Library containing the TWAIN API for dotnet.</Description>
<TargetFrameworks>net6.0;net462;</TargetFrameworks> <TargetFrameworks>net6.0;net6.0-windows;net462;</TargetFrameworks>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'net462' OR '$(TargetFramework)' == 'net6.0-windows'">
<UseWPF>true</UseWPF>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="System.Text.Encoding.CodePages" Version="7.0.0" /> <PackageReference Include="System.Text.Encoding.CodePages" Version="7.0.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -41,6 +41,7 @@
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
/////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////
using NTwain.Data;
using System; using System;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;

View File

@@ -1,4 +0,0 @@
This namespace contains types and utilities that were modified
from the [twaincs project](https://github.com/twain/twain-cs).
Version initially used is 2.5.0.0.

View File

@@ -1,5 +1,5 @@
using NTwain.DSM; using NTwain.Data;
using TWAINWorkingGroup; using NTwain.DSM;
namespace NTwain.Triplets.ControlDATs namespace NTwain.Triplets.ControlDATs
{ {
@@ -8,11 +8,6 @@ namespace NTwain.Triplets.ControlDATs
/// </summary> /// </summary>
public class Callback public class Callback
{ {
/// <summary>
/// Registers the callback function.
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public STS RegisterCallback(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_CALLBACK data) public STS RegisterCallback(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_CALLBACK data)
{ {
var rc = STS.FAILURE; var rc = STS.FAILURE;

View File

@@ -1,5 +1,5 @@
using NTwain.DSM; using NTwain.Data;
using TWAINWorkingGroup; using NTwain.DSM;
namespace NTwain.Triplets.ControlDATs namespace NTwain.Triplets.ControlDATs
{ {
@@ -8,11 +8,6 @@ namespace NTwain.Triplets.ControlDATs
/// </summary> /// </summary>
public class Callback2 public class Callback2
{ {
/// <summary>
/// Registers the callback function.
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public STS RegisterCallback(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_CALLBACK2 data) public STS RegisterCallback(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_CALLBACK2 data)
{ {
var rc = STS.FAILURE; var rc = STS.FAILURE;

View File

@@ -1,5 +1,5 @@
using NTwain.DSM; using NTwain.Data;
using TWAINWorkingGroup; using NTwain.DSM;
namespace NTwain.Triplets.ControlDATs namespace NTwain.Triplets.ControlDATs
{ {
@@ -8,22 +8,12 @@ namespace NTwain.Triplets.ControlDATs
/// </summary> /// </summary>
public class CustomDsData public class CustomDsData
{ {
/// <summary>
/// Loads the custom DS data.
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public STS Get(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, out TW_CUSTOMDSDATA data) public STS Get(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, out TW_CUSTOMDSDATA data)
{ {
data = default; data = default;
return DoIt(ref app, ref ds, MSG.GET, ref data); return DoIt(ref app, ref ds, MSG.GET, ref data);
} }
/// <summary>
/// Sets the custom DS data.
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public STS Set(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_CUSTOMDSDATA data) public STS Set(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_CUSTOMDSDATA data)
=> DoIt(ref app, ref ds, MSG.SET, ref data); => DoIt(ref app, ref ds, MSG.SET, ref data);

View File

@@ -1,5 +1,5 @@
using NTwain.DSM; using NTwain.Data;
using TWAINWorkingGroup; using NTwain.DSM;
namespace NTwain.Triplets.ControlDATs namespace NTwain.Triplets.ControlDATs
{ {
@@ -16,21 +16,16 @@ namespace NTwain.Triplets.ControlDATs
public STS Get(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, out TW_DEVICEEVENT data) public STS Get(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, out TW_DEVICEEVENT data)
{ {
data = default; data = default;
return DoIt(ref app, ref ds, MSG.GET, ref data);
}
static STS DoIt(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, MSG msg, ref TW_DEVICEEVENT data)
{
var rc = STS.FAILURE; var rc = STS.FAILURE;
if (TwainPlatform.IsWindows) if (TwainPlatform.IsWindows)
{ {
if (TwainPlatform.Is32bit && TwainPlatform.PreferLegacyDSM) if (TwainPlatform.Is32bit && TwainPlatform.PreferLegacyDSM)
{ {
rc = (STS)WinLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data); rc = (STS)WinLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, MSG.GET, ref data);
} }
else else
{ {
rc = (STS)WinNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data); rc = (STS)WinNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, MSG.GET, ref data);
} }
} }
else if (TwainPlatform.IsMacOSX) else if (TwainPlatform.IsMacOSX)
@@ -39,11 +34,11 @@ namespace NTwain.Triplets.ControlDATs
TW_IDENTITY_MACOSX ds2 = ds; TW_IDENTITY_MACOSX ds2 = ds;
if (TwainPlatform.PreferLegacyDSM) if (TwainPlatform.PreferLegacyDSM)
{ {
rc = (STS)OSXLegacyDSM.DSM_Entry(ref app2, ref ds2, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data); rc = (STS)OSXLegacyDSM.DSM_Entry(ref app2, ref ds2, DG.CONTROL, DAT.DEVICEEVENT, MSG.GET, ref data);
} }
else else
{ {
rc = (STS)OSXNewDSM.DSM_Entry(ref app2, ref ds2, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data); rc = (STS)OSXNewDSM.DSM_Entry(ref app2, ref ds2, DG.CONTROL, DAT.DEVICEEVENT, MSG.GET, ref data);
} }
} }
return rc; return rc;

View File

@@ -1,7 +1,7 @@
using NTwain.DSM; using NTwain.Data;
using NTwain.DSM;
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using TWAINWorkingGroup;
namespace NTwain.Triplets.ControlDATs namespace NTwain.Triplets.ControlDATs
{ {
@@ -10,11 +10,6 @@ namespace NTwain.Triplets.ControlDATs
/// </summary> /// </summary>
public class EntryPoint public class EntryPoint
{ {
/// <summary>
/// Loads and opens the DSM.
/// </summary>
/// <param name="entry"></param>
/// <returns></returns>
public STS Get(ref TW_IDENTITY_LEGACY app, out TW_ENTRYPOINT_DELEGATES entry) public STS Get(ref TW_IDENTITY_LEGACY app, out TW_ENTRYPOINT_DELEGATES entry)
{ {
entry = default; entry = default;

View File

@@ -0,0 +1,41 @@
using NTwain.Data;
using NTwain.DSM;
namespace NTwain.Triplets.ControlDATs
{
/// <summary>
/// Contains calls used with <see cref="DG.CONTROL"/> and <see cref="DAT.EVENT"/>.
/// </summary>
public class Event
{
public STS ProcessEvent(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_EVENT data)
{
var rc = STS.FAILURE;
if (TwainPlatform.IsWindows)
{
if (TwainPlatform.Is32bit && TwainPlatform.PreferLegacyDSM)
{
rc = (STS)WinLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, MSG.PROCESSEVENT, ref data);
}
else
{
rc = (STS)WinNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, MSG.PROCESSEVENT, 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.CONTROL, DAT.DEVICEEVENT, MSG.PROCESSEVENT, ref data);
}
else
{
rc = (STS)OSXNewDSM.DSM_Entry(ref app2, ref ds2, DG.CONTROL, DAT.DEVICEEVENT, MSG.PROCESSEVENT, ref data);
}
}
return rc;
}
}
}

View File

@@ -1,6 +1,6 @@
using NTwain.DSM; using NTwain.Data;
using NTwain.DSM;
using System; using System;
using TWAINWorkingGroup;
namespace NTwain.Triplets.ControlDATs namespace NTwain.Triplets.ControlDATs
{ {
@@ -9,18 +9,9 @@ namespace NTwain.Triplets.ControlDATs
/// </summary> /// </summary>
public class Identity public class Identity
{ {
/// <summary>
/// Loads and opens the specified data source.
/// </summary>
/// <param name="ds"></param>
/// <returns></returns>
public STS OpenDS(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds) public STS OpenDS(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds)
=> DoIt(ref app, MSG.OPENDS, ref ds); => DoIt(ref app, MSG.OPENDS, ref ds);
/// <summary>
/// Closes the currently open data source.
/// </summary>
/// <returns></returns>
public STS CloseDS(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds) public STS CloseDS(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds)
=> DoIt(ref app, MSG.CLOSEDS, ref ds); => DoIt(ref app, MSG.CLOSEDS, ref ds);
@@ -35,11 +26,6 @@ namespace NTwain.Triplets.ControlDATs
return DoIt(ref app, MSG.USERSELECT, ref ds); return DoIt(ref app, MSG.USERSELECT, ref ds);
} }
/// <summary>
/// Gets the default data source.
/// </summary>
/// <param name="ds"></param>
/// <returns></returns>
public STS GetDefault(ref TW_IDENTITY_LEGACY app, out TW_IDENTITY_LEGACY ds) public STS GetDefault(ref TW_IDENTITY_LEGACY app, out TW_IDENTITY_LEGACY ds)
{ {
ds = default; ds = default;

View File

@@ -1,6 +1,6 @@
using NTwain.DSM; using NTwain.Data;
using NTwain.DSM;
using System; using System;
using TWAINWorkingGroup;
namespace NTwain.Triplets.ControlDATs namespace NTwain.Triplets.ControlDATs
{ {

View File

@@ -0,0 +1,51 @@
using NTwain.Data;
using NTwain.DSM;
namespace NTwain.Triplets.ControlDATs
{
/// <summary>
/// Contains calls used with <see cref="DG.CONTROL"/> and <see cref="DAT.PENDINGXFERS"/>.
/// </summary>
public class PendingXfers
{
public STS EndXfer(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_PENDINGXFERS data)
=> DoIt(ref app, ref ds, MSG.ENDXFER, ref data);
public STS Get(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_PENDINGXFERS data)
=> DoIt(ref app, ref ds, MSG.GET, ref data);
public STS Reset(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_PENDINGXFERS data)
=> DoIt(ref app, ref ds, MSG.RESET, ref data);
public STS StopFeeder(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_PENDINGXFERS data)
=> DoIt(ref app, ref ds, MSG.STOPFEEDER, ref data);
static STS DoIt(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, MSG msg, ref TW_PENDINGXFERS data)
{
var rc = STS.FAILURE;
if (TwainPlatform.IsWindows)
{
if (TwainPlatform.Is32bit && TwainPlatform.PreferLegacyDSM)
{
rc = (STS)WinLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data);
}
else
{
rc = (STS)WinNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, 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.CONTROL, DAT.DEVICEEVENT, msg, ref data);
}
else
{
rc = (STS)OSXNewDSM.DSM_Entry(ref app2, ref ds2, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data);
}
}
return rc;
}
}
}

View File

@@ -0,0 +1,51 @@
using NTwain.Data;
using NTwain.DSM;
namespace NTwain.Triplets.ControlDATs
{
/// <summary>
/// Contains calls used with <see cref="DG.SetupMemXfer"/> and <see cref="DAT.SETUPFILEXFER"/>.
/// </summary>
public class SetupFileXfer
{
public STS Get(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_SETUPFILEXFER data)
=> DoIt(ref app, ref ds, MSG.GET, ref data);
public STS Set(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_SETUPFILEXFER data)
=> DoIt(ref app, ref ds, MSG.SET, ref data);
public STS GetDefault(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_SETUPFILEXFER data)
=> DoIt(ref app, ref ds, MSG.GETDEFAULT, ref data);
public STS Reset(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_SETUPFILEXFER data)
=> DoIt(ref app, ref ds, MSG.RESET, ref data);
static STS DoIt(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, MSG msg, ref TW_SETUPFILEXFER data)
{
var rc = STS.FAILURE;
if (TwainPlatform.IsWindows)
{
if (TwainPlatform.Is32bit && TwainPlatform.PreferLegacyDSM)
{
rc = (STS)WinLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data);
}
else
{
rc = (STS)WinNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, 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.CONTROL, DAT.DEVICEEVENT, msg, ref data);
}
else
{
rc = (STS)OSXNewDSM.DSM_Entry(ref app2, ref ds2, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data);
}
}
return rc;
}
}
}

View File

@@ -0,0 +1,41 @@
using NTwain.Data;
using NTwain.DSM;
namespace NTwain.Triplets.ControlDATs
{
/// <summary>
/// Contains calls used with <see cref="DG.SetupMemXfer"/> and <see cref="DAT.SETUPMEMXFER"/>.
/// </summary>
public class SetupMemXfer
{
public STS Get(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_SETUPMEMXFER data)
{
var rc = STS.FAILURE;
if (TwainPlatform.IsWindows)
{
if (TwainPlatform.Is32bit && TwainPlatform.PreferLegacyDSM)
{
rc = (STS)WinLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, MSG.GET, ref data);
}
else
{
rc = (STS)WinNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, MSG.GET, 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.CONTROL, DAT.DEVICEEVENT, MSG.GET, ref data);
}
else
{
rc = (STS)OSXNewDSM.DSM_Entry(ref app2, ref ds2, DG.CONTROL, DAT.DEVICEEVENT, MSG.GET, ref data);
}
}
return rc;
}
}
}

View File

@@ -1,6 +1,6 @@
using NTwain.DSM; using NTwain.Data;
using NTwain.DSM;
using System; using System;
using TWAINWorkingGroup;
namespace NTwain.Triplets.ControlDATs namespace NTwain.Triplets.ControlDATs
{ {

View File

@@ -1,6 +1,6 @@
using NTwain.DSM; using NTwain.Data;
using NTwain.DSM;
using System; using System;
using TWAINWorkingGroup;
namespace NTwain.Triplets.ControlDATs namespace NTwain.Triplets.ControlDATs
{ {

View File

@@ -1,5 +1,5 @@
using NTwain.DSM; using NTwain.Data;
using TWAINWorkingGroup; using NTwain.DSM;
namespace NTwain.Triplets.ControlDATs namespace NTwain.Triplets.ControlDATs
{ {
@@ -8,27 +8,12 @@ namespace NTwain.Triplets.ControlDATs
/// </summary> /// </summary>
public class UserInterface public class UserInterface
{ {
/// <summary>
/// Disables source to bring state down to <see cref="STATE.S4"/>.
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public STS DisableDS(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_USERINTERFACE data) public STS DisableDS(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_USERINTERFACE data)
=> DoIt(ref app, ref ds, MSG.DISABLEDS, ref data); => DoIt(ref app, ref ds, MSG.DISABLEDS, ref data);
/// <summary>
/// Enables source to bring state up to <see cref="STATE.S5"/>.
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public STS EnableDS(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_USERINTERFACE data) public STS EnableDS(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_USERINTERFACE data)
=> DoIt(ref app, ref ds, MSG.ENABLEDS, ref data); => DoIt(ref app, ref ds, MSG.ENABLEDS, ref data);
/// <summary>
/// Enables source to bring state up to <see cref="STATE.S5"/>.
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public STS EnableDSUIOnly(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_USERINTERFACE data) public STS EnableDSUIOnly(ref TW_IDENTITY_LEGACY app, ref TW_IDENTITY_LEGACY ds, ref TW_USERINTERFACE data)
=> DoIt(ref app, ref ds, MSG.ENABLEDSUIONLY, ref data); => DoIt(ref app, ref ds, MSG.ENABLEDSUIONLY, ref data);

View File

@@ -1,5 +1,5 @@
using NTwain.DSM; using NTwain.Data;
using TWAINWorkingGroup; using NTwain.DSM;
namespace NTwain.Triplets.ControlDATs namespace NTwain.Triplets.ControlDATs
{ {

View File

@@ -3,9 +3,9 @@
namespace NTwain.Triplets namespace NTwain.Triplets
{ {
/// <summary> /// <summary>
/// Contains calls used with <see cref="DG.AUDIO"/>. /// Contains triplet calls starting with <see cref="DG.AUDIO"/>.
/// </summary> /// </summary>
public class DGAudio public static class DGAudio
{ {
} }
} }

View File

@@ -3,42 +3,35 @@
namespace NTwain.Triplets namespace NTwain.Triplets
{ {
/// <summary> /// <summary>
/// Contains calls used with <see cref="DG.CONTROL"/>. /// Contains triplet calls starting with <see cref="DG.CONTROL"/>.
/// </summary> /// </summary>
public class DGControl public static class DGControl
{ {
private Parent? _parent; public static readonly Parent Parent = new();
public Parent Parent => _parent ??= new Parent();
private EntryPoint? _entryPoint; public static readonly EntryPoint EntryPoint = new();
public EntryPoint EntryPoint => _entryPoint ??= new EntryPoint();
private Identity? _identity; public static readonly Identity Identity = new();
public Identity Identity => _identity ??= new Identity();
private Status? _status; public static readonly Status Status = new();
public Status Status => _status ??= new Status();
private StatusUtf8? _statusUtf8; public static readonly StatusUtf8 StatusUtf8 = new();
public StatusUtf8 StatusUtf8 => _statusUtf8 ??= new StatusUtf8();
private CustomDsData? _customDsData; public static readonly CustomDsData CustomDsData = new();
public CustomDsData CustomDsData => _customDsData ??= new CustomDsData();
private DeviceEvent? _deviceEvent; public static readonly DeviceEvent DeviceEvent = new();
public DeviceEvent DeviceEvent => _deviceEvent ??= new DeviceEvent();
private Callback? _callback; public static readonly Callback Callback = new();
public Callback Callback => _callback ??= new Callback();
private Callback2? _callback2; public static readonly Callback2 Callback2 = new();
public Callback2 Callback2 => _callback2 ??= new Callback2();
private XferGroup? _xferGroup; public static readonly XferGroup XferGroup = new();
public XferGroup XferGroup => _xferGroup ??= new XferGroup();
private UserInterface? _userInterface; public static readonly UserInterface UserInterface = new();
public UserInterface UserInterface => _userInterface ??= new UserInterface();
public static readonly Event Event = new();
public static readonly PendingXfers PendingXfers = new();
} }
} }

View File

@@ -3,9 +3,9 @@
namespace NTwain.Triplets namespace NTwain.Triplets
{ {
/// <summary> /// <summary>
/// Contains calls used with <see cref="DG.IMAGE"/>. /// Contains triplet calls starting with <see cref="DG.IMAGE"/>.
/// </summary> /// </summary>
public class DGImage public static class DGImage
{ {
} }
} }

View File

@@ -1,9 +1,8 @@
All TWAIN operations are done through the a combination of All TWAIN operations are done through the a combination of
Data Group (DG), Data Argument Type (DAT), and Message (MSG) Data Group (DG), Data Argument Type (DAT), and Message (MSG)
triplets. Rather than letting consumers of this lib deal triplets. Rather than dealing with all the combinations
with all the combinations themselves and risk passing the directly and risk passing the wrong thing, all valid triplet
wrong thing, all valid triplet combinations are simply combinations are simply made available under this namespace.
made available under this namespace.
Example: Example:
To get the status of the DS, just use the To get the status of the DS, just use the
@@ -18,5 +17,5 @@ DGControl.Status.Get(...)
Only triplets usable by the Only triplets usable by the
application-side are defined here. application-side are defined here.
Due to the number of things involved, the properties are These are still low-level calls and TwainSession is the higher
lazy-loaded until used. level abstraction with some state keeping and other checks for ease of use.

View File

@@ -1,4 +1,6 @@
using System; using NTwain.Data;
using NTwain.Triplets;
using System;
using System.Diagnostics; using System.Diagnostics;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using TWAINWorkingGroup; using TWAINWorkingGroup;

View File

@@ -1,4 +1,5 @@
using System; using NTwain.Data;
using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using TWAINWorkingGroup; using TWAINWorkingGroup;

View File

@@ -1,7 +1,7 @@
using NTwain.Triplets; using NTwain.Data;
using NTwain.Triplets;
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using TWAINWorkingGroup;
namespace NTwain namespace NTwain
{ {
@@ -116,22 +116,6 @@ namespace NTwain
} }
/// <summary>
/// TWAIN triplet API calls with <see cref="DG.CONTROL"/>.
/// </summary>
public DGControl DGControl { get; }
/// <summary>
/// TWAIN triplet API calls with <see cref="DG.IMAGE"/>.
/// </summary>
public DGImage DGImage { get; }
/// <summary>
/// TWAIN triplet API calls with <see cref="DG.AUDIO"/>.
/// </summary>
public DGAudio DGAudio { get; }
/// <summary> /// <summary>
/// Fires when <see cref="State"/> changes. /// Fires when <see cref="State"/> changes.
/// </summary> /// </summary>

View File

@@ -1,6 +1,6 @@
using NTwain.Triplets; using NTwain.Data;
using NTwain.Triplets;
using System.Collections.Generic; using System.Collections.Generic;
using TWAINWorkingGroup;
namespace NTwain namespace NTwain
{ {
@@ -34,6 +34,10 @@ namespace NTwain
} }
} }
/// <summary>
/// Loads and opens the specified data source.
/// </summary>
/// <param name="source"></param>
public void OpenSource(TW_IDENTITY_LEGACY source) public void OpenSource(TW_IDENTITY_LEGACY source)
{ {
if (DGControl.Identity.OpenDS(ref _appIdentity, ref source) == STS.SUCCESS) if (DGControl.Identity.OpenDS(ref _appIdentity, ref source) == STS.SUCCESS)
@@ -44,6 +48,9 @@ namespace NTwain
} }
} }
/// <summary>
/// Closes the currently open data source.
/// </summary>
public void CloseSource() public void CloseSource()
{ {
if (DGControl.Identity.CloseDS(ref _appIdentity, ref _currentDS) == STS.SUCCESS) if (DGControl.Identity.CloseDS(ref _appIdentity, ref _currentDS) == STS.SUCCESS)
@@ -53,8 +60,15 @@ namespace NTwain
} }
} }
/// <summary>
/// Sets the default data source.
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
public STS SetDefaultSource(TW_IDENTITY_LEGACY source) public STS SetDefaultSource(TW_IDENTITY_LEGACY source)
{ {
// TODO: this doesn't work???
var rc = DGControl.Identity.Set(ref _appIdentity, ref source); var rc = DGControl.Identity.Set(ref _appIdentity, ref source);
if (rc == STS.SUCCESS) if (rc == STS.SUCCESS)
{ {

View File

@@ -1,4 +1,5 @@
using NTwain.Triplets; using NTwain.Data;
using NTwain.Triplets;
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Text; using System.Text;
@@ -77,10 +78,6 @@ namespace NTwain
} }
}; };
DGControl = new DGControl();
DGImage = new DGImage();
DGAudio = new DGAudio();
_legacyCallbackDelegate = LegacyCallbackHandler; _legacyCallbackDelegate = LegacyCallbackHandler;
_osxCallbackDelegate = OSXCallbackHandler; _osxCallbackDelegate = OSXCallbackHandler;
} }