using System; using System.Runtime.InteropServices; namespace DeltaShell.Plugins.XBeach.Api { public class XBeachDll { public struct FArrayType { public int rank; public byte btype; public byte type; public IntPtr array; } [DllImport("kernel32.dll", CharSet = CharSet.Auto)] public static extern void SetDllDirectory(string lpPathName); #if MONO #else const string DllPath = "xbeachlibrary_dynamic.dll"; #endif // Import xbeach [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int init(); [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int outputext(); [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int executestep(); [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int finalize(); [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int getdoubleparameter(string name, ref double value, int len); [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int getintparameter(string name, ref int value, int len); public static int getparameter(string name, ref double value) { return getdoubleparameter(name, ref value, name.Length); } public static int getparameter(string name, ref int value) { return getintparameter(name, ref value, name.Length); } [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int getarray(string name, ref FArrayType array, int len); public static int getarray(string name, ref FArrayType array) { return getarray(name, ref array, name.Length); } [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int get1ddoublearray([In] string name, [In, Out] ref IntPtr array, int len); public static int get1ddoublearray(string name, ref double[] array) { var cptr = new IntPtr(); var result = get1ddoublearray(name, ref cptr, name.Length); Marshal.Copy(cptr, array, 0, array.Length); return result; } [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int get2ddoublearray(string name, ref IntPtr array, int len); public static int get2ddoublearray(string name, ref IntPtr array) { return get2ddoublearray(name, ref array, name.Length); } [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int get3ddoublearray(string name, ref double[, ,] array, int len); [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int get4ddoublearray(string name, ref double[, ,] array, int len); [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int get1dintarray(string name, ref int[] array, int len); [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int get2dintarray(string name, ref int[,] array, int len); [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int get3dintarray(string name, ref int[, ,] array, int len); [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int get4dintarray(string name, ref int[, , ,] array, int len); [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern int set2ddoublearray(string name, ref IntPtr array, int len); public static int set2ddoublearray(string name, ref IntPtr array) { return set2ddoublearray(name, ref array, name.Length); } //Logging [DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)] public static extern void assignlogdelegate([MarshalAs(UnmanagedType.FunctionPtr)] MyDelegate del); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void MyDelegate(ref int code, string message, ref int len); [DllImport(DllPath,CallingConvention = CallingConvention.Cdecl)] public static extern int writetolog(); } }