Хочу использовать информацию о типе об COM-обьекте на стороне клиента, чтобы минимизировать реализацию sink'а к нему. Т.е. есть COM-обьект, он сделан как реализующий Dual интерфейс, плюс к этому он еще шлет fir'ы клиенту через dispinterface. COM-обьект этот сделан самым стандартным образом — wizard'ами. Все работает, т.е. fir'ы шлются без проблем. OK.
На стороне клиента я делаю ручками sink (клиент у меня не MFC'шный, а Borland'овый еше на 3-ей версии Builder'а), и наследую его от dispinterfac'а прописанного в IDL'ке COM-обьекта. Реализую IUnknown, IDispatch и собственый рабочие функции (в IDL'ке они, безусловно, тоже определены). Все fir'ы принимается на "ура". OK.
Далее, решил я использовать в sink'овой реализации функцию DispInvoke() для вызова рабочих функций dispinterfac'а, а то собственная реализация — очень большая (так как делает перенаправления на более чем 100 рабочих функций). Т.е. в IDispatch::Invoke() просто делаю вызов DispInvoke(). Так он, зараза :-)), говорит "MEMBER IS NOT FOUND" для любых MemberID приходящих с Invoke(). Параметры pExcepInfo, puArgErr — остаются пустыми :-(( Больше инфо взять получается неоткуда :-((
Безусловно — методы все есть и раньше они спокойно работали. LoadRegTypeLib(LIBID_xxxLib) дал правильный ITypeLib*, он в свою очередь правильно отработал GetTypeInfoOfGuid(DIID__IxxxEvents) и дал ITypeInfo*. Этот указатель — корректный. Я его проверял — просил дать, к примеру, GetDocumentation() — все ОК. Остальные три метода IDispatch'а я тоже переделал — в GetTypeInfoCount() возвращаю "1", в GetTypeInfo() возвращаю ITypeInfo* и делаю к нему AddRef() делаю, в GetIDsOfNames() вызываю DispGetIDsOfNames(). Т.е. вроде все хорощо. Только не работает :-((
Вообщем не знаю куда податься :-((
P.S. Кстати, хотел спросить, что информацию о типе содержиться еще и в DLL (а не только в TLB)? А то я посмотрел по реестру, а там ссылки для coclass'ов и interfac'ов моего COM-обьекта об их библиотеке типов идут к его DLL. Т.е. могу ли я поставлять юзерам только DLL'ку (без TLB'шки) и пользоваться информацией о типе в run-time?