RUS  ENG 

Работа с компонентами Zulu в C++Builder 6

Страницы: 1
RSS
Работа с компонентами Zulu в C++Builder 6
 
Здравствуйте!
Вопросов много, для начала:

1. Как связать компоненты MapCtrl и ZbStdBrowser. В примере на VB:
MapCtrl1.Browser = ZbStdBrowser1.Browser
Делаю аналогично:
MapCtrl1->Browser = ZbStdBrowser1->Browser;
Получаю ошибку преобразования типа. Пробую:
MapCtrl1->Browser = (_di_IUnknown)ZbStdBrowser1->Browser;
Получаю ошибку "TMapCtrl::Browser is not accessible"

2. Предположим, надо программно создать на слое ломаную. То есть надо ее создать, а потом добавить в слой. Нахожу аналогию для Delphi:
Poly := CoPolyLine.Create;
Пробую типа:
PolyLine* Poly = CoPolyLine::Create();
или
CoPolyLine co;
PolyLine* Poly = co.Create();
В обоих случаях получаю ошибку неразрешенная ссылка
Unresolved external 'Zululib_tlb::IID_IPolyLine'
Unresolved external 'Zululib_tlb::CLSID_PolyLine'

3. Что за тип tagVARIANT, который требуют многие методы, а я не могу к нему ничего преобразовать.

Заранее благодарю за помощь
 
1. Builder при импорте не все свойства делает published. От версии к версии его поведение меняется. Почему ? Воля Билдера. В C++Builder 5 это свойство доступно. И все равно, Вы можете присвоить Browser так: MapCtrl1.set_Browser( ZbStdBrowser1->Browser);
2. Убедитесь, что импортируемый модуль ZuluLib_TLB.cpp включен в проект. Переменные CLSID_xxxx, IID_xxxx при импорте в Билдер попадают туда. Создать объект можно так:
IPolyLinePtr Poly; Poly = CoPolyLine::Create();
3. VARIANT - один из базовых типов OLE Automation. См. документацию Platform SDK. В Win32 API входит множество функций для работы с VARIANT вида VariantXXXX (VariantInit, VariantClear, и т.п.) В VCL есть классы-обертки типа TVariant, OleVariant, делающие большинство рутинной работы.
 
Пожалуйста, подскажите, как использовать ThemeFilterDesc в С++Bulder. У вас есть пример UsingTheme на VB.
При попытке повторить то же самое на С++, а именно при создании ThemeFilterDesc, возникает ошибка компиляции:
E2352 Cannot create instance of abstract class 'IThemeFilterDesc'
E2353 Class 'IThemeFilterDesc' is abstract because of '__stdcall IThemeFilterDesc::__Raw() = 0'
 
Судя по ошибкам, Вы пытаетесь создать не экземпляр объекта ThemeFilterDesc, а экземпляр интерфейса IThemeFilterDesc, что невозможно (для любого интерфейса в принципе). Объект ThemeFilterDesc в C++Builder можно создать так:
IThemeFilterDescPtr filter;
filter = CoThemeFilterDesc::Create();
Страницы: 1