Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.04;
Скачать: CL | DM;

Вниз

Взаимодействие с OLE-сервером MSWORD через интерфейс сервера   Найти похожие ветки 

 
programmer1 ©   (2002-01-18 13:11) [0]

Уважаемые мастера Делфи, подскажите, пожалуйста, что это могут быть за файлы word_tlb.pas, office_tlb.pas, VBIDE_tlb.pas? Зачем они включены в проект, где и как их получить? Если они для каждой версии офиса свои, то где мне взять такие же для MSOffice2000. Я столкнулась с ними когда надо было откомпилировать чужой проект, написанный для MSOffice97, а у меня стоит 2000й.
В чем принципиальная разница организации доступа к серверу Автоматизации напрямую, через интерфейс сервера и через дуальный idispatсh-интерфейс. Я знаю, что второй нужен для языков программирования, не поддерживающих указатели, но хотелось бы понять разницу механизма работы того и другого.


 
Belov ©   (2002-01-18 13:58) [1]

В принципе, такие фалйы создает Дельфи, когда ты импртируешь элементы ActiveX в свой проект


 
Digitman ©   (2002-01-18 14:01) [2]

Получить актуальный XXX_TLB.PAS для реально установленного и корректно зарегистрированного сервера автоматизации от MS
ты можешь всегда, выполнив меню Project\Import Type Library. Полученный PAS сохрани в каталоге ($DELPHI)\Imports, убери из USES ссылку на старый XXX_TLB и укажи новый XXX_TLB.

Принципиальная разница между механизмами доступа контроллеров автоматизации к интерфейсам серверов автоматизации заключается в использовании или неиспользовании т.н. механизма "маршаллинга интерфейсных вызовов объекта". Объекты, предоставляющие интерфейсы типа IDispatch, обязательно используют этот механизм (он встроен в ОС, поддерживающую технологию OLE/COM), в то время как для объектов, позволяющих вызывать методы своих интерфейсов непосредственно, этот механизм не требуется.
Такое разделение тесно связано с механизмами "раннего" (early binding) и "позднего" (late binding) связывания контроллера с сервером.
"Позднее" связывание менее производительно, но более универсально и программно независимо от сред разработки сервера и контроллера. Оно использует маршаллинг интерфейсных вызовов контроллера к серверу, всякий раз при вызове какого-либо интерфейсного метода производя разрешение имени метода в его уникальный числовой идентификатор, жестко "прошитый" разработчиком интерфейса.
"Ранее" связывание значительно более производительно, но менее универсально и требует при создании контроллера иметь описание (декларацию) интерфейса в виде того самого XXX_TLB.PAS. В этом случае компилятор будет заранее знать уникальный числовой идентификатор требуемого интерфейсного метода ЗАРАНЕЕ, и в процессе выполнения контроллера ему уже не потребуется всякий раз при необходимости вызова некоего метода сервера говорить последнему "дай мне числовой идентификатор такого-то метода, чтобы я его мог вызвать" (т.к. реально сервер идентифицирует запрашиваемый контроллером к выполнению свой метод не по имени, а по номеру метода в списке доступных методов - именно по тому самому уникальному числовому идентификатору метода).

Наиболее наглядный пример маршаллинга есть в реализации класса TDataBlockInterpreter (модуль SConnect) от Болланда. Изучив "потроха" этого класса, ты уяснишь для себя практически все, что относится к межинтерфейсным взаимодействиям контроллера и сервера автоматизации во всех его ипостасях - раннее и позднее связывание, примеры использования интерфейсов и т.п.



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.011 c
3-8771
Reals
2002-01-05 19:37
2002.02.04
Как правильно сделать проверку в таблице...


1-8817
DJ X
2002-01-19 15:52
2002.02.04
Web браузер


4-9032
Непонятливый
2001-12-06 23:55
2002.02.04
помогите чайнику напечатать текст


4-9030
swr
2001-12-06 09:41
2002.02.04
Анимированный курсор


3-8789
Akimpinpavel
2002-01-08 12:22
2002.02.04
Как связать Delphi с базой данныx Access