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

Создание клиента на основе модели компонентных объектов Microsoft (COM) с помощью управляемого C++

Перед тем, как двинуться дальше и приступить к разработке программы на управляемом C++, которая сможет выступать в роли клиента для имеющегося компонента, построенного на основе модели компонентных объектов Microsoft (COM), мы создадим сборку LEGACYCOMSERVERLib.dll, применив утилиту Tlbimp.exe к файлу LegacyCOMSErver.tlb. Мы уже делали подобное раньше, однако здесь для удобства повторим описание всех необходимых действий.

Заметим, что утилиту Tlbimp.exe можно применить к файлу TLB или к динамически подключаемой библиотеке (DLL), содержащей компоненты, построенные на основе модели компонентных объектов Microsoft (СОМ). В предлагаемой программе ManagedCOMClient.срр предполагается, что она выполняется в той же папке, в которой находится файл LECACYCOMSERVERLib.dll (для того, чтобы не менять оператор fusing в клиентской программе), Tlbimp LegacyCOMServer.dll.

После этого требуется создать сборку, пригодную для загрузчика классов общеязыковой среды выполнения CLR (т.е. сборку необходимо инсталлировать). Одним из способов инсталляции компонента .NET является его копирование в папку клиентской программы. Это известно как "локальная инсталляция". Но сначала мы должны создать клиентскую программу ManagedCOMClient на управляемом C++, которая использует наш компонент, построенный на основе модели компонентных объектов Microsoft (COM). Текст этой программы приведен ниже:

//ManagedCOMClient.срр
#using <mscorlib.dll>
using namespace System;
// использование пространства имен Система;
#using <..\LegacyCOMServer\LEGACYCOMSERVERLib.dll>
using namespace LEGACYCOMSERVERLib;
// использование пространства имен
LEGACYCOMSERVERLib; // имя библиотеки в языке описания интерфейса (IDL)
void main()
{
ILegacyCOMObj *plco;
// от названия интерфейса в языке описания интерфейса (IDL)
plco = new LegacyCOMObj;
// от названия сокласса (coclass) в языке
// описания интерфейса (IDL)
int sum = plco › AddEmUp(3, 4); // суммируем
Console::WriteLine(sum); // сумма
}

Перед запуском этой программы нужно убедиться, что сборка LEGACYCOMSERVERLib.dll скопирована в папку с выполняемой программой. В противном случае общеязыковая среда выполнения CLR сгенерирует исключение System.10.FileNotFoundException при попытке загрузки интерфейса ILegacyCOMObj из сборки, которую ей найти не удастся. Выдача этого клиентского приложения, разработанного на основе модели компонентных объектов Microsoft (COM) с помощью управляемого C++, в точности совпадает с выдачей клиента, разработанного на основе модели компонентных объектов Microsoft (COM) в предыдущем разделе.

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