Создание с помощью управляемого C++ клиента на основе модели компонентных объектов Microsoft (COM) без метаданных
Ниже описан еще один способ вызова существующего компонента, построенного на основе модели компонентных объектов Microsoft (COM), из программы на управляемом C++. В этом способе не нужно создавать сборку упаковщика с помощью Tlbimp.exe. Вместо использования Tlbimp.exe для создания сборки LegacyCOMObj, среда во время выполнения создает интерфейсный класс непосредственно из зарегистрированной библиотеки типов компонента, построенного на основе модели компонентных объектов Microsoft (COM).
Заметим, что в этой версии клиента на управляемом C++ для действующего компонента на основе модели компонентных объектов Microsoft (COM) директива fusing для доступа к сборке LEGACYCOMSERVERLib.dll уже не нужна.
//ManagedCOMClientWithoutMetadata.cpp fusing <mscorlib.dll> using namespace System; // использование пространства имен Система; using namespace Reflection; // использование пространства имен Reflection (Отражение); void main() { Object *args[] = {_box(3), _box (4)}; _box int *sum; Type *type = Type::GetTypeFromProgID( "LegacyCOMServer.LegacyCOMObj.1"); Object *object = Activator::CreateInstance(type); // Объект *object = Активатор:: Createlnstance (тип); sum = static_cast<_box int *>(type › InvokeMember(// сумма "AddEmUp", // метод, который будет вызван BindingFlags::InvokeMethod, // флажки редактора связей О, // объект редактора object, // целевой объект args // массив параметров )); Console::WriteLine(sum); // сумма }
Если вы запустите эту программу, то увидите выдачу, которая ничем не отличается от выдачи предыдущих трех программ клиентов, основанных на модели компонентных объектов Microsoft (COM). Единственное отличие заключается в том, что в данном случае нет необходимости создавать сборку упаковщика, а потому и нет необходимости инсталлировать ее на клиентской машине (что, если подумать хорошенько, – весьма неплохо).