Основы COM. Рудалев В.Г - 12 стр.

UptoLike

12
D := CreateComObject(Class_CalcSrv) as IMyDisp;
D.Calculate;
В данном случае синтаксический контроль происходит на этапе компиляции, и
при этом необходима библиотека типов : на стадии компиляции по диспинтер-
фейсу отыскивается DISPID, который затем при выполнении программы пере -
дается методу Invoke. Эта последовательность действий встраивается в код
программы компилятором. Метод GetIDsOfNames здесь не используется. По
скорости выполнения данный способ, называемый ID-связыванием, уступает
раннему связыванию, но превосходит позднее связывание.
Технология доступа с помощью дуальных интерфейсов называется OLE Auto-
mation (также - Automation, автоматизация). Automation накладывает на COM-
серверы ряд дополнительных требований [2]:
1. Интерфейс, реализуемый COM-сервером, должен наследоваться от
IDispatch
2. Должны использоваться типы данных, совместимые с OLE Automation
Тип данных
OLE Automa-
tion
Тип данных
Delphi
Примечание
Boolean WordBool
Unsigned
Char
Byte
Double Double
Float Single
Int SysInt
Машинно - зависимый целый тип данных.
В настоящее время объявлен как
integer, однако в будущем может
иметь другую разрядность
Long Integer
Short SmallInt
BSTR WideString
Тип WideString требует для каждого
символа два байта . Обычные строки
Delphi в Automation использовать нельзя
Currency Currency
Date TDateTime
SafeArray PSafeArray
Массив из элементов любого поддержи-
ваемого типа
Decimal TDecimal
96 битное десятичное число
                                         12
  D := CreateComObject(Class_CalcSrv) as IMyDisp;
  D.Calculate;
…
В д анном случаеси нтакси чески й контроль прои сход и тна этапе компи ляци и , и
при этом необход и ма би бли отека ти пов : на стад и и компи ляци и по д и спи нтер-
фей су оты ски в аетсяDISPID, которы й з атем при в ы полнени и программы пере-
д ается метод у Invoke. Э та послед ов ательность д ей ств и й в страи в ается в код
программы компи лятором. М етод GetIDsOfNames з д есь не и спольз уется. По
скорости в ы полнени я д анны й способ, наз ы в аемы й ID-св язы в ани е м, уступает
раннему св яз ы в ани ю , но прев осход и тпоз д неесв яз ы в ани е.
Т ехнологи я д оступа с помощ ью д уальны х и нтерфей сов наз ы в ается OLE Auto-
mation (такж е - Automation, ав томати з аци я). Automation наклад ы в ает на COM-
серв еры ряд д ополни тельны х требов ани й [2]:
   1. И нтерфей с, реали з уемы й   COM-сервером, д олж ен наслед ов аться от
      IDispatch
   2. Д олж ны и спольз ов атьсяти пы д анны х, сов мести мы есOLE Automation
    Т и п д анны х Т и п д анны х При мечани е
    OLE Automa- Delphi
    tion
    Boolean         WordBool
    Unsigned        Byte
    Char
    Double          Double
    Float           Single
    Int             SysInt            М аш и нно-з ав и си мы й целы й ти п д анны х.
                                      В    настоящ ее в ремя объяв лен как
                                      integer, од нако в буд ущ ем мож ет
                                      и меть д ругую раз ряд ность
    Long            Integer
    Short           SmallInt
    BSTR            WideString        Т и п WideString требует д ля каж д ого
                                      си мв ола д в а бай та. О бы чны е строки
                                      Delphi в Automation и спольз ов ать нельз я
    Currency        Currency
    Date            TDateTime
    SafeArray       PSafeArray        М асси в и з элементов лю бого под д ерж и -
                                      в аемого ти па
    Decimal         TDecimal          96 би тноед есяти чноечи сло