Russian Qt Forum

Программирование => Общий => Тема начата: tw333k от Октябрь 11, 2010, 12:46



Название: Работа с com- portom WinApi
Отправлено: tw333k от Октябрь 11, 2010, 12:46
Собственно не получается открыть порт
Код:
	// Открытие порта 
char path[]={'\\','\\','.','\\','C','O','M',numPort+'0',0};
    HANDLE  h=CreateFile(path,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING,0);

выдаёт ошибку 1>c:\к1\blabla\blabla\testing.cpp(6) : error C2664: CreateFileW: невозможно преобразовать параметр 1 из 'char [9]' в 'LPCWSTR'
1>        Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции


и вообще подскажите где можно посмотреть примеры работы с com-portom под winApi


Название: Re: Работа с com- portom WinApi
Отправлено: Barmaglodd от Октябрь 11, 2010, 14:03
Проблема не в COM-порте ;)
Либо не используй unicode при сборке, либо читай про TCHAR ;)
Это вообще супер: numPort+'0', А если номер больше 9?


Название: Re: Работа с com- portom WinApi
Отправлено: Barmaglodd от Октябрь 11, 2010, 14:03
Про TCHAR в любом случае почитай :)


Название: Re: Работа с com- portom WinApi
Отправлено: Alex_cs_gsp от Октябрь 11, 2010, 15:56
Код:
std::wstring _FormatPortName(unsigned uPortNum, bool bUNC);


int main()
{
    const std::wstring kwstrPortName(_FormatPortName(uPortNum, true));


     HANDLE hPort = CreateFile(
kwstrPortName.c_str(),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0/*FILE_FLAG_OVERLAPPED*/,
0
);

if (hPort == INVALID_HANDLE_VALUE)
throw CComPortError();


//....

return 0;
}



std::wstring _FormatPortName(unsigned uPortNum, bool bUNC)
{
const unsigned kuBuffSize = 12;
wchar_t wszPortName[kuBuffSize];
*wszPortName = L'0';

swprintf_s(wszPortName, kuBuffSize, bUNC ? L"\\\\.\\COM%u" : L"COM%u", uPortNum);

return wszPortName;
}