Skip to content

Commit

Permalink
feat: Remove preprocessor directives from NativeMethods class and loa…
Browse files Browse the repository at this point in the history
…d the correct dll according the architecture (Forms 6i for 32-bit process and Forms 12c for 64-bit process)
  • Loading branch information
felipebz committed Jan 3, 2024
1 parent f40d67d commit 5fae0df
Show file tree
Hide file tree
Showing 3 changed files with 145 additions and 53 deletions.
116 changes: 116 additions & 0 deletions Ndapi/Core/NativeMethods.6.cs
@@ -0,0 +1,116 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

using Ndapi.Core.Handles;
using Ndapi.Enums;

namespace Ndapi.Core;

internal static partial class NativeMethods
{
// Methods exclusive to Forms 6i

#region Attached library methods

[LibraryImport(forms6Lib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2falbat_Attach(ContextSafeHandle pd2fctx,
ObjectSafeHandle parent,
out ObjectSafeHandle ppd2falb,
[MarshalAs(UnmanagedType.I1)] bool db,
[MarshalAs(UnmanagedType.LPStr)] string name);

#endregion

#region Form module methods

[LibraryImport(forms6Lib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2ffmdld_Load(ContextSafeHandle pd2fctx,
out ObjectSafeHandle ppd2ffmd,
[MarshalAs(UnmanagedType.LPStr)] string formname,
[MarshalAs(UnmanagedType.I1)] bool db);

[LibraryImport(forms6Lib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2ffmdsv_Save(ContextSafeHandle pd2fctx,
ObjectSafeHandle pd2ffmd,
[MarshalAs(UnmanagedType.LPStr)] string formname,
[MarshalAs(UnmanagedType.I1)] bool db);

[LibraryImport(forms6Lib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2ffmdfv_FileVersion(ContextSafeHandle pd2fctx,
[MarshalAs(UnmanagedType.LPStr)] string formname,
[MarshalAs(UnmanagedType.I1)] bool db,
out int version);

#endregion

#region Object library methods

// Forms 6i only
[LibraryImport(forms6Lib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2folbld_Load(ContextSafeHandle pd2fctx,
out ObjectSafeHandle ppd2folb,
[MarshalAs(UnmanagedType.LPStr)] string olibname,
[MarshalAs(UnmanagedType.I1)] bool db);

[LibraryImport(forms6Lib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2folbsv_Save(ContextSafeHandle pd2fctx,
ObjectSafeHandle pd2folb,
[MarshalAs(UnmanagedType.LPStr)] string olibname,
[MarshalAs(UnmanagedType.I1)] bool db);

#endregion

#region Object library tab methods

[LibraryImport(forms6Lib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2folbfv_FileVersion(ContextSafeHandle pd2fctx,
[MarshalAs(UnmanagedType.LPStr)] string olibname,
[MarshalAs(UnmanagedType.I1)] bool db,
out int version);

#endregion

#region Menu module methods

[LibraryImport(forms6Lib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2fmmdld_Load(ContextSafeHandle pd2fctx,
out ObjectSafeHandle ppd2fmmd,
[MarshalAs(UnmanagedType.LPStr)] string formname,
[MarshalAs(UnmanagedType.I1)] bool db);

[LibraryImport(forms6Lib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2fmmdsv_Save(ContextSafeHandle pd2fctx,
ObjectSafeHandle pd2fmmd,
[MarshalAs(UnmanagedType.LPStr)] string menuname,
[MarshalAs(UnmanagedType.I1)] bool db);

[LibraryImport(forms6Lib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2fmmdfv_FileVersion(ContextSafeHandle pd2fctx,
[MarshalAs(UnmanagedType.LPStr)] string menuname,
[MarshalAs(UnmanagedType.I1)] bool db,
out int version);

#endregion

#region Library module methods

[LibraryImport(forms6Lib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2flibld_Load(ContextSafeHandle pd2fctx,
out ObjectSafeHandle ppd2flib,
[MarshalAs(UnmanagedType.LPStr)] string libname,
[MarshalAs(UnmanagedType.I1)] bool db);

#endregion

}
61 changes: 9 additions & 52 deletions Ndapi/Core/NativeMethods.cs
Expand Up @@ -10,11 +10,8 @@ namespace Ndapi.Core;

internal static partial class NativeMethods
{
#if FORMS_6
internal const string formsLib = "ifd2f60.dll";
#else
internal const string formsLib = "frmd2f.dll";
#endif
internal const string forms6Lib = "ifd2f60";
internal const string formsLib = "frmd2f";

#region Context methods

Expand Down Expand Up @@ -58,9 +55,6 @@ internal static partial class NativeMethods
public static partial D2fErrorCode d2falbat_Attach(ContextSafeHandle pd2fctx,
ObjectSafeHandle parent,
out ObjectSafeHandle ppd2falb,
#if FORMS_6
[MarshalAs(UnmanagedType.I1)] bool db,
#endif
[MarshalAs(UnmanagedType.LPStr)] string name);

[LibraryImport(formsLib)]
Expand Down Expand Up @@ -119,21 +113,13 @@ internal static partial class NativeMethods
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2ffmdld_Load(ContextSafeHandle pd2fctx,
out ObjectSafeHandle ppd2ffmd,
[MarshalAs(UnmanagedType.LPStr)] string formname
#if FORMS_6
, [MarshalAs(UnmanagedType.I1)] bool db
#endif
);
[MarshalAs(UnmanagedType.LPStr)] string formname);

[LibraryImport(formsLib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2ffmdsv_Save(ContextSafeHandle pd2fctx,
ObjectSafeHandle pd2ffmd,
[MarshalAs(UnmanagedType.LPStr)] string formname
#if FORMS_6
, [MarshalAs(UnmanagedType.I1)] bool db
#endif
);
[MarshalAs(UnmanagedType.LPStr)] string formname);

[LibraryImport(formsLib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
Expand All @@ -147,9 +133,6 @@ internal static partial class NativeMethods
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2ffmdfv_FileVersion(ContextSafeHandle pd2fctx,
[MarshalAs(UnmanagedType.LPStr)] string formname,
#if FORMS_6
[MarshalAs(UnmanagedType.I1)] bool db,
#endif
out int version);

#endregion
Expand All @@ -160,21 +143,13 @@ internal static partial class NativeMethods
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2folbld_Load(ContextSafeHandle pd2fctx,
out ObjectSafeHandle ppd2folb,
[MarshalAs(UnmanagedType.LPStr)] string olibname
#if FORMS_6
, [MarshalAs(UnmanagedType.I1)] bool db
#endif
);
[MarshalAs(UnmanagedType.LPStr)] string olibname);

[LibraryImport(formsLib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2folbsv_Save(ContextSafeHandle pd2fctx,
ObjectSafeHandle pd2folb,
[MarshalAs(UnmanagedType.LPStr)] string olibname
#if FORMS_6
, [MarshalAs(UnmanagedType.I1)] bool db
#endif
);
[MarshalAs(UnmanagedType.LPStr)] string olibname);

[LibraryImport(formsLib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
Expand Down Expand Up @@ -236,9 +211,6 @@ internal static partial class NativeMethods
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2folbfv_FileVersion(ContextSafeHandle pd2fctx,
[MarshalAs(UnmanagedType.LPStr)] string olibname,
#if FORMS_6
[MarshalAs(UnmanagedType.I1)] bool db,
#endif
out int version);

#endregion
Expand All @@ -249,21 +221,13 @@ internal static partial class NativeMethods
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2fmmdld_Load(ContextSafeHandle pd2fctx,
out ObjectSafeHandle ppd2fmmd,
[MarshalAs(UnmanagedType.LPStr)] string formname
#if FORMS_6
, [MarshalAs(UnmanagedType.I1)] bool db
#endif
);
[MarshalAs(UnmanagedType.LPStr)] string formname);

[LibraryImport(formsLib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2fmmdsv_Save(ContextSafeHandle pd2fctx,
ObjectSafeHandle pd2fmmd,
[MarshalAs(UnmanagedType.LPStr)] string menuname
#if FORMS_6
, [MarshalAs(UnmanagedType.I1)] bool db
#endif
);
[MarshalAs(UnmanagedType.LPStr)] string menuname);

[LibraryImport(formsLib)]
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
Expand All @@ -277,9 +241,6 @@ internal static partial class NativeMethods
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2fmmdfv_FileVersion(ContextSafeHandle pd2fctx,
[MarshalAs(UnmanagedType.LPStr)] string menuname,
#if FORMS_6
[MarshalAs(UnmanagedType.I1)] bool db,
#endif
out int version);

[LibraryImport(formsLib)]
Expand Down Expand Up @@ -347,11 +308,7 @@ internal static partial class NativeMethods
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
public static partial D2fErrorCode d2flibld_Load(ContextSafeHandle pd2fctx,
out ObjectSafeHandle ppd2flib,
[MarshalAs(UnmanagedType.LPStr)] string libname
#if FORMS_6
, [MarshalAs(UnmanagedType.I1)] bool db
#endif
);
[MarshalAs(UnmanagedType.LPStr)] string libname);

#endregion

Expand Down
21 changes: 20 additions & 1 deletion Ndapi/NdapiContext.cs
Expand Up @@ -23,6 +23,7 @@ public sealed class NdapiContext : IDisposable

private static readonly List<NdapiModule> _modules = [];
private static ContextSafeHandle _context;
private static string formsLib;

/// <summary>
/// If true, the module loading will not fail when a required library module is not in the
Expand All @@ -41,6 +42,24 @@ public sealed class NdapiContext : IDisposable
/// </summary>
public static bool IsConnected { get; private set; }

static NdapiContext()
{
formsLib = NativeMethods.formsLib;
if (!Environment.Is64BitProcess)
{
NativeLibrary.SetDllImportResolver(typeof(NdapiContext).Assembly, ((name, assembly, path) =>
{
if (name != NativeMethods.formsLib)
{
return IntPtr.Zero;
}
formsLib = NativeMethods.forms6Lib;
return NativeLibrary.Load(formsLib, assembly, path);
}));
}
}

internal static ContextSafeHandle GetContext()
{
if (_context != null)
Expand All @@ -63,7 +82,7 @@ internal static ContextSafeHandle GetContext()
}
catch (DllNotFoundException)
{
throw new NdapiException($"Could not found the {NativeMethods.formsLib} from Oracle Forms installation. " +
throw new NdapiException($"Could not found the {formsLib} from Oracle Forms installation. " +
"Please check if this version of Oracle Forms is installed.");
}
Ensure.Success(status);
Expand Down

0 comments on commit 5fae0df

Please sign in to comment.