0

アロケーターを元のソース コードに置き換える必要があります。PE エクスポート テーブルからエクスポートされたメソッドを抽出していますが、元のソース コードで STL コンテナーが使用されていた奇妙な長いアロケーターに直面しています。つまり、ソース コードが次の場合:

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

私が取得しているエクスポートテーブルから:

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 のサイズはさらに大きくなります。)

よろしく、

ウスマン

4

2 に答える 2

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)
于 2010-07-27T18:14:53.260 に答える
0

エラーメッセージの解読について話していると思いますか?STLFiltを試してください。

于 2010-07-27T18:24:50.163 に答える