Reputation: 4920
I am writing to open a port using this function:
HANDLE hFile = ::CreateFile(pszComName, GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0,0);
// Check if we could open the device
if (hFile == INVALID_HANDLE_VALUE)
{
DWORD hh= ::GetLastError();
error.Format(_T("test - [%d]"),hh);
AfxMessageBox(error,MB_ICONSTOP);
}
I cannot open the port and system error code I receive is 55: ERROR_DEV_NOT_EXIST 55 (0x37) from this list
what can i do to open the port? thanks
EDIT: I Enumerate Ports like this:
for (UINT i=1; i<256; i++)
{
CString sPort;
sPort.Format(_T("COM%d"), i);
HANDLE hPort = ::CreateFile(sPort, GENERIC_READ | GENERIC_WRITE, 0, 0,OPEN_EXISTING,0, 0);
if (hPort == INVALID_HANDLE_VALUE)
{
DWORD dwError = GetLastError();
}
else
{
AfxMessageBox(_T("1 open"));
CloseHandle(hPort);
}
}
I also checked these formats:
sPort1.Format(_T("URT%d"), i);
sPort3.Format(_T("\.\COM%d"), i);
sPort4.Format(_T("\\.\COM%d"), i);
and sPort5.Format(_T("\COM%d"), i);
but I couldnt find any.
Upvotes: 0
Views: 2051
Reputation: 3974
COM ports names in Windows CE/Mobile are in the format of COMX:
- the difference is the colon - (for example COM1:
).
Your code should look like this: CreateFile(L"COM1:",...)
You can also check the port name through the registry. If you have an ActiveSync connection, use a remote registry editor and go to [HKLM\Drivers\Active]
- one of the subkeys will hold the information of the port you want (assuming it is loading properly).
Upvotes: 3
Reputation: 490338
The obvious thing to check is whether you have the name correct. For a COM port, it'll normally be something like \\.\com1
, but in C or C++ you need to escape all the back-slashes, so it'll look like "\\\\.\\com1"
if you're using a string literal.
Upvotes: 3