Re: Непонятный com объект
От: Vi2 Удмуртия http://www.adem.ru
Дата: 29.07.05 11:43
Оценка:
Здравствуйте, BrainDrain, Вы писали:

BD>Пишу сложный плагин для geomedia. Там есть странная dll-ка (pgeomath.dll): вроде как com подключается в референсах, но в реестре с нейц мало что связано.


Твоя pgeomath.dll — это обычная стандартная DLL. Это не СОМ сервер, т.к. не содержит нужных СОМу точек входа. Также она не содержит ресурса с библиотекой типа (ресурс TypeLib), поэтому она не может быть "подключена в референсах".

То, что подключается через референс, — это pgeomath.tlb, которая описывает (все ли?) доступные функции из pgeomath.dll. Есть такой способ задания функций — через механизм библиотеки типа, а не через Declare для каждой используемой функции. Это удобно, но скрывает мехенизм.

BD>Есть от него tlb-ха, но в ней стандартными средствами увидеть ничего не удается. VB нормально с ней работает как с com, видит все внутри без проблем.


Твоя pgeomath.tlb является нормальной библиотекой типа и поэтому нормально смотрится всеми "стандартными средствами", в том числе и самим VB. Единственная трудность: твоя pgeomath.tlb зависит от PBasic.tlb и PCSS.tlb. От их регистрации зависит загрузка и регистрация pgeomath.tlb.

Т.к. у меня нет указанных tlb-шек, то вот что я имею:
VB информация:
Library PGeoMath
    D:\Forums\RSDN\pgeomath\PGeoMath.tlb
    Intergraph GeoMedia GeoMath 5.1
...
Sub SegmentIntersectSegment()
    Member of PGeoMath.GeometryMath
    Find the intersection of two segments

VC #import информация:
    HRESULT __stdcall SegmentIntersectSegment(
        __missing_type__,
        __missing_type__,
        __missing_type__,
        __missing_type__,
        __missing_type__,
        long * IntersectionType );

OLE/COM Object Viewer информация:
[entry(0x60000007), helpstring("Find the intersection of two segments"), helpcontext(0x00002b66)]
HRESULT _stdcall SegmentIntersectSegment(
                [in] <GetRefTypeInfo failed>* S1V1, 
                [in] <GetRefTypeInfo failed>* S1V2, 
                [in] <GetRefTypeInfo failed>* S2V1, 
                [in] <GetRefTypeInfo failed>* S2V2, 
                [out] <GetRefTypeInfo failed>** IntersectionPoint, 
                [out] long* IntersectionType);


BD>Проблема возникает тогда когда geomedia со своим фреймворком на тачке клиента ставится в папку отличную от той, в которой стоит у меня — мой activex не хочет даже регистрится — не находит референс.


А что твои "geomedia со своим фреймворком" не регистрируют эту tlb?

BD>Подсовывание гадкой dll-ки в разные места ничего не дает. Библиотека pgeomath сама не регистрится как com. И как же мне быть?


Нужно работать с pgeomath.tlb (и плюс PBasic.tlb и PCSS.tlb), а не с pgeomath.dll.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.