using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace UtopiaAttService { public class MachineConnectivity { public const string HwDevCommDLL = @"HwDevComm.dll"; public const string HDCP_UtilsDLL = @"HDCP_Utils.dll"; [DllImport(HwDevCommDLL, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern int HwDev_Execute(string pDevInfoBuf, int nDevInfoLen, IntPtr pSendBuf, int nSendLen, ref IntPtr pRecvBuf, ref uint pRecvLen, CallBack pFuncTotalDone); [DllImport(HwDevCommDLL, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern int HwDev_Finish(ref IntPtr pRecvBuf); [DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern bool GlobalUnlock(IntPtr hMem); [DllImport("kernel32.dll")] public static extern IntPtr GlobalAlloc(int uFlags, int dwBytes); [DllImport("kernel32.dll")] public static extern IntPtr GlobalFree(IntPtr hMem); [DllImport("kernel32.dll")] public static extern IntPtr GlobalLock(IntPtr hMem); public int ExecuteCommad(string pDevInfoBuf, int nDevInfoLen, string pSendBuf, int nSendLen, ref string pRecvBuf, ref uint pRecvLen, CallBack pFuncTotalDone) { byte[] bytes; int num = 0; IntPtr zero = IntPtr.Zero; IntPtr ptr2 = IntPtr.Zero; try { bytes = Encoding.Default.GetBytes(pSendBuf); int length = bytes.Length; zero = GlobalAlloc(0, length); if (!(zero == IntPtr.Zero)) { zero = GlobalLock(zero); if (!(zero == IntPtr.Zero)) { Marshal.Copy(bytes, 0, zero, length); num = HwDev_Execute(pDevInfoBuf, pDevInfoBuf.Length, zero, length, ref ptr2, ref pRecvLen, pFuncTotalDone); pRecvBuf = Marshal.PtrToStringAnsi(ptr2); HwDev_Finish(ref ptr2); } else { return -1; } } else { return -1; } } catch (Exception exception1) { num = -1; Console.Write(exception1.ToString()); throw new OperationCanceledException(exception1.Message); } finally { GlobalUnlock(zero); GlobalFree(zero); bytes = null; } return num; } public int BeCalled(uint nTotal, uint nDone) => 0; } public delegate int CallBack(uint nTotal, uint nDone); }