Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];




Вниз

Взаимодействие с 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) от Болланда. Изучив "потроха" этого класса, ты уяснишь для себя практически все, что относится к межинтерфейсным взаимодействиям контроллера и сервера автоматизации во всех его ипостасях - раннее и позднее связывание, примеры использования интерфейсов и т.п.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.017 c
1-8808            DDDeN                 2002-01-16 07:29  2002.02.04  
Restorator


3-8790            Ura                   2001-12-28 11:02  2002.02.04  
BDE


4-9028            fag2000@ok.ru         2001-12-07 12:44  2002.02.04  
Как удалить OLE объект во время выполнения его метода


1-8813            daos                  2002-01-19 10:33  2002.02.04  
Дочерняя форма в dll


3-8777            Слава                 2002-01-08 08:09  2002.02.04  
Как убрать диалоговое окно Удаленного доступа?