Библиотеки типа

Библиотека типа – независимый от языка эквивалент заголовочных файлов.

Библиотека типа СОМ предоставляет информацию типа о компонентах, интерфейсах, методах, свойствах, аргументах и структурах.

Библиотека типа – это откомпилированная версия файла IDL, к которой возможен доступ из программы. Это двоичный файл.

Библиотека Автоматизации предоставляет стандартные компоненты для создания и чтения таких двоичных файлов.

 

Для генерации библиотеки типа можно использовать MIDL.

Создание библиотеки типа

CreateTypeLib создает библиотеку типа и возвращает интерфейс ICreateTypeLib.

Этот интерфейс можно использовать для занесения в библиотеку. типа различной информации.

Использование библиотек типа

Библиотеку типа можно либо включить в DLL или EXE, либо добавлять как ресурс.

Библиотека COM предоставляет следующие функции для загрузки бибилиотеки типа:

            LoadRegTypeLib                    из реестра

            LoadTypeLib              с диска по имени файла

            LoadTypeLibFromResource         из ресурсов EXE или DLL.

Для регистрации библиотеки типа (если вызов по имени) предназначается функция:

            RegisterTypeLib.

При загрузке возвращается указатель на интерфейс ITypeLib (используется для доступа к библиотеке типа).

Получение информации об интерфейсе или компоненте выполняется посредством функции:

            ITypeLib::GetTypeInfo   – передаются CLSID или IID

                        – возвращает указатель на ITypeInfo для запрошенного элемента

Интерфейс ITypeInfo  может реализовать IDispatch автоматически.

Информация о библиотеке типа находится в разделе HKEY_CLASSES_ROOT   TypeLib.

Каждая библиотека типа имеет свой GUID.

Все, что следует в фигурных скобках после ключевого слова library включается в библиотеку типа.

Оператор coclass определяет компонент.

Практически библиотека типа может быть сформирована из IDL файла. В IDL файле описываются все интерфейсы, реализуемые компонентом.

В среде проектирования IDL файл можно создать, выполнив команду меню File | New | File, и выбрав на панели Templates элемент Mdi File (.idl). На следующем рисунке приведен диалог New File, позволяющий создать IDL файл.

Следующий рисунок иллюстрирует объявление интерфейса в IDL файле.

Для определенного выше интерфейса возможна следующая реализация:

// Интерфейс IX

HRESULT __stdcall CA::FxStrIn(wchar_t* szIn)

{    ostrstream sout ;

     sout << "Метод FxStrIn получил следующую строку:  "

          << szIn << ends ; return S_OK ;   }

HRESULT __stdcall CA::FxStrOut(wchar_t** pszOut)

{    const wchar_t wsz[] = L"[Строка от FxStrOut]" ;

     const int iLength = (wcslen(wsz)+1)*sizeof(wchar_t) ;

 

     // Выделение памяти под строку

     wchar_t* pBufString = static_cast<wchar_t*>(::CoTaskMemAlloc(iLength)) ;

     if (pBufString == NULL)

     {    return E_OUTOFMEMORY ;    }

     // Копируем строку в буфер

     wcscpy(pBuf, wsz) ;

 

     *pszOut = pBufString ;

     return S_OK ;

}

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100