C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[845] CPort 컴포넌트를 설치 없이 그냥 사용하기.
김태선 [cppbuilder] 9653 읽음    2009-01-20 18:59
CPort는 RS232 시리얼 제어에 있어, 빌더에서는 무척 애용되는 컴포넌트입니다.
저는 예전에 주로 2.5 버전을 썼는데 아주 만족할 만한 성능이더군요.

지금은 4.x beta가 나왔는데, CPort 3.10을 가지고 설치 없이 사용하는 법을 알아 보겠습니다.
왜 설치 없이 사용하는게 중요하냐면, 컴포넌트로 설치하지 않고
프로젝트에 컴포넌트를 추가해서 사용하는 방식은,
빌더 각 버전에서 공통적으로 애용할 수 있고(물론 안되는 경우도 있습니다),
소스를 다른 컴으로 옮겼을때 귀잖은 설치 과정이 필요 없기 때문에 편리합니다.

특히 TurboC++ 2006 Explorer 버전에서는 컴포넌트 설치가 막혀 있으니
이 버전에서 쓸때 유용한 기법이 되겠습니다.
실험은 빌더 6에서 행해졌으며, 다른 버전에서는 해보지 않았으니 다른 버전에서는 각자 알아서... ㅡㅡ;

다행히 CPort 는 구조가 매우 간단해서 설치 없이 사용하는 방법도 매우 간단합니다.

CPort3.10 을 적당한 폴더에 풀고,
프로젝트에 CPort.pas 를 추가합니다.
그리고 컴파일 하면 CPort 관련 파일들이 모두 컴파일 됩니다.

그러면 CPort.hpp 파일등이 생성되는데, C++에서 필요한 것은 CPort.hpp 정도만 참조해도
무난히 시리얼 통신 프로그램을 만들 수 있습니다.

그래서 가령 통신 기능을 쓰는 메인 폼 같은데서
#include "CPort.hpp"
해서 사용하면 됩니다.

CPort에서 컴파일된 각 모듈들은 CPort.pas 가 참조하므로 자동으로 컴파일되고 자동으로 링크되므로
다른 어떤 조치도 필요 없습니다. 컴포넌트가 있는 폴더를 프로젝트 옵션의 디렉토리 탭에서 include나 lib 항목에
조차도 추가할 필요가 없습니다.

사실상 여기서 설명끝이어야 하는데,
두가지 더 작업해줘야 할 것이 있습니다.

CPort 컴파일이 빌더에서 제대로 실험이 안되어,
실지로 TComPort 컴포넌트를 사용하게 되면
CPort.hpp 가 컴파일이 안되고 에러 메시지를 토해 내게 되는데,

    ///* Exception.CreateRes */ inline __fastcall EComPort(int Ident)/* overload */ : Sysutils::Exception(Ident) { }
    ///* Exception.CreateResHelp */ inline __fastcall EComPort(int Ident, int AHelpContext)/* overload */ : Sysutils::Exception(Ident, AHelpContext) { }

에러 메시지를 토해 내는 부분은 생성자가 겹쳐서 나타나 생기는 문제이니
중복되었다고 나오는 라인을 위와 같이 간단히 리마크 처리해주면 됩니다.

그러면 컴파일 잘 되죠.

하지만 링크하려면 또 에러가 하나 나옵니다. SetPortA 를 찾을 수 없다는 메시지인데,
이는 winspool.h 파일에

#ifdef UNICODE
#define SetPort  SetPortW
#else
#define SetPort  SetPortA
#endif // !UNICODE

이 부분 때문에 발생하는 문제인데,
CPort.h 안에서 include 끝나는 21번째나 22번째 라인즈음에

#define SetPortA SetPort

를 넣거나

#undef SetPort

를 넣어 CPort 의 SetPort 메소드명이 변형되지 않도록 해주면 됩니다.

이렇게 하면 처리 끝입니다.

아주 간단하죠. ^^

여기서 설명 끝인데, 하나 팁으로 더 설명하면
프로그램을 Build All 하면 CPort.hpp 파일이 새로 생성되어, 수정 해 놓은 것이 다 날라가 버리죠.
그래서 수정된 CPort.hpp 를 CPort2.hpp 로 한 부 복사해 놓고
#include "CPort2.hpp"
로 하면 Build All 일 때도 이상없이 사용할 수 있습니다.
망치 [mangchy]   2009-01-20 21:13 X
저는 Cport.pas를 하부 디렉토리에 넣고 생성되는 hpp에서 수정된 헤더를 프로젝트 폴더로 가져옵니다. 그러면 빌드하고 실행해도 참조하는 헤더른 프로젝트 폴더에 있는 수정된 Cport.hpp이므로 무난히 사용가능합니다.
김태선 [cppbuilder]   2009-01-20 23:16 X
그것도 좋은 방법이군요.

+ -

관련 글 리스트
845 CPort 컴포넌트를 설치 없이 그냥 사용하기. 김태선 9653 2009/01/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.