el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 2015
-
20 juin 2005 à 16:37
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 2012
-
21 juin 2005 à 11:08
Bonjour,
je voudrais écrire sur un port série que j'ai ouvert (la lecture marche
bien). Le problème c'est que, vu que je débute en C#, et que je n'ai
trouvé aucun exemple en C# de la fonction WriteFile, je suis sec !
Par contre j'ai trouvé partout la définition de cette fonction, mais je ne sais pas trop comment la mettre en oeuvre.
Voilà la définition de la fonction que l'on trouve facilement sur le net :
BOOL WriteFile(
HANDLE hFile, //Instance de votre accès au port série
LPCVOID lpBuffer, //Pointeur sur la donnée à écrire
DWORD nNumberOfBytesToWrite, //Nombre de bytes à écrire
LPDWORD lpNumberOfBytesWritten, //pointeur to number of bytes written
LPOVERLAPPED lpOverlapped //Doit être NULL pour windows CE
);
ainsi que l'exemple associé :
DWORD dwNumBytesWritten;
BYTE Byte = 'a';
if (!WriteFile (hPort, // Instance d'accès de votre port série
&Byte, //Pointeur sur la donnée à envoyer
1, //Nombre de byte à envoyer
&dwNumBytesWritten, //Pointer sur la variable contenant le nombre
//byte écrit dans le buffer
NULL)) //Doit être NULL pour Windows CE
{
//code d'erreur
}
Mais je ne comprends pas trop ce que DWORD signifie. Je ne sais
pas non plus comment je peux envoyer mon tableau de byte[] car j'ai des
erreurs avec le & et les pointeurs.
Bref si qqln pouvait me remettre les pendules à l'heure, ca ne me ferait pas de mal.
Est-ce que qqln a un exemple de communication sur port série en C#?
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 20 juin 2005 à 18:28
Salut, ta fonction est en C, faut utiliser PInvoke pour faire un appel de plate-forme.. c'est un vaste sujet.. surtout que ta fonction est pas la plus simple.. faut convertir tout les types natifs en types manages, exemple : DWORD en INT32.. Si personne ne te donne de liens interessant je te ferai la conversion en C# plus tard, a+
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 20 juin 2005 à 23:52
Voila un lien interessant.. Ce n'est plus nécessaire que je te donne le prototype de WriteFile il est dans l'exemple..
Pas la peine de réécrire la structure OVERLAPPED comme dans l'exemple, utilises System.Threading.NativeOverlapped ou IntPtr.Zero si tu ne l'utilise pas.
Vous n’avez pas trouvé la réponse que vous recherchez ?
J'ai juste à reprendre ça, mais qu'est-ce que tu voulais dire par "utilises System.Threading.NativeOverlapped ou IntPtr.Zero si tu ne l'utilise pas." ?
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 21 juin 2005 à 11:08
Ca ne change pas grand chose, mais cette structure existe deja dans le framework, à System.Threading.NativeOverlapped, par contre tu ne vas peut etre pas en avoir besoin dans les parametres de ta fonction à ce moment là pour passer un parametre NULL comme dans le premier code que tu as donne plus haut , il faut utiliser IntPtr.Zero à la place de NULL, bon courage..