Иллюстрированный самоучитель по Architecture .NET

Явное определение интерфейса

В предыдущем разделе мы определили общедоступный управляемый класс ManagedClass, который автоматически был представлен интерфейсом модели компонентных объектов Microsoft (COM), сгенерированным со значением AutoDual (Автодуальный), заданным в атрибуте Classlnterface (ClassInterfaceType::AutoDual). Указанный дуальный интерфейс дал возможность клиенту получать доступ к классу ManagedClass. Это – удобная техника, хотя и несколько необычная, так как не существует способа задать версию для сгенерированного интерфейса, и создается только единственный интерфейс, который может быть в чем-то ограниченным.

Здесь мы рассмотрим альтернативу значению AutoDual (Автодуальный), которая позволит создавать версии интерфейсов, но потребует точного определения интерфейса в программе. Для этого мы зададим значение None (Никакой) для атрибута Classlnterface (ClassInterfaceType::None). Следующая программа демонстрирует управляемый компонент с явным образом описанными интерфейсом и глобально уникальными идентификаторами соклассов.

//SomeManagedClass.срр
fusing <mscorlib.dll>
using namespace System;
// использование пространства имен Система;
using namespace System::Runtime::InteropServices;
// использование пространства имен
// Система::Время выполнения::InteropServices;
namespace SomeManagedClass
// пространство имен SomeManagedClass
{
// Интерфейс модели компонентных объектов Microsoft (COM)
[Guid("C3894DE3-F5D6-46fe-84C7-C6DDOE801C86")]
public _gc _interface IManagedClass
// сборщик мусора – интерфейс IManagedClass
{
//public:
virtual int AddEmUp(int i, int j) = 0; // виртуальный
};
//сокласс (coclass)
[Guad("8D48DE87-048E-466e-95C3-06F3C21FCEAA"),
Classlnterface(ClassInterfaceType::None)]
p die _gc class ManagedClass: public IManagedClass
{
public:
ManagedClass () // общедоступный заданный
//по умолчанию конструктор
{
}
int AddEmUp(int i, int ])
{
return i + ];
}
};
}

Следующий код (который является программой на неуправляемом C++, созданной в Visual C++ 6.0) представляет собой клиент на основе модели компонентных объектов Microsoft (COM), который работает с описанным выше управляемым компонентом. И снова глобально уникальные идентификаторы жестко запрограммированы, а не генерируются оператором импорта библиотеки типов. Таким образом, в этом примере мы не используем утилиту Tlsexp.exe для генерации библиотеки типов.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.