C++ 기반의 프로그램 개발중 시리얼통신(RS-232 등) 이 필요한 경우 다양한 컴포넌트를 사용하기도 하지만, 이번에는 MS 에서 오래전에 개발하여 제공하는 OCX(COM 컴포넌트) 를 사용하는 방법에 대해 알아보겠습니다.
1. 우선 MSCOMM32.ocx 를 인터넷 검색등을 통해 구해야 합니다.
다음과 같이 OCX를 레지스트리에 등록합니다.
c:\ ... > copy mscomm32.ocx c:\windows\system32\mscomm32.ocx
c:\ ... > regsvr32 /s c:\windows\system32\mscomm32.ocx
해당 ocx 를 사용하려면 활성화( MS 사의 프로그램 개발툴이 미설치되어 있으면 사용이 불가하다고 합니다?)를 시켜주어야 하는데, 인터넷을 검색하여 보니 특정한 레지스트리 키를 만들어 생성시키면 가능하다고 합니다.
REGEDIT4
[HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]
@ = "kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"
위 내용을 a.reg 라는 파일로 만들고
c:\...> regedit /s a.reg
콘솔 명령을 통해 활성화가 가능합니다.
2. ocx 에서 type library 를 추출한다.
C++ 빌더 개발환경에서 typelib 등을 추출합니다. (implib.exe 유틸을 사용해도 가능)
그렇게 하면, MSCommLib_OCX.cpp / MSCommLib_TLB.cpp 등의 파일이 추출됩니다.
3. 마지막으로는 통신이 필요한 곳에서 다음과 같이 COM 오브젝트를 생성하여 사용합니다.
TMSComm* pSerial = NULL;
pSerial = new TMSComm(this);
pSerial->CommPort = 1;
pSerial->Settings = "9600,N,8,1";
pSerial->OnComm = this->OnCommEvent;
pSerial->PortOpen = true;
pSerial->Output = "YourSendMessage\r";
위에서 OnCommEvent 이벤트 핸들러는 데이타 수신시 Notify 되는 콜백함수이므로 미리 구현해 놓고 pSerial->Input 으로 수신데이타를 처리합니다.