Architecture Net



         

Метаданные и отражение - часть 2



Программа ясно показывает, что из сборки можно извлечь все типы и восстановить структуры, интерфейсы, свойства, события и методы, связанные с этими типами. Сначала мы загружаем сборку в память и выводим ее имя.

Assembly *a = Assembly::Load(assemblyName); // Загрузка


Console::WriteLine (
"Assembly {0} found.", a->FullName);

Вывод для этого оператора соответствует неподписанной сборке:

Assembly Customer, Version=l.О.643.18973, Culture=neutral,
PublicKeyToken=null found.

CodeBase — одно из свойств класса Assembly; оно обсуждалось в главе 7 "Сборки и развертывание". Подтверждение защиты, связанное с этой сборкой, — это еще одно свойство. Следующий код пробует определить точку входа сборки:

Methodlnfo *entryMethod!nfo = a->EntryPoint;

Так как это типичный написанный на C++ компонент сборки, то его точка входа — _DllMainCRTStartup@12. Если бы он был исполняемой программой, мы могли бы использовать метод Invoke (Вызвать) класса Methodlnfo, чтобы выполнить код инициализации сборки.
В данном примере для поиска связанных с этой сборкой модулей используется метод GetModules сборки. В данном случае мы имеем только один модуль, customer.dll. Затем мы могли бы найти типы, связанные с этим модулем. Вместо этого мы используем метод GetTypes сборки, чтобы возвратить массив типов сборки.

CompEbook.ru Железо, дизайн, обучение и другие




Содержание  Назад  Вперед