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
[69047] COM 사용 관련 질문 드립니다.
chocopico [yg0sky] 1600 읽음    2013-01-25 11:11
안녕하세요..??
검색만 하다가 처음으로 질문을 올립니다.


IR로 TV 메뉴를 제어하는 장치를 컨트롤 하는 중입니다.
(리모컨 같은...)

해당 디바이스에서 제공하는 DLL이 VC로 만들어져 있어서 Import Type Library를 사용하여
컴포넌트를 등록했습니다.

장치명이나 등록번호등을 읽어오는 것으로 보아 라이브러리가 제대로 올라온 것으로 보입니다.

문제는
TLB 파일 내용을 보면 interface로 선언된 클래스가 있는데 해당 클래스 내부의 함수를 중에서 IR 신호가 들어오면
CallBack함수처럼 실행되는 함수가 있습니다.
이 함수를 사용하기 위해서 메인 클래스에서 함수를 새로 만들어 TLB 파일의 함수와 연결하여 사용하려고 하는데..
(함수 포인터라고 하는가요,...??)
쉽지가 않네요..

COM 지식이 없으서 검색으로 찾아보니 인터페이스 클래스는 바로 사용하지 못하고 상속을 받아 클래스를 새로 생성해서
사용해야 한다고 해서 상속 클래스를 상속 받아서 생성했지만 인스턴스를 생성할 수 없다고 에러가 출력 됩니다.
( Cannot create instance of abstract class...)

며칠째 이 문제 해결 못하고 있습니다. 도움 부탁 드립니다.
아래에 소스부분도 같이 올립니다.

<TLB 파일 인터페이스 클래스 소스 부분>
interface IRR3Events : public TDispWrapper<IDispatch>
{
  void __fastcall RCSignalIn(Redrat_tlb::ICCWRedRat3* sender/*[in]*/,
                             Redrat_tlb::ISignalInEventArgs* e/*[in]*/)
  {
    _TDispID _dispid(/* RCSignalIn */ DISPID(1));
    TAutoArgs<2> _args;
    _args[1] = (LPDISPATCH)(Redrat_tlb::ICCWRedRat3*)sender /*[VT_USERDEFINED:1]*/;
    _args[2] = (LPDISPATCH)(Redrat_tlb::ISignalInEventArgs*)e /*[VT_USERDEFINED:1]*/;
    OleProcedure(_dispid, _args);
  }

  void __fastcall LearningSignalIn(Redrat_tlb::ICCWRedRat3* sender/*[in]*/,
                                   Redrat_tlb::ISignalInEventArgs* e/*[in]*/)
  {
    _TDispID _dispid(/* LearningSignalIn */ DISPID(2));
    TAutoArgs<2> _args;
    _args[1] = (LPDISPATCH)(Redrat_tlb::ICCWRedRat3*)sender /*[VT_USERDEFINED:1]*/;
    _args[2] = (LPDISPATCH)(Redrat_tlb::ISignalInEventArgs*)e /*[VT_USERDEFINED:1]*/;
    OleProcedure(_dispid, _args);
  }
};

<메인 클래스 부분>
.h
class TRR3Events : public IRR3Events
{
    //
    public:
        TRR3Events(void);

    public:
        void _fastcall LearningSignalIn(ICCWRedRat3 *RR3, TCCWSignalInEventArgs e);
        void _fastcall RCSignalIn(ICCWRedRat3 *RR3, TCCWSignalInEventArgs e);
};
.cpp
TRR3Events::TRR3Events(void):IRR3Events()
{
    //
}
//---------------------------------------------------------------------------

void _fastcall TRR3Events::LearningSignalIn(ICCWRedRat3 *RR3, TCCWSignalInEventArgs e)
{
     //
}
//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
    RR3Events = new TRR3Events();                 <-- 에러 발생.
    RR3Events->LearningSignalIn = rrInSignal;

}

+ -

관련 글 리스트
69047 COM 사용 관련 질문 드립니다. chocopico 1600 2013/01/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.