Форум: "Основная";
Текущий архив: 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) от Болланда. Изучив "потроха" этого класса, ты уяснишь для себя практически все, что относится к межинтерфейсным взаимодействиям контроллера и сервера автоматизации во всех его ипостасях - раннее и позднее связывание, примеры использования интерфейсов и т.п.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c