Bonjour à Tous
Je suis en train de bidouiller pour développer une dll en C#, qui me permet de lire et écrire des trames can depuis un superviseur. Le problème que j'ai actuellement, et qu’après avoir pu me connecter à mon bus can grace à ma dll, je suis en train de coder ma fonction d’écriture "EthCanWriteCanMsg", cette fonction (que j’appelle depuis une autre dll) prend en paramètre comme vous pouvez le voir un pointeur sur la structure de type tCANMsg , qui contient les données à écrire, mon problème est que je n’arrive à écrire que le premier objet de ma structure qui est le m_dwID (dans cette exemple 0x204) , et j'ignore pourquoi les autres objets ne sont pas écrit.
Pourriez-vous m'aider svp?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 .... [ComVisible(true)] public unsafe class Class1 { [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct tCANMsg { // [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public uint m_dwID; // CAN identifier public uint m_bMsgType; // CAN message type public uint m_bLen; // CAN data length code [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public uint[] m_bData; // CAN data // } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct EthCanInstance { public uint m_dwHandle; public tEthCanHwParam m_EthCanHwParam; public tConnectionState m_ConnectionState; public tConnectionState m_LastConnectionState; public uint m_dwLastCanStatus; public bool m_fIsConnected; public uint m_dwCounter; public tCANMsg m_CANMsgSend; public tCANMsg m_CANMsgRecv; public uint m_fReceived; } public static EthCanInstance[] EthCanInst_g = new EthCanInstance[1]; unsafe void read() { uint dwReadRet; EthCanInst_g[0].m_CANMsgSend.m_bData = new uint[8]; tCANTimestamp TimeStamp; TimeStamp.m_dwMilliSec = (uint)Environment.TickCount; TimeStamp.m_wMicroSec = 0; TimeStamp.m_wMilliSec_Overflow = 0; EthCanInst_g[0].m_CANMsgSend.m_bMsgType = 0x0; EthCanInst_g[0].m_CANMsgSend.m_dwID = 0x204; EthCanInst_g[0].m_CANMsgSend.m_bLen = 0x3; EthCanInst_g[0].m_CANMsgSend.m_bData[0] = 0x57; EthCanInst_g[0].m_CANMsgSend.m_bData[1] = 0x2; EthCanInst_g[0].m_CANMsgSend.m_bData[2] = 0x0; EthCanInst_g[0].m_CANMsgSend.m_bData[3] = 0x0; EthCanInst_g[0].m_CANMsgSend.m_bData[4] = 0x0; EthCanInst_g[0].m_CANMsgSend.m_bData[5] = 0x0; EthCanInst_g[0].m_CANMsgSend.m_bData[6] = 0x0; EthCanInst_g[0].m_CANMsgSend.m_bData[7] = 0x0; //Write the CAN message into the transmit queue dwReadRet = EthCanWriteCanMsg(EthCanInst_g[0].m_dwHandle, ref EthCanInst_g[0].m_CANMsgSend, ref TimeStamp); } ... ..
Merci
Partager