From b67ba5bb276a894151deabb396c210c43807c9c2 Mon Sep 17 00:00:00 2001 From: Tyrone CT Date: Thu, 14 May 2026 16:32:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=8A=A87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CapMachine.Wpf/CanDrive/ToomossCan.cs | 24 ++++++++++++------------ CapMachine.Wpf/CanDrive/usb2can.cs | 2 -- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/CapMachine.Wpf/CanDrive/ToomossCan.cs b/CapMachine.Wpf/CanDrive/ToomossCan.cs index 5345df7..103719a 100644 --- a/CapMachine.Wpf/CanDrive/ToomossCan.cs +++ b/CapMachine.Wpf/CanDrive/ToomossCan.cs @@ -420,15 +420,17 @@ namespace CapMachine.Wpf.CanDrive var groupMsg = cmdDataSnapshot.GroupBy(x => x.MsgName).ToList(); int msgCount = groupMsg.Count; + USB2CAN.CAN_MSG[] canMsgBuffer = new USB2CAN.CAN_MSG[msgCount]; + for (int i = 0; i < canMsgBuffer.Length; i++) + { + canMsgBuffer[i] = new USB2CAN.CAN_MSG(); + canMsgBuffer[i].Data = new byte[8]; + } IntPtr msgPt = IntPtr.Zero; - IntPtr sendBufferPtr = IntPtr.Zero; try { - int canMsgSize = Marshal.SizeOf(typeof(USB2CAN.CAN_MSG)); msgPt = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(USB2CAN.CAN_MSG))); - sendBufferPtr = Marshal.AllocHGlobal(canMsgSize * msgCount); - byte[] frameBytes = new byte[canMsgSize]; int index = 0; lock (_canSendLock) { @@ -450,13 +452,15 @@ namespace CapMachine.Wpf.CanDrive { return; } - var targetPtr = IntPtr.Add(sendBufferPtr, index * canMsgSize); - Marshal.Copy(msgPt, frameBytes, 0, canMsgSize); - Marshal.Copy(frameBytes, 0, targetPtr, canMsgSize); + canMsgBuffer[index] = (USB2CAN.CAN_MSG)Marshal.PtrToStructure(msgPt, typeof(USB2CAN.CAN_MSG)); + if (canMsgBuffer[index].Data == null || canMsgBuffer[index].Data.Length != 8) + { + canMsgBuffer[index].Data = new byte[8]; + } index++; } } - USB2CAN.CAN_SendMsgByPtr(DevHandle, WriteCANIndex, sendBufferPtr, (uint)msgCount); + USB2CAN.CAN_SendMsg(DevHandle, WriteCANIndex, canMsgBuffer, (uint)msgCount); } } finally @@ -465,10 +469,6 @@ namespace CapMachine.Wpf.CanDrive { Marshal.FreeHGlobal(msgPt); } - if (sendBufferPtr != IntPtr.Zero) - { - Marshal.FreeHGlobal(sendBufferPtr); - } } } diff --git a/CapMachine.Wpf/CanDrive/usb2can.cs b/CapMachine.Wpf/CanDrive/usb2can.cs index 7c84ca3..672bc5c 100644 --- a/CapMachine.Wpf/CanDrive/usb2can.cs +++ b/CapMachine.Wpf/CanDrive/usb2can.cs @@ -108,8 +108,6 @@ namespace CapMachine.Wpf.CanDrive public static extern Int32 CAN_StopGetMsg(Int32 DevHandle, Byte CANIndex); [DllImport("USB2XXX.dll")] public static extern Int32 CAN_SendMsg(Int32 DevHandle, Byte CANIndex, CAN_MSG[] pCanSendMsg, UInt32 SendMsgNum); - [DllImport("USB2XXX.dll", EntryPoint = "CAN_SendMsg")] - public static extern Int32 CAN_SendMsgByPtr(Int32 DevHandle, Byte CANIndex, IntPtr pCanSendMsg, UInt32 SendMsgNum); [DllImport("USB2XXX.dll")] public static extern Int32 CAN_GetMsg(Int32 DevHandle, Byte CANIndex, IntPtr pCanGetMsg); [DllImport("USB2XXX.dll")]