2013-02-21 1 views
1

Я использую UnDecorateSymbolNameW из dbghelp, чтобы не украшать имена символов Microsoft. Когда unecorating с UNDNAME_COMPLETE, имя символа может иногда иметь, что я понимаю, какая-то компилятор прилагается к нему. Например, символ vftable может иногда иметь фигурный скобковый блок, содержащий ключевое слово for, за которым следует имя класса/интерфейса, например.Undecorated Microsoft Symbol: SomeClass :: `vftable '{для` Foo :: Bar'}

SomeClass :: 'vftable' {для 'Foo :: Bar'}

Может кто-нибудь сообщить мне, как к тому, что означает, что "{for 'Foo::Bar'}" часть имени?

Кроме того, кто-нибудь знает о какой-либо документации об этом, поэтому я могу читать, поскольку я ничего не могу найти.

Большое спасибо!

+0

Вы не собираетесь найти это документально, это компилятор детали реализации, которые могут быть изменены. Класс может иметь более одного v-таблицы из-за множественного наследования. Постфикс гарантирует, что их символы уникальны. –

ответ

2

Ваш класс SomeClass использует множественное наследование и имеет несколько базовых классов с виртуальными методами. Поэтому SomeClass нуждается в нескольких vtables (по одному для каждого базового класса с виртуальными методами). {for 'Foo::Bar'} сообщает, какой у вас vtable. В этом случае это vtable для базового класса Foo::Bar.

(Это должно было самоочевидно из названия.)

+0

Спасибо, да, действительно, это имеет смысл, когда вы это произносите. Позор, нет документации для этого материала. Еще раз спасибо. – Bobby

+0

Это все компилятор-внутренний материал. Компилятор-внутренний материал, как правило, не документируется, поскольку он может меняться в любое время. –

+0

Справедливо, я пытаюсь разобрать как можно больше информации из символов, чтобы создать метамодель для чего-то, поэтому мне интересна спецификация на этом материале. Но я понимаю, почему формальная спецификация/документация недоступна. – Bobby