BLOG main image
분류 전체보기 (17)
궁시렁 (1)
리버싱 (0)
컴쟁이의 연구실 (11)
배워보자 (2)
좋은 곳 (0)
여행 (0)
독서 (1)
idea (0)
Visitors up to today!
Today hit, Yesterday hit
daisy rss
^0^range.net
2020. 10. 4. 16:24

배경 및 문제점
타인이 개발한 MFC프로그램 소스를 받아서 추가 기능을 구현 하고 있었다.
사전에 구현된 기능을 라이브러리로 만들고 헤더파일을 포함시켜 컴파일하는데,
Parse() 함수에서 에러가 나오고, IMyRecordBase를 상속받은 모든 함수에서 에러가 
발생하였다.

class IMyRecordBase
{
public:
virtual BOOL Parse(CMyStreamReader* r) = 0;  <<--- 컴파일 에러
virtual void Dump() = 0;
};


1>c:\project\...\hwprecordbase.h(9) : error C2143: syntax error : missing ')' before 'constant'
1>c:\project\...\hwprecordbase.h(9) : error C2143: syntax error : missing ';' before 'constant'
1>c:\project\...\hwprecordbase.h(9) : error C2059: syntax error : ')'
1>c:\project\...\hwprecordbase.h(9) : error C2238: unexpected token(s) preceding ';'


시도한 방법
1. 헤더파일 정리(중복으로 헤더를 인클루드할까봐 헤더파일을 정리)
2. 새로 나온 VS Service Pack 찾아서 설치
3. 헤더 파일 의존성 분석(/showIncludes 옵션)
4. CMyStreamReader 클래스 이름을 다른 이름으로 바꿔서 컴파일
5. 상속받는 인터페이스 클래스를 쪼물딱 거리면서 무한 컴파일 시도


해결된 방법
6. 전처리기 결과물 분석(/P)
 --> Resource.h내 "#define r          32772" 로 정의되어 있었다
 --> 그래서 위 Parse함수가 "Parse(CMyStreamReader* 32772)" 로 해석되었기 때문이였다.

더 시도해 볼뻔한 방법
7. 상위버전 VS 에서 빌드
8. Library 소스를 전면 재개편