改动7
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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")]
|
||||
|
||||
Reference in New Issue
Block a user