Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Поддержка технологий COM >> COM-объекты и фабрика классов >> Создание экземпляра внутреннего COM-сервера

[Назад]    [Содержание ]    [Вперед]

  


Создание экземпляра внутреннего COM-сервера


Для создания экземпляра СОМ-сервера в Delphi необходимо использовать функцию CreateComObject() модуля ComObj, определяемую следующим образом:

function CreateComObject(const ClassID: TGUID): IUnknown;

Параметр ClassID содержит CLSID, который определяет тип создаваемого СОМ-объекта. Значение, возвращаемое этой функцией ?интерфейс IUnknown этого СОМ-объекта. Если СОМ-объект не может быть создан, генерируется исключительная ситуация.

Функция CreateComObject() инкапсулирует API-функцию СОМ CoCreateInstance(). Внутри функции CoCreateInstance() для получения интерфейса IClassFactory определенного СОМ-объекта вызывается API-функция CoGetClassObject(). Функция CoCreateInstance() выполняет этот вызов при просмотре в системном реестре параметров InProcServer32 СОМ-класса для того, чтобы определить путь к DLL внутреннего сервера, вызывая функцию LoadLibrary() для загрузки DLL внутреннего сервера, а затем вызывая DLL-функцию DllGetClassObject(). После получения указателя на интерфейс IClassFactory функция CoCreateInstance() вызывает функцию IClassFactory.Createlnstance() для создания экземпляра определенного СОМ-класса.

Совет Для создания нескольких объектов из фабрики классов использовать функцию CreateComObject() неэффективно. Это связано с тем, что после создания необходимого СОМ-объекта она удаляет указатель интерфейса IClassFactory, полученный функцией CoGetClassObject(). Если необходимо создать несколько экземпляров одинаковых СОМ-объектов, вызовите функцию CoGetClassObject() непосредственно, а затем используйте функцию IClassFactory.Createlnstance().
На заметку Перед использованием любой СОМ- или API-функции необходимо инициализировать библиотеку СОМ, используя функцию CoInitialize() с единственным раметром nil. Для правильного отключения библиотеки СОМ необходимо вызвать функцию CoUninitialize() так, как ранее вызывалась библиотека OLE. Вызовы накапливаемы, т.е. каждый вызов функции Colnitialize() в приложении должен сопровождаться вызовом функции CoUninitialize(). В приложениях функция Colnitialize() вызывается автоматически из метода Application.Initialize(), а функция CoUninitialize() вызовется автоматически при завершении модуля ComObj. Эти функции необходимо вызывать из внутренней библиотеки, поскольку клиентные приложения требуют выполнения процесса инициализации и деинициализации.



[Назад]    [Содержание ]    [Вперед]

  


  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017