Bonjour,
Je développe actuellement une application mobile en C# pour faire de la radio-relève.
J'ai donc besoin de faire des appels à une dll native du terminal pour communiquer avec le composant radio.
Je possède un exemple de communication en C++.
Voici mes différents import ainsi que leurs appel en C++
Aujourd'hui mon problème est bizarre. Les appels au deux premières fonctions ont l'air de bien fonctionner (pas de trace de problème :-) )
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 //C# [DllImport("nvapi.dll")] private static extern ushort nVAPI_Initialize(); //C++ unsigned short nVAPI_Initialize( void ) //C# [DllImport("nvapi.dll")] private static extern ushort nVAPI_Terminate(); //C++ unsigned short nVAPI_Terminate( void ) //C# [DllImport("nvapi.dll")] private static extern ushort nVAPI_ExecuteTask( ushort[] TskPktPtr, ushort TskLen, ushort MaxRspLen, ushort[] RspPktPtr, ref ushort RspLen //Ici j'utilise une ref car dans l'exmple en C++ l'appel se faisait par &laVariable et pas les autres. ); //C++ unsigned short nVAPI_ExecuteTask( WORD *TskPktPtr, // Task packet pointer. WORD TskLen, // Task packet length in words. WORD MaxRspLen, // Maximum response packet length in words. // Returns: WORD *RspPktPtr, // Response packet pointer. WORD *RspLen // Response packet length in words. ) ;
Par contre, lors de l'utilisation de la dernières les choses ce complique. Dans une classe ComRadio (celle où sont fait les DllImport), j'ai deux méthodes distinctes :
- LectureTete
- ProgrammationTete
Chacune d'elle appelle nVAPI_ExecuteTask mais avec une Task différente. Si je fais init -> LectureTete OU ProgrammationTete -> terminate ça marche. Par contre si je fais init -> LectureTete -> ProgrammationTete -> terminate OU init -> LectureTete -> LectureTete-> terminate ça marche plus, j'ai une erreur (code retour de la fonction).
Dans l'exmple qui m'est fourni, j'arrive a faire cet enchainement sans aucun souci (je peut programmer ou lire a volonté).
J'ai comparer les tasks passées (entre l'exemple et mon application), elle sont égales.
Par contre, fait qui rend le tous encore plus bizarre, c'est que si je met le code des deux méthodes (copier-coller) dans une seule (donc enchainement des deux appels), ça marche........
Si quelqu'un peu m'aider, je reste à 800% opérationnel pour toutes réponses et je peut fournir AUTANT de renseignements complémentaires qu'il faut![]()
Partager