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

C++빌더 Q&A
C++Builder Programming Q&A
[48723] ActiveX에서 Serial port 감지
김석찬 [kalsman] 1371 읽음    2007-04-02 18:15
컴포넌트 자료실의 CPort2.64 컴포넌트를 이용하여 ActiveX에서 사용하다가 문제가 생겨 이렇게

질문을 올립니다. 이글을 읽어주셔서 감사합니다.


ActiveX 폼에서 CPort 컴포넌트를 이용해 시리얼 포트에서 수신되는 데이터를 읽고자 하는데

신호를 보내도 이벤트가 발생하지 않는군요.. 아래는 제가 만든 소스입니다.

먼저 Type Library에서 이벤트 메소드를 추가했습니다.
이벤트 메소드명은 : OnPRing

     return type :  HRESULT
    parameter : 이름  fromSerial
                       타입  BSTR *
                       modifier  [out] 으로 설정해주었습니다.

그 다음 Imjpl.h에 이벤트 를 맵핑해주었습니다.
//-- ActiveFormImpl.h 내용 ---------------------------
// 중략 ...

class ATL_NO_VTABLE TPhonexImpl:
  VCLCONTROL_IMPL(TPhonexImpl, Phonex, TPhonex, IPhonex, DIID_IPhonexEvents)
{
  void __fastcall ActivateEvent(TObject *Sender);
  void __fastcall ClickEvent(TObject *Sender);
//중략...

public:

  void InitializeControl()
  {
    m_VclCtl->OnActivate = ActivateEvent;

// 중략...

    m_VclCtl->OnPaint = PaintEvent;

    // 추가한 부분
    m_VclCtl->ComPort1->OnRxChar = RingEvent;
  }
// 추가한 부분
  void __fastcall RingEvent(TObject * Sender, int pCount);

// 중략 ...

}


// -- ActiveFormImpl.cpp 에 추가한 부분 -----------------------

void __fastcall ActiveForm::btnStartClick(TObject *Sender)
{
        if(ComPort1->Connected)
        {
                Memo1->Lines->Add("already connected");
                Memo1->Lines->Add("try to disconnect");
                ComPort1->Close();
                Memo1->Lines->Add("try to connect");
                ComPort1->Open();
        }
        else
        {
                Memo1->Lines->Add("try to connect 5");
                ComPort1->Open();
        }
}

void __fastcall ActiveFormImpl::RingEvent(TObject *Sender, int pCount)
{
        AnsiString Str;
        wchar_t * oleStr;
        m_VclCtl->Memo1->Lines->Add("Data Received good");
        m_VclCtl->ComPort1->ReadStr(Str, pCount);
        m_VclCtl->Memo1->Lines->Add(Str);
        oleStr = WideString(Str);
        Fire_OnPRing(&oleStr);
}


이렇게 해주었는데 시리얼포트로 데이터를 보내도 이벤트가 발생하지 않습니다.

시리얼포트 이상은 없는거 같습니다. ActiveX 를 사용하지 않고 시리얼 포트로 부터 데이터를 받으면 잘 받아지구요

엑티브 엑스만을 사용해서 버튼을 누르면( Active 폼 내부에 버튼을 장착) 웹페이지에서 데이터를 잘 받아냅니다.

무슨 문제일까요?

읽어주셔서 감사합니다.

+ -

관련 글 리스트
48723 ActiveX에서 Serial port 감지 김석찬 1371 2007/04/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.