1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Threading.Tasks;
- namespace MesAdaptor
- {
- public static class SajetConnectAdapter
- {
- [DllImport("SajetConnect.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
- public static extern bool SajetTransStart();
- [DllImport("SajetConnect.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
- public static extern bool SajetTransClose();
- //[DllImport("SajetConnect.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
- //public static extern bool SajetTransData(int command, IntPtr data, IntPtr length);
- [DllImport("SajetConnect.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
- public static extern bool SajetTransData(int command, IntPtr data, IntPtr length);
- [DllImport("SajetConnect.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
- public static extern bool SajetTransData_C(int command, out string data);
- public static bool SajetTransData(int command, ref string data)
- {
- var idByte = Encoding.ASCII.GetBytes(data);
- var length = idByte.Length;
- var dataArrayLength = Math.Max(length, 200);
- var dataArray = new byte[dataArrayLength];
- Array.Copy(idByte, 0, dataArray, 0, length);
- IntPtr dataIntPtr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(dataArrayLength);
- System.Runtime.InteropServices.Marshal.Copy(dataArray, 0, dataIntPtr, dataArray.Length);
- IntPtr lengthIntPtr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(10);
- System.Runtime.InteropServices.Marshal.WriteInt32(lengthIntPtr, length);
- var sendResult = SajetConnectAdapter.SajetTransData(command, dataIntPtr, lengthIntPtr);
- var resultString1 = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(dataIntPtr);
- System.Runtime.InteropServices.Marshal.Copy(dataIntPtr, dataArray, 0, dataArrayLength);
- //System.Runtime.InteropServices.Marshal.Release(dataIntPtr);
- System.Runtime.InteropServices.Marshal.FreeCoTaskMem(dataIntPtr);
- var readLength = System.Runtime.InteropServices.Marshal.ReadInt32(lengthIntPtr);
- //System.Runtime.InteropServices.Marshal.Release(lengthIntPtr);
- var resultString = Encoding.ASCII.GetString(dataArray);
- data = resultString1.Substring(0, Math.Min(readLength, resultString1.Length));
- return sendResult;
- }
- }
- }
|