Voila, je suis débutant en C#, et après avoir fait plusieurs tentatives je viens vous demander de l'aide.
J'ai une carte APPLICOM qui gére un réseau CAN. Avec cette carte, le fournisseur ma donner une DLL qui permet de dialoguer avec celle ci. Je l'ai tester avec LabWindows CVI et cela fonctionne. Quand j'essaye avec C# j'ai des codes d'erreur. A priori cela viendrait du tableau de byte passer par pointeur.
Voila le fichier H :
Dans ce fichier, j'utilie la fonction AuWriteReadMsg_io.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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#ifndef __APPLICOMIO_HEADER_FILE__ #define __APPLICOMIO_HEADER_FILE__ #include <cvidef.h> typedef unsigned short WORD; typedef unsigned char BYTE; typedef unsigned long DWORD; /* Translate a card number to a chan number */ #define CARD2CHAN(x) ((WORD)((x-1)*4)) /* Function prototype */ BOOL _stdcall AuInitBus_io (DWORD* pdwStatus); BOOL _stdcall AuExitBus_io (DWORD* pdwStatus); BOOL _stdcall AuWriteReadMsg_io (WORD wChan, WORD wNes, DWORD dwMsgParam, WORD wNbTx, BYTE* lpbyBufTx, WORD* pwNbRx, BYTE* lpbyBufRx, DWORD* pdwStatus); #endif
Voila le code en C# ( Microsoft express )
Et voici l'exemple en C qui fonctionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
Lorsque je compile cette source cela ne génére pas d'érreur,mais ca marche pas Erreur 32 (Mauvais paramêtrage)
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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
40void __declspec(dllexport) TX_TEST RunNCSCardsInNormalMode(tTestData *testData, tTestError *testError) { int error = 0; ErrMsg errMsg = {'\0'}; ERRORINFO errorInfo; BOOL Result = FALSE; BYTE BufRx = 0; WORD NbRx = 0; BYTE BufTx[5] = {0x08,0x00,0x00,0x00,0x00}; WORD NbTx = 5; DWORD MsgParam = 0x180; WORD Nes = 1; WORD Chan = 0; BufTx[3] = 0x00; AuWriteReadMsg_io (Chan, Nes, MsgParam, NbTx, BufTx,&NbRx, &BufRx, &error); Sleep(200); BufTx[3] = 0x02; AuWriteReadMsg_io (Chan, Nes, MsgParam, NbTx, BufTx,&NbRx, &BufRx, &error); Error: // If an error occurred, set the error flag to cause a run-time error in TestStand. if (error != 0) { testError->errorFlag = TRUE; // OPTIONALLY SET THE ERROR CODE AND STRING testError->errorCode = error; testData->replaceStringFuncPtr(&testError->errorMessage, errMsg); } return; }
Lorsque je modifie le prototype de la fonction en mettant des pointeurs (comme en C), il n'arrive pas à lié le pointeur avec le tableau de byte. Donc si vous avez quelques pistes à exploiter, je suis prenneur

 

 
		
		 
         
 

 
			
			
 
   


 [C#] Pourquoi un  pointeur sur un tableau de byte provoque des codes d'erreur ?
 [C#] Pourquoi un  pointeur sur un tableau de byte provoque des codes d'erreur ?
				 Répondre avec citation
  Répondre avec citation Envoyé par mickey28
 Envoyé par mickey28
					
				 
 
Partager