|
|||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||
|
Побудова
ключів
При
програмуванні в .NET ключі (відкритий
і закритий) зазвичай створюються
утилітою sn.exe, що входить в .NET SDK
(скорочення «sn» означає «Strong name», тобто «сильне
ім'я»). Ключі зберігаються
в двійкових файлах. Команда
побудови ключів має наступний
синтаксис: sn -k <імя_файла> Файлам має
бути привласнене розширення .snk. У
нашому прикладі пари ключів була
створена командою sn -k c:\keys\pair.snk
За наявності пари ключів
у вигляді файлу .snk можна сертифікувати збірку
закритим ключем. При
цьому .NET включає відкритий ключ
в маніфест збірки [ Точніше кажучи, в
маніфест включається хешированная версія
ключа, яка в .NET
називається зразком (token) відкритого ключа.
Ймовірно, хешування застосовується
для економії місця,
хоча нам здається, що в
маніфесті слід було б просто опублікувати
відкритий ключ. ] і обчислює
хэш-код всіх даних збірки
по закритому ключу. Результат
теж включається в маніфест.
За цими даними інші складки,
що використовують ваш код,
зможуть переконатися в тому, що збірка
не піддалася сторонньому
втручанню. Для цього відкритий
ключ застосовується до зашифрованого
хэш-коду, а результат порівнюється
з приведеним в маніфесті. Щоб
сертифікувати збірку, включите в
програму атрибут Assemblykeyfile-attribute з
ім'ям файлу .snk після всіх команд
імпортування або ж
скористайтеся вкладкою Sharing
діалогового вікна Project Settings. Приклад: Imports System.Reflection <Assembly:assemblykeyfi1eattribute("c:\keys\pai r. snk")>
\
COM Interop і виклики
функцій DLL
Не дивлячись на
появу .NET, існуючий код на
базі СОМ ще не збирається вмирати.
На щастя, рівень взаємодії з
СОМ в .NET працює дуже добре. З
іншого боку, використання СОМ в
проектах .NET знижує швидкодію
і утрудняє супровід
програм, тому ці технології
об'єднуються лише при крайній
необхідності. У Visual Studio .NET взаємодія
з СОМ майже не вимагає
зусиль з боку програміста.
Просто виберіть потрібний
об'єкт СОМ на вкладці СОМ діалогового
вікна посилань, і з ним можна
буде працювати як з класом .NET. Для
цього IDE читає бібліотеку типів
СОМ і створює для об'єкту допоміжний
клас («обгортку») .NET. Відкритими
членами цього класу є
всі відкриті члени об'єкту
СОМ. До речі, технологія
Intellisense працює і для екземплярів
цих класів.
Хоча при виклику функцій DLL
можна використовувати старий синтаксис
Declare, в .NET рекомендується використовувати
інший спосіб —
атрибут Oil Import, що дозволяє
створювати загальні точки входу.
Для цього в програмі визначається
порожня функція, співпадаюча
по сигнатурі з функцією,
що викликається. Нижче приведений
приклад використання атрибуту Dll
Import. Imports System.Drawing Imports System.Runtime.InteropServices Module
Modulel ' Імпортувати функцію CREATEDC з Win32 API <Dll Import("gdi32.dll")> Public Function CREATEDC(Byval strdhver _ As String. Byval strdevicename As String,_ Byval stroutput As String. Byval nulldevice As Integer _ ) As 'Intptr End Function Sub Main() '
Створити прямокутник Dim rctwindow As
Rectangle = New Rectangle(100, 100, 200, 200) Dim penblack As Pen
= New Perucolor.Black) penblack.Brush =
Brushes.DarkKham Dim
grfx As Graphics Dim hdc
As Intptr =
CREATEDC("DISPLAY". vbnullstring vbnullstring.
vbnullstring) grfx = Graphics.FromHdc(hdc) Do While (True) grfx.FillRectangle(penblack.Brush, rctwindow) System.Threading.Thread.Sleep(0) Loop End Sub End Module
Інша принципова відмінність атрибуту
Dll Import від ключового слова
Declare полягає в тому, що Dll
Import дозволяє краще
управляти окремими аспектами виклику.
Зокрема, при виклику функції можна
вказати конвенцію передачі
параметрів, і кодування для
передачі строкових параметрів.
|
|
|||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||