Форум: "Основная";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
Внизпомогите с OLE на Delphi Найти похожие ветки
← →
SaperXL (2002-08-24 12:18) [0]В качестве OLE сервера выступает MapInfo. Он поддерживает некоторую объектную модель:
-Сервер
-Карты (OLE связанный объект, в джанном случае карта)
-Переменные (у каждой карты свои)
У каждого объекта соответственно есть свой набор методов (некоторые с параметрами, например
метод Do(s:string), который в зависимости от параметра заствляет изменяться карту -
связанный OLE объект) и свойства, но всё это есть у MapInfo, проблема заключается в том,
чтобы перенести всё это в Delphi. Если бы Я писал на VisualBasic, то было бы так:
Dim mi As Object
Sub Form_Load( )
Set mi = CreateObject("MapInfo.Application")
mi.Do "Set Application Window " & Form1.hwnd
End Sub
Если бы Я писал на Visual C, то сначала Я бы присоединил модуль прилагающийся к MapInfo
(#include MapInfow.h) тем самым дав своему приложению знания о классе DMapInfo и далее
DMapInfo mi;
mi.Do("Set Application Window " + Form1.hwnd)
Обратите внимание в результате каки-то "таинственных" заклинаний в обоих случаях Я получаю
объект (mi) который знает о всех методах поддерживаемых OLE сервером. (Особенно круто на
Басике).
Так вот хотелось бы также получать объект и в Delphi. Через OLEContainer не получается -
он не знает о методах поддерживаемых OLE сервером. Помогите пожалуйста...
Речь шла об OLE Automation, а не об OLE внедрении.
← →
DiamondShark (2002-08-24 13:20) [1]На дельфе ничуть не хуже чем на васике.
var
mi: variant;
begin
mi := CreateOleObject("MapInfo.Application");
// а дальше совсем как в васике
← →
SaperXL (2002-08-24 15:40) [2]Да, спасибо - помогло очень.
Да Я и не говорю, что Басик круче просто так для примера как в другом языке...
А с OLEContainer"ом всё-таки что-то не так: у него же есть свойство OLEObject которое должно указывать на OLE объект (у нас это mi), а он куда-то указывает, а про интерфейс (методы и свойства) объекта ничего не знает. Ну да ладно - он (OLEContainer) мне всё равно не нужен. Спасибо.
← →
Набережных С. (2002-08-24 16:09) [3]Плюс два пути:
1)Import type librare
2)Ручной перевод заголовочного файла на Pascal
← →
DiamondShark (2002-08-24 18:29) [4]
> А с OLEContainer"ом всё-таки что-то не так: у него же есть
> свойство OLEObject которое должно указывать на OLE объект
> (у нас это mi), а он куда-то указывает, а про интерфейс
> (методы и свойства) объекта ничего не знает
Оно указывает на интерфейс IDispatсh -- базовый интерфейс всех объектов автоматизации.
Variant тоже может содержать ссылку IDispatch, просто компилятор автоматически генерирует код позднего связывания для variant через вызовы IDispatch.GetIDsOfNames и IDispatch.Invoke
Естественно, в этом случае никакого контроля типов на этапе компиляции + overheat на позднее связывание.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c