Using template to generate DSM classes like I should've done.

This commit is contained in:
Eugene Wang 2023-04-02 17:44:36 -04:00
parent 3115da95d6
commit 5bd4a42015
7 changed files with 226 additions and 8 deletions

View File

@ -0,0 +1 @@


View File

@ -0,0 +1,201 @@
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension="dummy" #>
<#
List<(string, string, string)> className_dllPath_identityStruct = new() {
("OSXLegacyDSM", "/System/Library/Frameworks/framework/TWAIN", "TW_IDENTITY_MACOSX"),
("OSXNewDSM", "/Library/Frameworks/TWAINDSM.framework/TWAINDSM", "TW_IDENTITY_MACOSX"),
("WinLegacyDSM", "twain_32.dll", "TW_IDENTITY_LEGACY"),
("WinNewDSM", "twaindsm.dll", "TW_IDENTITY_LEGACY")
};
foreach(var file in className_dllPath_identityStruct) {
#>
using NTwain.Data;
using System;
using System.Runtime.InteropServices;
namespace NTwain.DSM
{
/// <summary>
/// Low-level pinvoke methods using <#= file.Item2 #>.
/// </summary>
public static class <#= file.Item1 #>
{
const string DsmName = "<#= file.Item2 #>";
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref IntPtr hwnd
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, IntPtr dest,
DG dg, DAT dat, MSG msg, IntPtr zero
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, IntPtr zero
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref IntPtr mem
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref <#= file.Item3 #> twidentity
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_STATUSUTF8 twstatusutf8
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, IntPtr dest,
DG dg, DAT dat, MSG msg, ref TW_ENTRYPOINT twentrypoint
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref TW_DEVICEEVENT twdeviceevent
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref TW_CUSTOMDSDATA twcustomedsdata
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref TW_CALLBACK twcallback
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref DG xfergroup
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref TW_USERINTERFACE userinterface
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref TW_EVENT evt
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref TW_PENDINGXFERS pendingxfers
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref TW_SETUPMEMXFER memxfer
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref TW_SETUPFILEXFER filexfer
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref TW_PASSTHRU passthru
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref TW_FILESYSTEM filesystem
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref TW_CAPABILITY cap
);
[DllImport(DsmName, CharSet = CharSet.Ansi)]
public static extern ushort DSM_Entry
(
ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest,
DG dg, DAT dat, MSG msg, ref TW_AUDIOINFO auioinfo
);
}
}
<#
SaveOutput(file.Item1 + ".cs");
}#>
<#+
private void SaveOutput(string outputFileName) {
string templateDirectory = Path.GetDirectoryName(Host.TemplateFile);
string outputFilePath = Path.Combine(templateDirectory, outputFileName);
File.WriteAllText(outputFilePath, this.GenerationEnvironment.ToString());
this.GenerationEnvironment.Clear();
}
#>

View File

@ -1,11 +1,11 @@
using NTwain.Data;
using NTwain.Data;
using System;
using System.Runtime.InteropServices;
namespace NTwain.DSM
{
/// <summary>
/// Low-level pinvoke methods for /System/Library/Frameworks/framework/TWAIN.
/// Low-level pinvoke methods using /System/Library/Frameworks/framework/TWAIN.
/// </summary>
public static class OSXLegacyDSM
{

View File

@ -1,11 +1,11 @@
using NTwain.Data;
using NTwain.Data;
using System;
using System.Runtime.InteropServices;
namespace NTwain.DSM
{
/// <summary>
/// Low-level pinvoke methods for /Library/Frameworks/TWAINDSM.framework/TWAINDSM.
/// Low-level pinvoke methods using /Library/Frameworks/TWAINDSM.framework/TWAINDSM.
/// </summary>
public static class OSXNewDSM
{

View File

@ -1,11 +1,11 @@
using NTwain.Data;
using NTwain.Data;
using System;
using System.Runtime.InteropServices;
namespace NTwain.DSM
{
/// <summary>
/// Low-level pinvoke methods for twain_32.dll.
/// Low-level pinvoke methods using twain_32.dll.
/// </summary>
public static class WinLegacyDSM
{

View File

@ -1,11 +1,11 @@
using NTwain.Data;
using NTwain.Data;
using System;
using System.Runtime.InteropServices;
namespace NTwain.DSM
{
/// <summary>
/// Low-level pinvoke methods for twaindsm.dll.
/// Low-level pinvoke methods using twaindsm.dll.
/// </summary>
public static class WinNewDSM
{

View File

@ -19,4 +19,20 @@
<ItemGroup>
<Folder Include="Triplets\ImageDATs\" />
</ItemGroup>
<ItemGroup>
<None Update="DSM\DSMGenerator.dummy">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>DSMGenerator.tt</DependentUpon>
</None>
<None Update="DSM\DSMGenerator.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>DSMGenerator.dummy</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
</ItemGroup>
</Project>