Раннее связывание с СОМ-компонентами

Для каждого COM-объекта создается один RCW, который:

§  устанавливает взаимнооднозначное соответствие между методами и полями классов метаданных и методами и свойствами интерфейсов, реализованных СОМ-объектов;

§  управляет счетчиком ссылок на СОМ-объект;

§  выполняет обработку ошибок (преобразуя ошибку в объект класса COMException из пространства имен System.Runtime.InteropServices.

 

Для реализации раннего связывания следует добавить пространство имен, в котором определены метаданные, сформированные утилитой tlbimp (по умолчанию это будет имя_файлаLib), а далее создать экземпляр класса и можно вызывать любые его общедоступные методы.

Например:

using System;

using System.Diagnostics;

using System.Reflection;

class MyAttr : System.Attribute{}

enum MyEnum{}

class MyBaseClass{}

class MyoDerivedClass : MyBaseClass{}

class MyStruct{}

class GetTypesApp

{          protected static string GetAssemblyName(string[] args)

            {string assemblyName;

                        if (0 == args.Length)

                        {          Process p = Process.GetCurrentProcess();

                                   assemblyName = p.ProcessName + ".exe";               }

                        else      assemblyName = args[0];

                        return assemblyName;

            }

            public static void Main(string[] args)

            {          string assemblyName = GetAssemblyName(args);

                        Console.WriteLine("Loading info for " + assemblyName);

                        Assembly a = Assembly.LoadFrom(assemblyName);

                        Type[] types = a.GetTypes();

                        foreach(Type t in types)

                        { Console.WriteLine("\nИнф. для: " + t.FullName);

                         Console.WriteLine("\tБазовый класс = " +

                                                                            t.BaseType.FullName);

                        }          }}

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100