改动7
This commit is contained in:
@@ -420,15 +420,17 @@ namespace CapMachine.Wpf.CanDrive
|
|||||||
|
|
||||||
var groupMsg = cmdDataSnapshot.GroupBy(x => x.MsgName).ToList();
|
var groupMsg = cmdDataSnapshot.GroupBy(x => x.MsgName).ToList();
|
||||||
int msgCount = groupMsg.Count;
|
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 msgPt = IntPtr.Zero;
|
||||||
IntPtr sendBufferPtr = IntPtr.Zero;
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
int canMsgSize = Marshal.SizeOf(typeof(USB2CAN.CAN_MSG));
|
|
||||||
msgPt = Marshal.AllocHGlobal(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;
|
int index = 0;
|
||||||
lock (_canSendLock)
|
lock (_canSendLock)
|
||||||
{
|
{
|
||||||
@@ -450,13 +452,15 @@ namespace CapMachine.Wpf.CanDrive
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var targetPtr = IntPtr.Add(sendBufferPtr, index * canMsgSize);
|
canMsgBuffer[index] = (USB2CAN.CAN_MSG)Marshal.PtrToStructure(msgPt, typeof(USB2CAN.CAN_MSG));
|
||||||
Marshal.Copy(msgPt, frameBytes, 0, canMsgSize);
|
if (canMsgBuffer[index].Data == null || canMsgBuffer[index].Data.Length != 8)
|
||||||
Marshal.Copy(frameBytes, 0, targetPtr, canMsgSize);
|
{
|
||||||
|
canMsgBuffer[index].Data = new byte[8];
|
||||||
|
}
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
USB2CAN.CAN_SendMsgByPtr(DevHandle, WriteCANIndex, sendBufferPtr, (uint)msgCount);
|
USB2CAN.CAN_SendMsg(DevHandle, WriteCANIndex, canMsgBuffer, (uint)msgCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
@@ -465,10 +469,6 @@ namespace CapMachine.Wpf.CanDrive
|
|||||||
{
|
{
|
||||||
Marshal.FreeHGlobal(msgPt);
|
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);
|
public static extern Int32 CAN_StopGetMsg(Int32 DevHandle, Byte CANIndex);
|
||||||
[DllImport("USB2XXX.dll")]
|
[DllImport("USB2XXX.dll")]
|
||||||
public static extern Int32 CAN_SendMsg(Int32 DevHandle, Byte CANIndex, CAN_MSG[] pCanSendMsg, UInt32 SendMsgNum);
|
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")]
|
[DllImport("USB2XXX.dll")]
|
||||||
public static extern Int32 CAN_GetMsg(Int32 DevHandle, Byte CANIndex, IntPtr pCanGetMsg);
|
public static extern Int32 CAN_GetMsg(Int32 DevHandle, Byte CANIndex, IntPtr pCanGetMsg);
|
||||||
[DllImport("USB2XXX.dll")]
|
[DllImport("USB2XXX.dll")]
|
||||||
|
|||||||
Reference in New Issue
Block a user