From 48af6895cdca0ff2ee43fd633dff4a2d711750a8 Mon Sep 17 00:00:00 2001 From: Eugene Wang Date: Thu, 15 Nov 2018 20:44:04 -0500 Subject: [PATCH] Made entrypoint call work with platform checks. --- src/NTwain/Triplets/Control/Callback2.cs | 2 +- src/NTwain/Triplets/Control/DeviceEvent.cs | 2 +- src/NTwain/Triplets/Control/EntryPoint.cs | 2 +- src/NTwain/Triplets/Control/Identity.cs | 12 ++++++------ src/NTwain/Triplets/Control/Parent.cs | 17 +++++++++-------- src/NTwain/Triplets/Control/Status.cs | 16 ++++++++++++---- src/NTwain/TwainConfig.cs | 12 +++++++++++- src/NTwain/TwainConfigBuilder.cs | 2 +- 8 files changed, 42 insertions(+), 23 deletions(-) diff --git a/src/NTwain/Triplets/Control/Callback2.cs b/src/NTwain/Triplets/Control/Callback2.cs index 952d839..5d8fc08 100644 --- a/src/NTwain/Triplets/Control/Callback2.cs +++ b/src/NTwain/Triplets/Control/Callback2.cs @@ -12,7 +12,7 @@ namespace NTwain.Triplets.Control if (Use32BitData) { return NativeMethods.Dsm32(Session.Config.App32, Session.CurrentSource.Identity, - DataGroups.Control, DataArgumentType.Callback2, Message.RegisterCallback, ref callback); + DataGroups.Control, DataArgumentType.Callback2, Message.RegisterCallback, ref callback); } return ReturnCode.Failure; } diff --git a/src/NTwain/Triplets/Control/DeviceEvent.cs b/src/NTwain/Triplets/Control/DeviceEvent.cs index d462767..89372cd 100644 --- a/src/NTwain/Triplets/Control/DeviceEvent.cs +++ b/src/NTwain/Triplets/Control/DeviceEvent.cs @@ -12,7 +12,7 @@ namespace NTwain.Triplets.Control if (Use32BitData) { return NativeMethods.Dsm32(Session.Config.App32, Session.CurrentSource.Identity, - DataGroups.Control, DataArgumentType.DeviceEvent, Message.Get, ref sourceDeviceEvent); + DataGroups.Control, DataArgumentType.DeviceEvent, Message.Get, ref sourceDeviceEvent); } return ReturnCode.Failure; } diff --git a/src/NTwain/Triplets/Control/EntryPoint.cs b/src/NTwain/Triplets/Control/EntryPoint.cs index 5e46a0e..c83245b 100644 --- a/src/NTwain/Triplets/Control/EntryPoint.cs +++ b/src/NTwain/Triplets/Control/EntryPoint.cs @@ -16,7 +16,7 @@ namespace NTwain.Triplets.Control if (Use32BitData) { return NativeMethods.Dsm32(Session.Config.App32, null, - DataGroups.Control, DataArgumentType.EntryPoint, Message.Get, entryPoint); + DataGroups.Control, DataArgumentType.EntryPoint, Message.Get, entryPoint); } return ReturnCode.Failure; } diff --git a/src/NTwain/Triplets/Control/Identity.cs b/src/NTwain/Triplets/Control/Identity.cs index 05455b9..6cf1fb1 100644 --- a/src/NTwain/Triplets/Control/Identity.cs +++ b/src/NTwain/Triplets/Control/Identity.cs @@ -15,7 +15,7 @@ namespace NTwain.Triplets.Control if (Use32BitData) { rc = NativeMethods.Dsm32(Session.Config.App32, IntPtr.Zero, - DataGroups.Control, DataArgumentType.Identity, Message.CloseDS, source); + DataGroups.Control, DataArgumentType.Identity, Message.CloseDS, source); } if (rc == ReturnCode.Success) @@ -32,7 +32,7 @@ namespace NTwain.Triplets.Control if (Use32BitData) { return NativeMethods.Dsm32(Session.Config.App32, IntPtr.Zero, - DataGroups.Control, DataArgumentType.Identity, Message.GetDefault, source); + DataGroups.Control, DataArgumentType.Identity, Message.GetDefault, source); } return ReturnCode.Failure; } @@ -44,7 +44,7 @@ namespace NTwain.Triplets.Control if (Use32BitData) { return NativeMethods.Dsm32(Session.Config.App32, IntPtr.Zero, - DataGroups.Control, DataArgumentType.Identity, Message.GetFirst, source); + DataGroups.Control, DataArgumentType.Identity, Message.GetFirst, source); } return ReturnCode.Failure; } @@ -64,7 +64,7 @@ namespace NTwain.Triplets.Control if (Use32BitData) { rc = NativeMethods.Dsm32(Session.Config.App32, IntPtr.Zero, - DataGroups.Control, DataArgumentType.Identity, Message.OpenDS, source); + DataGroups.Control, DataArgumentType.Identity, Message.OpenDS, source); } if (rc == ReturnCode.Success) @@ -81,7 +81,7 @@ namespace NTwain.Triplets.Control if (Use32BitData) { return NativeMethods.Dsm32(Session.Config.App32, IntPtr.Zero, - DataGroups.Control, DataArgumentType.Identity, Message.Set, source?.Identity); + DataGroups.Control, DataArgumentType.Identity, Message.Set, source?.Identity); } return ReturnCode.Failure; } @@ -92,7 +92,7 @@ namespace NTwain.Triplets.Control if (Use32BitData) { return NativeMethods.Dsm32(Session.Config.App32, IntPtr.Zero, - DataGroups.Control, DataArgumentType.Identity, Message.UserSelect, source); + DataGroups.Control, DataArgumentType.Identity, Message.UserSelect, source); } return ReturnCode.Failure; } diff --git a/src/NTwain/Triplets/Control/Parent.cs b/src/NTwain/Triplets/Control/Parent.cs index a58f1ca..51bcf93 100644 --- a/src/NTwain/Triplets/Control/Parent.cs +++ b/src/NTwain/Triplets/Control/Parent.cs @@ -14,28 +14,28 @@ namespace NTwain.Triplets.Control { var rc = ReturnCode.Failure; + bool isDsm2 = false; + if (Use32BitData) { rc = NativeMethods.Dsm32(Session.Config.App32, null, - DataGroups.Control, DataArgumentType.Parent, Message.OpenDSM, ref hWnd); + DataGroups.Control, DataArgumentType.Parent, Message.OpenDSM, ref hWnd); + + isDsm2 = rc == ReturnCode.Success && + (Session.Config.App32.DataFunctionalities & DataFunctionalities.Dsm2) == DataFunctionalities.Dsm2; } if (rc == ReturnCode.Success) { Session.State = TwainState.DsmOpened; - // if twain2 then get memory management functions - if ((Session.Config.App32.DataFunctionalities & DataFunctionalities.Dsm2) == DataFunctionalities.Dsm2) + if (isDsm2) { rc = Session.DGControl.EntryPoint.Get(out TW_ENTRYPOINT entry); if (rc == ReturnCode.Success) { Session.Config.MemoryManager = entry; } - else - { - rc = CloseDSM(hWnd); - } } } return rc; @@ -48,11 +48,12 @@ namespace NTwain.Triplets.Control if (Use32BitData) { rc = NativeMethods.Dsm32(Session.Config.App32, null, DataGroups.Control, - DataArgumentType.Parent, Message.CloseDSM, ref hWnd); + DataArgumentType.Parent, Message.CloseDSM, ref hWnd); } if (rc == ReturnCode.Success) { + Session.Config.MemoryManager = null; Session.State = TwainState.DsmLoaded; } return rc; diff --git a/src/NTwain/Triplets/Control/Status.cs b/src/NTwain/Triplets/Control/Status.cs index 49b007e..f8aec18 100644 --- a/src/NTwain/Triplets/Control/Status.cs +++ b/src/NTwain/Triplets/Control/Status.cs @@ -9,14 +9,22 @@ namespace NTwain.Triplets.Control public ReturnCode GetManagerStatus(ref TW_STATUS status) { - return NativeMethods.Dsm32(Session.Config.App32, null, - DataGroups.Control, DataArgumentType.Status, Message.Get, ref status); + if (Use32BitData) + { + return NativeMethods.Dsm32(Session.Config.App32, null, + DataGroups.Control, DataArgumentType.Status, Message.Get, ref status); + } + return ReturnCode.Failure; } public ReturnCode GetSourceStatus(ref TW_STATUS status) { - return NativeMethods.Dsm32(Session.Config.App32, Session.CurrentSource.Identity, - DataGroups.Control, DataArgumentType.Status, Message.Get, ref status); + if (Use32BitData) + { + return NativeMethods.Dsm32(Session.Config.App32, Session.CurrentSource.Identity, + DataGroups.Control, DataArgumentType.Status, Message.Get, ref status); + } + return ReturnCode.Failure; } } } \ No newline at end of file diff --git a/src/NTwain/TwainConfig.cs b/src/NTwain/TwainConfig.cs index 7a2c175..5ca21b6 100644 --- a/src/NTwain/TwainConfig.cs +++ b/src/NTwain/TwainConfig.cs @@ -35,9 +35,19 @@ namespace NTwain //internal TW_IDENTITY Src32 { get; set; } + IMemoryManager _memMgr; /// /// Gets memory manager associated with a . /// - public IMemoryManager MemoryManager { get; internal set; } + public IMemoryManager MemoryManager + { + get + { + return _memMgr ?? DefaultMemoryManager; + } + internal set { _memMgr = value; } + } + + internal IMemoryManager DefaultMemoryManager { get; set; } } } diff --git a/src/NTwain/TwainConfigBuilder.cs b/src/NTwain/TwainConfigBuilder.cs index 3329227..ce000af 100644 --- a/src/NTwain/TwainConfigBuilder.cs +++ b/src/NTwain/TwainConfigBuilder.cs @@ -115,7 +115,7 @@ namespace NTwain switch (_platform) { case PlatformID.Win32NT: - config.MemoryManager = new WinMemoryManager(); // initial default + config.DefaultMemoryManager = new WinMemoryManager(); // initial default config.App32 = new TW_IDENTITY { DataFunctionalities = DataFunctionalities.App2,