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
[57453] Re:bcb6 맵파일로 위치찾기 (Access Violation 위치 찾기)
장성호 [nasilso] 951 읽음    2009-07-01 15:59
먼저
함수의 이름이 아래와 같이 나오는것은
네임멩글링과 관련이 있습니다.

0001:00330024  @Businessskinform@TbsBusinessSkinForm@FormKeyDown$qqrrx17Messages@TMessage
0001:00330248  @Businessskinform@TbsBusinessSkinForm@NewAppMessage$qqrr6tagMSGro

예를 들어

class myCls
{
public:
      test(int i);
      test(String s);
      test(int i , int k );
}

위와같이 같은 이름의 함수가 여러개 있다면 어떻게 해야하죠?
똑같이 만들순 없으니  어떻게  분명이 구분을 지어야 하잖아요

그래서 Compiler마다 코드에 있는 것과 다르게, 나름대로의 규칙을 가지고 함수이름을 짓습니다.
그것이 네이멩글링이라고 합니다.

VC++ 랑 CBuilder가 네임멩글링 규칙이 다르기 때문에
VC++ 의 lib가 CBuilder에서 바로 링크가 안되는것이죠

그래서 vc++용 dll을 CBuilder에서 바로 링크되도록 implib.exe같은 유틸이 있는것이구요


------------------------------------------------------------------------------------

둘째로..
   Application->OnException 이벤트 핸들러에서 Sender를 이용하여
   예외가 발생한 객체를 찾는 코드를 올려주셨는데...

   제가 팁에 올린 내용중에 특이사항 등을 보면 ..
   http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=885

   객체를 못찾는 경우에 대해 몇가지 기술해 놓았습니다.

   코드에서 Component에서 에러가 나도 위치를 찾도록 되어있습니다.
   단지 Component의 Owner가 정해지지 않는경우도 있구
    Sender가  에러난 Component가 아닌 Application이 넘어오는 경우가 종종 있습니다.

그럼..

조안 님이 쓰신 글 :
: 또 질문을 드리게 되었습니다.
:
: 저번에 장성호님이 대답해주신대로 맵파일을 작성하여
:
: Access Violation 때의 위치를 찾아내었습니다
:
: 주소를 찾아보니 3301A8 이네요
: 0001:00330024  @Businessskinform@TbsBusinessSkinForm@FormKeyDown$qqrrx17Messages@TMessage
: 0001:00330248  @Businessskinform@TbsBusinessSkinForm@NewAppMessage$qqrr6tagMSGro
:
: 그러면 이사이란 소리겠죠
:
: 이게 폼키다운을 먹을때 나는 에러라는것까지는 이해했는데
:
: 그뒤에 QQRRX17,.... 등은 어떤의미가 있는건가요?
:
:
: if ( Sender) 
:         {
:            if ( Sender->InheritsFrom( __classid( TControl) ) )
:            {
:               TControl  * ctrl= ( TControl * ) Sender;
:                while ( ctrl)
:               {
:                  sObj = ctrl->Name+ " -> " + sObj;
:                  ctrl = ctrl->Parent;
:               }
:            }
:             else  if ( Sender->InheritsFrom( __classid( TComponent) ) )
:            {
:              TComponent  * Comp= ( TComponent * ) Sender;
:               sObj = Comp->Name;
:                if ( Comp->Owner)
:               {
:                 sObj = Comp->Owner->Name +  " -> " +  sObj;
:               }
:            }
:         }
: 

: 위 소스를 추가해서
: 소스상에서 에러가나면 에러가 난 화면이 정확히 다 나오는데..
: 이건 그것도 안되고.. 그냥 바로 Access 만 출력이 되는걸보니.. Sender 가 없는건가..
:
: 컴포넌트에서 에러난거라서 이렇게 되는건가요..?

+ -

관련 글 리스트
57450 bcb6 맵파일로 위치찾기 (Access Violation 위치 찾기) 조안 874 2009/07/01
57453     Re:bcb6 맵파일로 위치찾기 (Access Violation 위치 찾기) 장성호 951 2009/07/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.