Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-9026
Don
2001-12-07 15:54
2002.02.04
Вывод заголовка в StringGrid вертикально


1-8944
Сержик
2002-01-18 09:48
2002.02.04
Как подменить exe-шник из него самого?


1-8873
Turalyon
2002-01-15 09:44
2002.02.04
Динамические объекты


14-8977
evgeg
2001-12-12 21:27
2002.02.04
А вы знаете, что ссылки на этот форум есть на сайт www.rsdn.ru в разделе


1-8902
LoHoVski
2002-01-16 16:42
2002.02.04
Не компилирует любые пакеты без PAS-файлов ПОМОГИТЕ!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский