그런데, 한달도 전에, 미국 사무실의 Alex라는 사람이, 이걸 쓰는데 안된다는 것.
문제를 살펴보니, 이 프로그램은 첨부터 너무 단순하게 만들어져 있어서, 오직 COM1 포트만을 들여다보고, 열리지 않으면 그냥 에러처리하고 튀어 나가게 되어 있었다. alex는 그런데, 노트북(랩탑)을 쓰고 있었고, 거기에는 시리얼 포트가 없으니, USB 포트를 시리얼로 바꾸는 드라이브를 깔아서 시리얼 포트를 잡아 쓰고 있었다.
Device Manager로 확인을 부탁한 결과 COM1이 아닌, COM16을 붙잡고 있었다. 이럴경우, 프로그램을 고치기 귀찮은 나머지, 그냥 COM16을 COM1으로 변경해주고, 프로그램을 돌리면 아무 문제가 없을듯... (이거 변경은, My Computer->Property->Device Manager로 들어가서 하면 됩니다)
하지만, 그래도 그런거 뭐 간단히 고쳐서 보내자 해서, COM16을 읽도록 함 바꿔보았다.
이거 하고나서, 포트 넘버를 받아들이는 간단한 인풋을 만들어 넣어야지.. 하고 생각했는데..
고쳐서 던져줬더니, 그래도 계속 에러가 나는 상황...
그게 왜그런가.. 계속 뒤져보니,,, 이런 이런.
msdn 사이트에 답이 있었다..
http://msdn.microsoft.com/en-us/library/aa363858%28v=VS.85%29.aspx
HANDLE WINAPI CreateFile( _In_ LPCTSTR lpFileName, _In_ DWORD dwDesiredAccess, _In_ DWORD dwShareMode, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _In_ DWORD dwCreationDisposition, _In_ DWORD dwFlagsAndAttributes, _In_opt_ HANDLE hTemplateFile );
주욱 내려가서, Communication resource 쪽에 이런 문구가.. 흑.
To specify a COM port number greater than 9, use the following syntax: "\\.\COM10". This syntax works for all port numbers and hardware that allows COM port numbers to be specified.
음.. 9를 넘어가는, 그러니까 10부터는, 앞에다가 \\.\ 를 append해줘야 한단다.
실제로, 이건 C나 C++ 코드상에서 이렇게 붙여야 함. \\\\.\\COM16
그래서, 첨에 고쳤을떄, 단순히,
CreateFile(TEXT("COM1")....)
==> CreateFile(TEXT("COM16").... ) 했더니 COM16을 열지 못했던것.
이건 이렇게 고쳐야 함.
==> CreateFile(TEXT("\\\\.\\COM16"),.....)
아이고,,, 이것도 모르고,... 머리만 쥐어뜯었네.