cakino cakino - 25 days ago 9
C++ Question

Open a COM port in C++ with number higher that 9

I am using a COM port in C++. I can not open COM ports with a higher number than 9, for example 10. This is function used for COM port detection...

WCHAR port_name[7];
WCHAR num_port[4];

for (i=1; i<256; i++)
{
bool bSuccess = false;

wcscpy(port_name,L"COM");
wcscat(port_name,_itow(i,num_port,10));

HANDLE hPort;

//Try to open the port
hPort = CreateFile(L"COM10", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
//hPort = CreateFile(port_name, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);

if (hPort == INVALID_HANDLE_VALUE)
{
DWORD dwError = GetLastError();

//Check to see if the error was because some other application had the port open
if (dwError == ERROR_ACCESS_DENIED)
{
bSuccess = TRUE;
j=j+1;
}
}
else //The port was opened successfully
{
bSuccess = TRUE;
j=j+1;

CloseHandle(hPort); //closing the port
}

if (bSuccess)array_ports[j]=i;

}


I can not understand why for example COM10, throws FFFFFFFF back to HANDLE hPort.

hPort = CreateFile(L"COM10", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);


COM9, COM8, COM7, etc. works fine,

hPort = CreateFile(L"COM9", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);


It there a solution for this problem?

Answer

It is a bug and the resolution is to use the string

\\.\COM10

hPort = CreateFile("\\\\.\\COM10", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);

check this article.

Comments