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
[6553] Re:Re:Re:Timer 를 다음과 같이 사용하려면 어떻게 해야 하죠..
박지훈.임프 [cbuilder] 2527 읽음    2001-04-03 20:12
향기 님이 쓰신 글 :
: 답변주셔서 감사 합니다. 아래와 같이 해도 에러가 나네요..제가 알아봐야 할것이 무엇이 있을까요?
: 가능하기는 할까요? 그럼..
: 즐프하세요...
:
:
: : 임펠리테리입니다.
: :
: : 도스에서 VCL을 써본 적은 없습니다만.. 일단, 콘솔 어플리케이션에는 Application 객체가 없으므로 Owner 인자로 넘길수도 없겠지요? 그냥 NULL을 넘기시면 되겠네요.
: :
: : 그럼 참고하시길...
:
: void __fastcall Timer1Timer(TObject *Sender)
: {
:   cout << "inside Timer";
: }
:
: int main(int argc, char* argv[])
: {
:   cout << "hello, World";
:   getch();
:
:   AnsiString astTemp;
:   astTemp = "AnsiString";
:   cout << astTemp.c_str();
:   getch();
:
:
:   TTimer *Timer1;
:   Timer1 = new TTimer(NULL);    ->  이렇게 하시란 말씀인가요?
:
:   Timer1->Interval = 100;
:   Timer1->OnTimer = Timer1Timer;  -> 위와 같이 해도 아래와 같은 에러가 나요...
: [C++ Error] unit_Vcl.cpp(33): E2034 Cannot convert 'void (_fastcall *)(TObject *)' to 'void (_fastcall * (_closure )(TObject *))(TObject *)'
:
:   delete Timer1;
:         return 0;
:

임펠리테리입니다.
저번에 질문하실때 소스를 자세히 안봤었는데... (죄송) 지금 다시 보니.. ^^

먼저, 에러가 나는 이유에 대해 알려드리죠. VCL에서 쓰는 이벤트는 에러메시지대로 void (_fastcall * (_closure )(TObject *))(TObject *) 타입입니다. 이 타입이 의미하는 것은, 이벤트 핸들러가 TObject를 상속받은 클래스의 멤버여야 한다는 것입니다. (보통은 폼 클래스의 멤버가 되죠?) 그러므로 에러메시지가 나오지 않게 하려면 Timer1Timer() 함수를 선언할 때 어떤 것이든 TObject를 상속받는 클래스의 멤버로 만들어야 합니다.

더 중요한, 제가 저번에 깜빡하고 그냥 넘어간 것.
콘솔 어플리케이션은 메시지를 받지 않으므로 타이머를 생성하고 OnTime 이벤트에 핸들러를 붙여주시더라도 이벤트가 발생하지 않습니다. 타이머의 이벤트라는 것이 타이머 메시지에 의해 발생하는 것이니까요. 다른 모든 메시지나 이벤트에 대해서도 마찬가지입니다.

그럼 참고하시길...

+ -

관련 글 리스트
6117 Timer 를 다음과 같이 사용하려면 어떻게 해야 하죠.. 향기 2388 2001/03/15
6196     Re:Timer 를 다음과 같이 사용하려면 어떻게 해야 하죠.. 박지훈.임프 2501 2001/03/19
6541         Re:Re:Timer 를 다음과 같이 사용하려면 어떻게 해야 하죠.. 향기 2464 2001/04/03
6553             Re:Re:Re:Timer 를 다음과 같이 사용하려면 어떻게 해야 하죠.. 박지훈.임프 2527 2001/04/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.