Алекс Jenter - Программирование на Visual C++. Архив рассылки
- Название:Программирование на Visual C++. Архив рассылки
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алекс Jenter - Программирование на Visual C++. Архив рассылки краткое содержание
РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN, НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.
Программирование на Visual C++. Архив рассылки - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Манифест – это метаданные, включающие информацию о сборке, а именно:
• Данные о версии– версию, имя и необязательные данные.
• Список файлов– имена файлов, составляющих сборку, а также их контрольные суммы, вычисляющиеся при помощи криптографических хэш-функций во время создания сборки. Во время выполнения данные файлы проверяются по контрольным суммам, чтобы удостоверится в целостности данного файла, а так же в том, что файл не был подменён другим с таким же именем или просто его новой версией.
• Зависимости от других сборок– имена и версии сборок, которые используются данной сборкой. Во время выполнения версии сборок строго сверяются, чтобы удостовериться в том, что загружена именно нужная сборка.
• Экспортируемые типы и ресурсы.Видимость для этих объектов может быть двух типов: только для моей сборки ( internal) и для всех ( public), включая внешние запросы.
• Свойства защиты.Здесь можно выделить три типа:
• Права на запуск данной сборки.
• Некоторые возможности сборки будут недоступны, если она не лицензирована.
• Сборка должна запускаться только в том случае, если она лицензирована.
ПРИМЕЧАНИЕ
Список файлов, из которых состоит сборка, и зависимости от других сборок – это совершенно разные вещи. Сборка сама по себе может быть разбита на несколько файлов, хотя для тех, кто ее использует, она будет выглядеть как единое целое. То есть, к примеру, общие классы могут лежать в одном файле, ресурсы – в другом, специальные классы – в третьем файле и так далее. Для чего, спрашивается, это нужно? Во-первых, это нужно для гибкой загрузки распределенных приложений, так как файлы, составляющие сборку, могут загружаться по мере необходимости, а не все сразу. Во-вторых, для создания распределённых приложений, так как местоположение файлов не играет никакой роли: файлы из одной и той же сборки могут находиться где угодно: в Интернете, на сетевых дисках и так далее.
Для начала проверьте, правильно ли у вас настроены пути к Visual Studio.Net . Чтобы правильно настроить пути, вам всего лишь необходимо вызывать при загрузке (ну или как вам нравиться) файл vsvars32.bat , который расположен в директории …Microsoft Visual Studio.NET\Common7\Tools\ .
Давайте взглянем на пример который впоследствии нам предстоит скомпилировать и изучать.
• Visual Basic.NET
'File: Some.vb
'Author: Copyright (C) 2001 Dubovcev Aleksey
Imports System
Public Class App
Public Shared Sub Main()
Console.WriteLine("Hello World")
End Sub
End Class
• C#
/* File: Some.cs Author: Copyright (C) 2001 Dubovcev Aleksey */
using System;
public class Application {
public static void Main() {
Console.WriteLine("Hello World");
}
}
• Managed Visual C++
/* File: Some.cpp Author: Copyright (C) 2001 Dubovcev Aleksey */
#using
using namespace System;
void main() {
Console::WriteLine("Hello World");
}
Теперь, когда вы построили exe файл, запускайте утилиту ildasm.exe(Intermediate Language Disassembler – дизассемблер промежуточного языка) следующим образом:
ildasm.exe /adv HelloWorld.exe
Параметр командной строки /advоткроет дополнительные пункты меню, которые понадобятся нам позднее. Полную информацию о данной утилите вы сможете найти в .NET Framework Sdk.

Рис. 1
Вы должны увидеть то же самое, что и на рисунке. Древовидная структура (далее просто дерево) показывает вам сборку изнутри.
[…]
ПРИМЕЧАНИЕ
Тип по значению (Value Type) задается ключевым словом struct и отличается от класса тем, что размещается в стеке, а не в динамической памяти.
Поэкспериментируйте немного с ildasm, чтобы привыкнуть к этой программе. Не пугайтесь при виде каких ни будь непонятных данных, дальше будет еще страшнее. :)
Теперь откройте манифест (manifest) и внимательно посмотрите. Ниже я привожу содержание манифеста, полученное мной при помощи утилиты ildasm.
// Microsoft (R) .NET Framework IL Disassembler. Version 1.0.2914.16
// Copyright (C) Microsoft Corp. 1998-2001. All rights reserved.
// VTableFixup Directory:
// No data.
//Это ссылка на основную библиотеку классов .NET
.assembly extern mscorlib {
//Это хеш публичного ключа данной сборки
//он нужен для подтверждения валидности сборки
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
//Версия сборки которая использовалась при создании приложения
.ver 1:0:2411:0
}
//Описание нашей сборки
.assembly Some {
// – The following custom attribute is added automatically, do not uncomment –
// – Следующий атрибут добавлен автоматически, не убирайте комментарий
// .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool,
// bool) = ( 01 00 00 01 00 00 )
//Алгоритм по которому считается хэш
.hash algorithm 0x00008004
//Версия нашей сборки
.ver 0:0:0:0
}
//Название запускаемого файла
.module Some.exe
// MVID: {2FA89A98-AD9F-4E31-8DB1-AB1FFB64A4F4}
//Предпочтительный адрес для загрузки сборки
.imagebase 0x00400000
//Подсистема (консоль, оконное приложение, приложение времени загрузки)
.subsystem 0x00000003
//Выравнивание секций
.file alignment 512
//Зарезервированный флаг
.corflags 0x00000001
Что, вам кажется, что это полная чушь? Ошибаетесь, если в этом разобраться, что, кстати, не так уж и трудно, то вам откроется много очень полезной и порой необходимой информации. В начале вы увидите записи со словами .assembly extern, которые описывают зависимости от внешних сборок, необходимых для функционирования этой программы. А данные, идущие далее в блоке, заключённом в фигурных скобках, описывают версию и контрольную сумму сборки. Эти данные берутся из сборок при компиляции программы, что гарантирует использование именно тех сборок, которые использовались при компиляции и тестировании. Далее следует .assembly, но уже без модификатора extern. С этой директивы и начинается описание нашей с вами сборки. Как вы могли догадаться, .verописывает версию нашей сборки. Ну а .hash algorithmопределяет функцию, по которой будет вычисляться хэш, но об этом я расскажу позднее. Затем идут описания имени самого модуля, подсистемы исполнения, информация о выравнивании секций и еще некоторые данные. Полная документация по этому вопросу находится в Framework SDK. Более подробно об устройстве манифеста я расскажу далее.
ПРИМЕЧАНИЕ
На самом деле, .publickeytokenописывает не контрольную сумму файла, а является хэшем (контрольной суммой) публичного ключа автора, создавшего сборку, на которую ссылается ключ .assembly extern.
Читать дальшеИнтервал:
Закладка: