2017년 2월 8일

MSCOMM32.ocx 를 이용한 시리얼 통신 방법

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 으로 수신데이타를 처리합니다.




시리우스 라이브러리 홈페이지 오픈

현재 시리우스(Sirius) 라이브러리라는 제품을 개발하고 이를 소개하는 홈페이지를 오픈 하였습니다. 관심있는 분들의 많은 방문 요청드립니다. 앞으로 업데이트 소식및 변경사항은 스파이럴랩 홈페이지를 통해 진행할 예정입니다. 스파이럴랩 홈페이지 :  h...