아직 정확하게 단언하기는 힘들지만 RollUp 설치 후 제가 만든 클래스가 오동작을 일으키는군요.
지금까지 체크해 본 바로는 함수 선언시 __fastcall을 사용한 경우 문제가 발생하고 있습니다. this포인터가 함수 진입 직전과 직후에 변경되는 황당한 문제가 발생하네요.
무슨 얘긴고 하니...
1: bool __fastcall TAr::Extract(const String &Directory, TStrings *Contents) <-- 이 시점에서 this == 00B2C530
2: { <-- 이 시점에서 this == 00B22C39
3: if (FArchive)
... ....
... }
이런식으로 구현된 부분이 있는데 컴파일, 링킹은 모두 문제 없습니다.
라인 1: 에 브레이크를 걸어놓고 디버깅 해 보면 1: 과 2:의 this포인터 값이 변하는 황당한 문제가 발생하네요...
Contents는 NULL로 넘기고 있고 const String &Directory를 String Directory 이렇게 바꿔보고 함수이름서부터 함수 인자이름까지 전부 다 바꿔봐도 소용이 없네요.
__fastcall을 제거하면 아무 문제가 없었습니다.
같은 클래스의 Open이라는 맴버함수는 인자가 전혀 없는 함수인데 이 함수는 __fastcall을 사용시에도(의미도 없지만) 정상동작하고 있군요.
기존에 BCB6에서 사용하던 클래스였고, 물론 당시 전혀 문제 없이 동작하고 있었습니다.
오늘 집에 가서 Rollup이 설치되지 않은 BDS에서 다시한번 컴파일 해 보려 합니다. 만약 문제없이 동작한다면 RollUp과 관련된 버그인게 거의 확실해 보이네요. 만약 이게 정말 BDS Rollup의 버그라면 아주 심각한 문제로 보입니다.
박지훈.임프 님이 쓰신 글 :
: 여기를 보세요~ ^^
:
: http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_res&no=319
|