2010-07-27 2 views
0

할당자를 원래 소스 코드로 바꿔야합니다. PE 내보내기 테이블에서 내 보낸 메소드를 추출하고 STL 컨테이너가 원래 소스 코드에서 사용 된 이상한 긴 할당자를 마주하고 있습니다. 소스 코드, 즉 인 경우 :stl의 할당자를 실제 소스 코드로 바꾸는 방법

std::list<class std::basic_string<unsigned short, std::char_traits<unsigned short>,class 
std::allocator<unsigned short> >,class std::allocator<class std::basic_string<unsigned 
short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > > > 
const & __thiscall CExpressionTokenizer::getLiteralList(void) 

가 어떻게 원래의 소스 코드에 위의 긴 할당 자에서 철수를받을 수 있나요 : 나는 무엇입니까 수출 테이블에서

typedef std::list<std::basic_string<_TCHAR> > TokenList; 
    EXPORTS_API const TokenList& getLiteralList(); 

은? (형식 정의의 크기가 더 높일 수 있습니다.)

감사를

우스만

답변

1

난 당신이 수출 테이블에서 더 간결 형의 이름을 확인할 수 있도록하려는 뜻 생각합니다. 표준 할당 자 (std::allocator)는 대부분의 표준 컨테이너 클래스 템플릿의 할당 자 매개 변수에 대한 기본 템플릿 매개 변수이므로 템플릿 지정에서 전체 할당 자 매개 변수를 제거하여 동일한 유형의 간단한 표현을 만들 수 있습니다.

예.

std::list<class std::basic_string<unsigned short, std::char_traits<unsigned short>,class 
std::allocator<unsigned short> >,class std::allocator<class std::basic_string<unsigned 
short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > > > 
const & __thiscall CExpressionTokenizer::getLiteralList(void) 

난 당신이 오류 메시지를 디코딩에 대해 이야기하고 생각

std::list<class std::basic_string<unsigned short, std::char_traits<unsigned short> > > 
const & __thiscall CExpressionTokenizer::getLiteralList(void) 
0

이됩니까? STLFilt을 시도하십시오.

+0

나는 처음에는 그렇게 생각했지만 실행 가능한 파일에서 이름을 추출하는 유틸리티를 가지고 있다고 말할 수있는 한 멀리 생각했다. 그 이름들은 할당 자 물건들로 가득 차 있는데 (그들은 있어야만한다.) 그는 그것들을 없애기를 원한다고 나는 생각한다. – GManNickG

+0

예. 분명히. 할당 자 물건 대신 원래 소스 코드를 정확하게 대체하려고합니다. 사실 GUI에서 이러한 유형과 추출 된 메소드 (내보내기 테이블에서 가져온 메소드)를 표시하거나 XML을 말해야합니다. 그래서 사용자로서 나는이 할당자를 인식하지 못할 것입니다. – Usman

+0

정확한 대체물을 가질 수는 없습니다. STL 컨테이너의 할당자는 기본 인수의 한 예일뿐입니다. 예 : 'std :: set '도'std :: less '디폴트 순서를 가질 것이다. 컴파일 한 후에는 기본 인수가 제공되었는지 여부를 더 이상 파악할 수 없습니다. 그건 typedefs (std :: string은 정말로'std :: basic_string ')입니다. – MSalters

관련 문제