Кажется, у меня возникла небольшая проблема TEXT / UNICODE при использовании функции Windows CreateFile для адресации последовательного порта.Может кто-нибудь, пожалуйста, помогите указать на мою ошибку?
Я пишу консольное приложение Win32 на VC ++, используя VS 2008.
Я могу создать дескриптор для адресации последовательного порта, например:
#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;
}
Это работает просто отлично (бит \\\\.\\
требуется для компиляторов, превышающих COM9, и работает также для тех, кто до COM9).Проблема в том, что мой компорт не всегда будет COM20, поэтому я бы хотел, чтобы пользователь указал, что это такое.
Вот некоторые вещи, которые я пробовал:
#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;
}
Это не компилируется и возвращает ошибку: ошибка C2664: «CreateFileW»: невозможно преобразовать параметр 1 из «std :: string» в «LPCWSTR»
Я подумал, что, возможно, определение CreateFileA будет работатьзатем, но это дало в основном ту же ошибку.
Я также пытался:
/*
everything else the same
*/
hSerial = CreateFile( TEXT(comID),
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);`
, который также не компилируется и возвращает: ошибка C2065: 'LcomID': необъявленный идентификатор
Я не очень опытный специалист, но я уже давно работаю над этим.Может кто-нибудь сказать мне, как заменить L"\\\\.\\COM20"
таким образом, чтобы пользователь мог указать comport и чтобы CreateFile все еще работал?Спасибо!