Здравствуйте, 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.