Сущность технологии СОМ. Библиотека программиста   ::   Бокс Дональд

Страница: 73 из 528

IDL поддерживает структуры, объединения, массивы, перечисления, а также определения типа (typedef) – с синтаксисом, идентичным их аналогам в С.

Определяя методы СОМ в IDL, необходимо четко указать, кто – вызывающий или вызываемый объект – будет записывать или читать каждый параметр метода. Это выполняется с помощью атрибутов параметра [in] и [out] :

void Method1([in] long arg1, [out] long *parg2, [in, out] long *parg3);

Для этого фрагмента IDL предполагается, что вызывающий объект передаст значение в объект arg1 и по адресу, содержащемуся в указателе parg3 . По завершении возвращаемые значения будут получены вызывающим объектом по адресам, указанным в parg2 и parg3 . Это означает, что для последовательности вызовов:

long arg2 = 20, arg3 = 30;

p->Method1(10, &arg2, &arg3);

объект не может полагаться на получение передаваемого значения 20 через parg2 . Если объект запускается в том же контексте выполнения, что и вызывающий объект, и оба участника вызова реализованы на C++, то *parg2 действительно будет иметь на входе метода значение 20 . Однако если объект вызывается из другого контекста выполнения или один из участников вызова реализован на языке, который сводит на нет оптимизацию начальных значений чисто выходных ( out-only ) параметров, то инициализация параметра вызывающим объектом будет утеряна.



Методы и их результаты



Результаты методов – это одна из сторон СОМ, где логический и физический миры расходятся. В сущности, все методы СОМ физически возвращают номер ошибки с типом НRESULT .

|< Пред. 71 72 73 74 75 След. >|

Java книги

Контакты: [email protected]