Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.05;
Скачать: 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 вся ветка

Текущий архив: 2002.09.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
1-14028
Krann
2002-08-26 15:16
2002.09.05
Передача ф-ла


1-14163
3asys
2002-08-25 14:40
2002.09.05
Как получить коорднаты выделенного фрагмента в TWebBrowser?


3-13971
a_ruslan
2002-08-16 14:58
2002.09.05
Сортировка по lookup полю


1-14004
Cr@sh
2002-08-26 10:17
2002.09.05
Подскажите, где моя ошибка.


8-14178
Pontic
2002-03-27 17:00
2002.09.05
MediaPlayer