COM проблем
17 отговора
568 прегледа
COM проблем
Дефинирал съм си интерфейс (без помощта на wizard-а) в отделен idl-файл, и се опитвам да го имплементирам в един клас.
Проблемът ми е следният: как да включа дефиницията на интерфейса в проекта ?
Проблемът ми е следният: как да включа дефиницията на интерфейса в проекта ?
Re: COM проблем
Ako mnogo dyrzish da e v otdelen file ima 2 varianta. Pyrvia e kakto kaza kolegata pogore da si go izkompilirash v otdelno TLB i da polzvash ot tam. Vtoria e da si includesh vyv tvoia IDL sys import vish MS kak go praviat. Tova obache imam spomeni che drazneshe wizarda i triabvashe da chistim raznite temporary files deto gi generira i full rebuild ne gi opravia (CLW beshe edinia ot tiah).
Re: COM проблем
освен TypeLibrary, MIDL компилатора генерира и header файл (и .c файл) който спокойно може да се ползва от С или С++.
TLB-то е за останалите езици :) (и разбира се ако искаш да го 'публикуваш' заедно с COM сървърите ти - обичайната практика)
TLB-то е за останалите езици :) (и разбира се ако искаш да го 'публикуваш' заедно с COM сървърите ти - обичайната практика)
Re: COM проблем
Абе образи, научете се да питате поне бе .... къде да го инклуднеш? С кво ИДЕ? за какъв език става дума ....
Още един COM проблем
Хайде и аз да питам нещо подобно.
Имам си един ATL контрол, който имплементва неговия си интерфейс. Искам да си направя друг ATL контрол в различен проект (задължително), чийто интерфей да наследява интерфейса на вече съществуващия контрол. Та как става това?
стой та гледай
Имам си един ATL контрол, който имплементва неговия си интерфейс. Искам да си направя друг ATL контрол в различен проект (задължително), чийто интерфей да наследява интерфейса на вече съществуващия контрол. Та как става това?
стой та гледай
Редактирано от lndependent на
Re: Още един COM проблем
#import star_control.dll (ocx, tlb)
class nov_control : public IStar_control
Я вышел им наперерез!
class nov_control : public IStar_control
Я вышел им наперерез!
Re: Още един COM проблем
Не ко-класа, а дифолтния му интерфейс...
Задължително наследяването трябва да стане при интерфейса, иначе се губи смисъла на упражнението.
стой та гледай
Задължително наследяването трябва да стане при интерфейса, иначе се губи смисъла на упражнението.
стой та гледай
Re: Още един COM проблем
Iskash vsicko da stane na 1 red :)
Ste si nasledish coclass-a i ste implemetirash vyprosnia interface v tvoia ctl i toi ste vika metodite na systia interface na unasledenia control, kogato se nalaga.
... ako sym shvanal pravilno ideata.
Ste si nasledish coclass-a i ste implemetirash vyprosnia interface v tvoia ctl i toi ste vika metodite na systia interface na unasledenia control, kogato se nalaga.
... ako sym shvanal pravilno ideata.
Re: Още един COM проблем
абе иска ако може някой да му го напише и да пейстне сорса - ама карайте :)
Re: Още един COM проблем
Питам за принципа, гадино. Ако искам сорс, мога да си намеря в codeproject i codeguru.
А ти като си толкова отворен, защо не кажеш нещо по въпроса? М?
стой та гледай
А ти като си толкова отворен, защо не кажеш нещо по въпроса? М?
стой та гледай
Re: Още един COM проблем
ми щото не мога да разбера какво питаш...
(не намеквам, че въпросът ти е оплетен и неясен)
(не намеквам, че въпросът ти е оплетен и неясен)
Re: Още един COM проблем
баси, като си толкова докачлив, що питаш?
вземи първо прочети малко а не за всеки малък проблем - нов пост.
аман от търтеи.
вземи първо прочети малко а не за всеки малък проблем - нов пост.
аман от търтеи.
Re: Още един COM проблем
Какво неясно има?
Имам си един COM обект като dll i tlb. Импортвам си tlb-то в stdafx.h и при билдване ми се генерират tlh и tli.
В моя проект имам друг COM обект. Искам интерфейса на моя COM обект да наследява интерфейса на чуждия. Обаче ако напиша само
interface IMyCOMObj : IForeignCOMObj
MIDL се оплаква, че IForeignCOMObj не е интерфейс (error MIDL2272 : interfaces must derive from another interface).
ВЪпросът е как да го накарам да разбере, че всъщност IForeignCOMObj Е интерфейс?
стой та гледай
Имам си един COM обект като dll i tlb. Импортвам си tlb-то в stdafx.h и при билдване ми се генерират tlh и tli.
В моя проект имам друг COM обект. Искам интерфейса на моя COM обект да наследява интерфейса на чуждия. Обаче ако напиша само
interface IMyCOMObj : IForeignCOMObj
MIDL се оплаква, че IForeignCOMObj не е интерфейс (error MIDL2272 : interfaces must derive from another interface).
ВЪпросът е как да го накарам да разбере, че всъщност IForeignCOMObj Е интерфейс?
стой та гледай
Re: Още един COM проблем
само малко хинт - трябва и в ТВОЙТО ТЛБ да импортнеш другото ТЛБ. с това няма да ти се реши целия проблем, но поне ша отлепиш малко. а пък аз, понеже съм гаден, нема да ти кажа точно как става, да се потрудиш а не да лежиш на гърбовете на други
Re: Още един COM проблем
имал съм същия проблем, оправия има, прави се така:
1) изходния интерфейс трябва да се вижда! уизърда генерира малко насран код -- интерфейса е извън library блока в идл файла. просто премести дефиницията вътре. това вече го правя на всеки проект
2) във второто тлб, там дето импортираш тлб или длл файла с първия интерфейс правиш importlib
3) правиш forward декларация (тва как е на български?) на интерфейса дето ще го взимаш от базовия тлб (просто един ред interface IMyBaseInterface;)
4) дефинираш си наследяващия интерфейс, който да наследява базовия
5) получаваш глупаво предупреждение, че не ти е oleautomation съвместим интерфейса от мидл компилатора (милия, не се усеща че наследяваш от IDispatch непряко)
6) не забравяй в ком мап-а на наследяващия компонент да туриш ентрита за интерфейсите, добави и COM_INTERFACE_ENTRY2 дето да му кажеш като го питат за базовия интерфейс да връща пойнтер към наследения :)
7) оправи наследяването от IDispatchImpl<> може би ще ти се размине само с промяна на темплейт параметъра. със сигурност минава ако наследиш от 2 различни версии на класа (с различен параметър за интерфейса), мо може да не искаш да влачиш много код.
забележка: за да компилираш другия проект ще ти трябва да #import тлб или длл файла на базовия някъде дето да се вижда от всички (препоръчвам stdafx.h :)) гадното е, че не можах да го оправя да импортва с неймспейси -- тури no_namespace като импортваш
те тва е, прилагам го от доста време и работи... даже сега си имаме и default базова имплементация на методите от базовия интерфейс
ако нещо не е ясно, свиркай. OLEVIEW.EXE също помага, можеш да погледнеш други компоненти и идл-то от тлб ресурсите им. аз тоя номер го видях от компонентите на GIS библиотеката на Intergraph
ein heller Schein am Firmament
1) изходния интерфейс трябва да се вижда! уизърда генерира малко насран код -- интерфейса е извън library блока в идл файла. просто премести дефиницията вътре. това вече го правя на всеки проект
2) във второто тлб, там дето импортираш тлб или длл файла с първия интерфейс правиш importlib
3) правиш forward декларация (тва как е на български?) на интерфейса дето ще го взимаш от базовия тлб (просто един ред interface IMyBaseInterface;)
4) дефинираш си наследяващия интерфейс, който да наследява базовия
5) получаваш глупаво предупреждение, че не ти е oleautomation съвместим интерфейса от мидл компилатора (милия, не се усеща че наследяваш от IDispatch непряко)
6) не забравяй в ком мап-а на наследяващия компонент да туриш ентрита за интерфейсите, добави и COM_INTERFACE_ENTRY2 дето да му кажеш като го питат за базовия интерфейс да връща пойнтер към наследения :)
7) оправи наследяването от IDispatchImpl<> може би ще ти се размине само с промяна на темплейт параметъра. със сигурност минава ако наследиш от 2 различни версии на класа (с различен параметър за интерфейса), мо може да не искаш да влачиш много код.
забележка: за да компилираш другия проект ще ти трябва да #import тлб или длл файла на базовия някъде дето да се вижда от всички (препоръчвам stdafx.h :)) гадното е, че не можах да го оправя да импортва с неймспейси -- тури no_namespace като импортваш
те тва е, прилагам го от доста време и работи... даже сега си имаме и default базова имплементация на методите от базовия интерфейс
ако нещо не е ясно, свиркай. OLEVIEW.EXE също помага, можеш да погледнеш други компоненти и идл-то от тлб ресурсите им. аз тоя номер го видях от компонентите на GIS библиотеката на Intergraph
ein heller Schein am Firmament
Re: Още един COM проблем
ми какъвто кажат :) предимно GIS чудесии.
а ти?
ein heller Schein am Firmament
а ти?
ein heller Schein am Firmament