Алекс Jenter - Программирование на Visual C++. Архив рассылки

Здесь есть возможность читать онлайн «Алекс Jenter - Программирование на Visual C++. Архив рассылки» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Программирование на Visual C++. Архив рассылки: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Программирование на Visual C++. Архив рассылки»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ
, НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.

Программирование на Visual C++. Архив рассылки — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Программирование на Visual C++. Архив рассылки», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

// Создаем описание параметров

Type[] paramTypes = new Type[] {

typeof(double), Type.GetType("System.Boolean&"), Type.GetType("System.Boolean&")

};

// DefineMethod завершает работу по созданию описания метода

return itf.DefineMethod("Add", attrs, resultType, paramTypes);

}

// Задает имя параметров и их последовательность

static void DefineAddParameters(MethodBuilder method) {

// 1-й и 2-й параметры не нуждаются в специальных атрибутах

method.DefineParameter(1, ParameterAttributes.None, "n");

method.DefineParameter(2, ParameterAttributes.None, "round");

// Параметру 3 нужно задать флаг

Out ParameterBuilder pb = method.DefineParameter(3, ParameterAttributes.Out, "overflow");

// 3-му параметру также необходимо задать атрибут

Interop.Out AddInteropOutAttribute(pb);

}

// Задает атрибут Interop.Out для параметра

static void AddInteropOutAttribute(ParameterBuilder param) {

// Конструкторы идентифицируют пользовательские атрибуты

Type attrtype = typeof(System.Runtime.InteropServices.OutAttribute);

ConstructorInfo outattrctor = attrtype.GetConstructors()[0];

// CustomAttributeBuilder сериализует аргументы конструктора

CustomAttributeBuilder outattr = new CustomAttributeBuilder(outattrctor, new object[0]);

// Всю работу выполняет SetCustomAttribute

param.SetCustomAttribute(outattr);

}

}

Определение типа, сгенерированное этой программой, неотличимо от производимого компилятором C# (Visual Basic, C++, Perl, Python, или любого другого совместимого с CLR).

Метаданные обязательны. В com можно было определить на C++ частные интерфейсы, не описывая их в IDL или библиотеке типов. Это позволяло создать недокументированную лазейку в свой объект. В CLR это сделать не удастся.

В CLR все типы должны быть документированы через информацию о типах, включая private-типы (скрытых типов), не рассчитанные на внешнее использование. Для поддержки скрытых типов компонента метаданные CLR позволяют пометить типы (и их отдельные члены) как доступные только изнутри описываемой сборки. Например, следующий интерфейс виден только из сборки, в которой он определен:

internal interface IBob {

void hibob();

}

Напротив, следующий интерфейс виден любой сборке:

public interface IBob {

void hibob();

}

Метаданные полностью расширяемы. Информацию о типах com можно было расширить за счет пользовательских атрибутов. На практике это можно было сделать только через IDL, или прямой модификацией TLB. Пользовательские атрибуты в COM ассоциировали пару GUID/VARIANT с библиотекой, интерфейсом, CoClass-ом, методом, параметром, структурой или полем. Увы, VB и многие другие средства разработки не предоставляли путей задания или чтения пользовательских атрибутов, так что эта возможность бесполезна для большинства COM-разработчиков.

Информация о типах CLR расширяема из любого языка. Пользовательские атрибуты в CLR – это просто сериализованные вызовы конструктора. Разные языки имеют разный синтаксис для применения атрибутов. В C# можно просто вставить вызов конструктора в скобках, перед каким либо определением:

[ Color("Red") ]

class MyClass {}

В Visual Basic.NET можно вставить вызов конструктора в <>:

Class

MyClass

End Class

В любом случае метаданные будут указывать, что цвет MyClass – красный.

Чтобы определить новые пользовательские атрибуты, следует создать новый класс, унаследовав его от System.Attribute, и реализовать в этом классе public-конструктор:

using System;

[ AttributeUsage(AttributeTargets.All) ]

public class ColorAttribute : Attribute {

public String color;

public ColorAttribute(string c) { color = c;}

}

Атрибут AttributeUsage говорит, к чему будет применим новый атрибут – к классу, методу, свойству и т.п. Если класс атрибута заканчивается на Attribute, то атрибут можно будет использовать с или без этого суффикса. Например, следующие два примера идентичны, хотя последний и реже используется:

[ Color("Red") ]

class MyClass {}

[ ColorAttribute("Red") ]

class MyClass {}

Пользовательские атрибуты доступны в runtime через reflection-механизм. Код, приведенный выше, определяет, какой цвет присвоен данному классу и присвоен ли он вообще:

using System;

String GetColor(Object o) {

Type t = o.GetType();

// Получаем тип объекта

// Получаем тип необходимого атрибута

Type at = typeof(ColorAttribute);

// Получаем все атрибуты этого типа

Attribute[] rga = t.GetCustomAttributes(at);

// Выходим, если атрибуты не заданы

if (rga.Length == 0) return null;

// Иначе извлекаем первый атрибут

ColorAttribute color = (ColorAttribute)rga[0];

return color.color;

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Программирование на Visual C++. Архив рассылки»

Представляем Вашему вниманию похожие книги на «Программирование на Visual C++. Архив рассылки» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Алексей Макеев - Смертельный архив
Алексей Макеев
libcat.ru: книга без обложки
Алексей Апухтин
Отзывы о книге «Программирование на Visual C++. Архив рассылки»

Обсуждение, отзывы о книге «Программирование на Visual C++. Архив рассылки» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x