Comment utiliser l'API Win32 pour parler à un port com (RS232)
Je suis en train d'utiliser l'API win32 pour parler à un port com
J'ai trouvé ce
http://www.robbayer.com/files/serial-win.pdf
hSerial = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
- Je utiliser VS2008 et il se plaint
error C2664: 'CreateFileW' : impossible de convertir le paramètre 1 de 'const char [5]" à "LPCWSTR'
OK, je suppose qu'il n'aime pas "COM1" pour être de type char* type,
J'ai essayé de moulage LPCWSTR("COM1"), puis il se compile sans problème.
Toutefois, elle renvoie "ERREUR d'ouverture du port série -1", de sorte qu'il ne trouve pas le port com avec succès. Je suppose directe casting n'est pas de la bonne façon?
S'il vous plaît dites-moi ce que je dois faire pour faire ce travail.
msdn n'est pas très utile
http://msdn.microsoft.com/en-us/library/ms810467.aspx
Je ne sais pas ce que le "gszPort" signifie qu'il n'y
OriginalL'auteur Alfred Zhong | 2011-03-17
Vous devez vous connecter pour publier un commentaire.
Essayer
_T("COM1")
au lieu deLPCWSTR("COM1")
. Il est appelé Générique-Texte De Cartographie. Je ne sais pas vraiment si c'est bien le problème, mais l'utilisation de_T
est le droit chemin.Aussi, lorsque les appels d'API de Windows retour une condition d'erreur (comme -1), vous pouvez utiliser le Dernier Code d'Erreur (en utilisant
GetLastError
etFormatMessage
) pour obtenir une description plus détaillée de l'erreur.+1 Michael. Alfred, il vous manque un trait de soulignement dans ce symbole. _T("COM1") en Vertu de l'UNICODE construit, _T("") cartes à L"", qui est ce TEXTE("") des cartes, c'est pourquoi ce qui fonctionne pour vous, et en vertu de la CMB/ANSI construit, _T("") des cartes". " c'est pourquoi votre original ne fonctionne pas pour vous, parce que les fonctions de windows sont mappés à Un/W versions qui acceptent les chaînes Ansi ou Unicode selon que la cible build est UNICODE ou pas.
Bonjour Michael, j'ai essayé les deux _T et __ _ _ T, pas de chance, je suppose que c'est de l'unicode problème, vais essayer plus tard. Merci beaucoup!
OriginalL'auteur Michael
Pour une version Unicode,
CreateFile
cartes àCreateFileW
qui s'attend à "l'échelle" des chaînes de caractères. Vous pouvez résoudre le problème immédiat par la préfixation de votre chaîne de caractères constante avec L, comme ceci:Certaines personnes suggèrent explicitement à l'aide de la version large:
Ou vous pouvez utiliser explicitement la "ANSI" version, même dans une version Unicode:
Si vous voulez être en mesure de construire Unicode et ANSI construit, vous pouvez utiliser une macro qui éventuellement inclut les L préfixe. Il existe deux versions de cette macro:
TEXT(x)
et_T(x)
. Si je me souviens bien, l'ancien vient de l'API de Windows via<tchar.h>
et la deuxième vient de l'implémentation de Microsoft C runtime library. Puisque c'est une API de Windows, j'utilise leTEXT
version.De nos jours, ce n'est probablement pas la peine de garder la compatibilité descendante pour la norme ANSI. Toutes les versions de Windows publiées dans la dernière décennie, l'utilisation de l'Unicode en interne, donc si vous essayez d'utiliser les versions ANSI, les cordes vont être élargi au moment de l'exécution. Donc je ne vous inquiétez pas sur les macros et juste préfixe littéraux de chaîne avec
L
sauf dans des circonstances très spéciales.OriginalL'auteur Adrian McCarthy