|
컴포넌트 자료실의 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 폼 내부에 버튼을 장착) 웹페이지에서 데이터를 잘 받아냅니다.
무슨 문제일까요?
읽어주셔서 감사합니다.
|