Раннее связывание клиента на основе модели компонентных объектов Microsoft (COM) с компонентами .NET
Ранне-связанные клиенты на основе модели компонентных объектов Microsoft (СОМ) могут использовать данный файл SomeManagedClass.tlb во время компиляции Например, следующая консольная клиентская программа Win32 на основе модели компонентных объектов Microsoft (COM) с именем COMClientOfManagedClass (которая была создана с помощью VC++ 6.0 для имитации существующего клиента на основе модели компонентных объектов Microsoft (COM)) использует раннее связывание для вызова компонентов .NET в ранее описанной сборке SomeManagedClass.dll.
//COMClientOfManagedClass.cpp ttinclude <iostream h> #include <objbase.h> Iimport "C \WINNT\Microsoft NET\Framework\vl.0.2914\ mscorlib.tlb" ttimport "..\SomeManagedClass\Debug\SomeManagedClass.tlb" no_namespace named_guids void main() { { // вложенные фигурные скобки предотвращают // исключение указателя (pointer exception)' CoInitialize(NULL); // ПУСТОЙ УКАЗАТЕЛЬ _ManagedClassPtr psc(CLSID_ManagedClass); int i = psc › AddEmUp(3, 4); cout << i << endl << flush; } CoUninitialize (); }
Однако компоненты .NET будут недоступны для приложений клиентов, построенных на основе модели компонентных объектов Microsoft (COM), пока требуемые элементы не будут внесены в системный реестр и сборка не станет доступной для загрузчика классов общеязыковой среды выполнения CLR (либо локально, либо в глобальном кэше сборки) Для регистрации используется утилита регистрации сборки Regasm.exe (Assembly Registration Utility). Она читает метаданные в сборке компонентов .NET и создает соответствующие записи в системном реестре. Это позволяет любому клиенту на основе модели компонентных объектов Microsoft (COM) получать доступ к компонентам .NET так, как будто это обычные компоненты, построенные на основе модели компонентных объектов Microsoft (COM).
Например, для регистрации вышеуказанного компонента .NET как компонента на основе модели компонентных объектов Microsoft (COM) используйте следующую команду:
Regasm SomeMenagedClass.dll
Затем можно использовать утилиту Regedt32.exe для проверки того, что информация была корректно занесена в системный реестр, что и показано на рис. 15.5.
Как только закончена регистрация сборки SomeManagedClass.dll в качестве компонента на основе модели компонентных объектов Microsoft (COM), следует инсталлировать сборку. Можно, конечно, все выполнить, просто скопировав сборку SomeManagedClass.dll в папку клиента COMClientOfManagedClass. Сделав это, можно, наконец, выполнить клиент COMClientOfManagedClass, построенный на основе модели компонентных объектов Microsoft (COM). После запуска этого клиента, как и ожидалось, будет выведено число.
Рис. 15.5. Утилита Regedt32.exe показывает содержимое системного реестра для идентификатора класса для сборки .NET, которая была зарегистрирована как компонент, построенный на основе модели компонентных объектов Microsoft (COM)