Рассмотрим обращение программы к СОМ-серверу на примере следующей задачи. Известно, что в составе комплекта поставки системы Windows находится объект с программным именем Shell.Application. При помощи константы I IDJShel 1 Dispatch2 в ShlDisp.h объявлен GUID А4С6892С-ЗВА9-1 ld2-9DEA-00C04FB16162 интерфейса IShel 1 Di spatch2. Необходимо воспользоваться этим интерфейсом, чтобы получить размер физически установленной на компьютере оперативной памяти. В качестве упражнения можно выполнить поиск в реестре строки ShelL.Application и узнать GUID, название и размещение DLL-библиотеки, являющейся СОМ-сервером объекта ShelLApplication.
В состав интерфейса входит метод GetSystemInformation(BSTR, ^VARIANT), которому надо первым параметром передать строку типа BSTR с названием требуемых данных, а вторым параметром - указатель на структуру типа VARIANT, в которую метод занесет результат. Значение типа BSTR содержит строку UNICODE в стиле Паскаля. Вместо терминального нуля значение хранит количество символов в первом слове строки. Для запроса размера памяти надо передать строку Physi cal Memory Instal led типа BSTR. Объявление типа VARIANT, содержащее около сеХарактеристика СОМ-объектов мидесяти строк текста, находится в файле oaidl.h и состоит из последовательности вложенных структур и объединений. Несмотря на громоздкий синтаксис, пользоваться структурой легко. В поле vt будет записан тип возвращаемого значения, из поля 11 Val результат читается. Если получено 64-битное число, то из размещенного в тех же байтах памяти поля 1 Val читаются данные типа LONG, из поля f 1 tVal читаются вещественные данные и так далее. Тип VARIANT широко используется в СОМ-технологии, поэтому разработчик, конечно же, должен уметь его применять.
Краснодарский тамань старотиторовка купить дом. Купить дом в тамани у моря недорого. заказать сайт на тильде.
Для получения данных о размере памяти нужно объявить указатель на требуемый интерфейс объекта, то есть на абстрактный класс: IShellDispatch2* pShell - NULL; В программе невозможно объявить переменную абстрактного класса, но указатель на абстрактный объект объявить можно.