Не спорьте: вы оба правы, потому что говорите о разных TLB.
Изначально ANDLL говорил именно о своих интерфейсах и о TLB, описывающих эти интферейсы.
Действительно, единственное трудное место - это регистрация этой TLB для маршаллинга. Опять же эти трудности были озвучены впоследствии приведением описания функции RegisterTypeLib, которая не регистрирует интерфейсы, не имеющие бита oleautomation.
Я не стал отвечать на замечание о нужности/ненужности oleautomation вообще, т.к. посчитал, что оно не относится к теме вопроса, потому что затрагивает чужие интерфейсы. Т.е. те, которые уже разработаны и уже опубликованы, но по каким-то причинам их нужно скормить VB. ИМХО, это плохая практика - описывать чужие интерфейсы или включать их в свою TLB.
А на вопрос "Зачем нужна регистрация tlb?" нужно поменять порядок ответов:
1. Для маршалинга собственных интерфейсов сервера. Сюда входит наличие и регистрация TLB на клиентской машине вместо самого сервера.
2. Для компиляции кода клиентов.
TLB, помимо информации о всех определяемых сервером типах, содержит ссылки на другие TLB, типы которого используются внутри сервера. Причем она ссылается на них только через LIBID и короткое имя (чтобы иметь возможность сообщить о невозможности доступа к ней по LIBID или найти с помощью файловой системы).
Очевидно, что использование TLB с незарегистрованными родительскими TLB затруднено, если не невозможно.
HTH