Вниз
Скачать: CL | DM;

помогите с 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
1-14077
Лохматый
2002-08-27 11:33
2002.09.05
Не модальные ShowMessage


1-14158
Yaro
2002-08-24 22:52
2002.09.05
Как лучше организовать подключение к серверу?


1-14153
Lamer86
2002-08-24 21:32
2002.09.05
TStrings


1-14025
Alex4444444444
2002-08-22 11:43
2002.09.05
Сортировка фолдера


1-14151
VID
2002-08-24 20:31
2002.09.05
Сжатие текста, без создания выходного файла




   Наверх