La conversion d'une chaîne de LPCWSTR pour CreateFile() à l'adresse d'un port série

Je semble avoir un peu de TEXTE UNICODE /problème lors de l'utilisation de la fonction CreateFile de windows pour l'adressage d'un port série. Quelqu'un peut s'il vous plaît aider mon erreur?

Je suis en train d'écrire une application console Win32 dans VC++ à l'aide de VS 2008.

Je peux créer un handle à l'adresse du port série comme ceci:

#include <iostream>    
#include <windows.h>
#include <string>

int main()
{

   HANDLE hSerial;

   hSerial = CreateFile( L"\\\\.\\COM20",
                         GENERIC_READ | GENERIC_WRITE,
                         0,
                         0,
                         OPEN_EXISTING,
                         FILE_ATTRIBUTE_NORMAL,
                         0);`

   return 0;
}

Qui fonctionne très bien (la \\\\.\\ bits est nécessaire pour s'accorde de plus de COM9 et fonctionne pour les personnes jusqu'à COM9 aussi). Le problème est que mon comport ne sera pas toujours COM20, j'aimerais donc avoir à l'utilisateur de spécifier ce qu'il est.

Voici certaines choses que j'ai essayé:

#include <iostream>    
#include <windows.h>
#include <string>

int main()
{
   std::string comNum;
   std::cout << "\n\nEnter the port (ex: COM20): ";
   std::cin >> comNum;
   std::string comPrefix = "\\\\.\\";
   std::string comID = comPrefix+comNum;

   HANDLE hSerial;

   hSerial = CreateFile( comID,
                         GENERIC_READ | GENERIC_WRITE,
                         0,
                         0,
                         OPEN_EXISTING,
                         FILE_ATTRIBUTE_NORMAL,
                         0);`

   return 0;
}

Cela ne compile pas et renvoie l'erreur: error C2664: 'CreateFileW' : impossible de convertir le paramètre 1 de 'std::string' à 'LPCWSTR'

J'ai pensé que peut-être en précisant CreateFileA aurait à travailler, mais qui a donné fondamentalement la même erreur.

J'ai aussi essayé :

/*
everything else the same
*/   

hSerial = CreateFile( TEXT(comID),
                      GENERIC_READ | GENERIC_WRITE,
                      0,
                      0,
                      OPEN_EXISTING,
                      FILE_ATTRIBUTE_NORMAL,
                      0);`

qui de plus ne se compile pas et retourne: error C2065: 'LcomID' : identificateur non déclaré

Je ne suis pas vraiment un expert, mais j'ai travaillé sur cette question depuis un certain temps maintenant. Quelqu'un peut me dire comment remplacer L"\\\\.\\COM20" de telle manière que l'utilisateur peut spécifier le port et que CreateFile fonctionnera toujours? Merci!

OriginalL'auteur John | 2010-09-24