Студопедия — Краткие сведения о DLL
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Краткие сведения о DLL






DLL (англ. dynamic-link library — «библиотека динамической компоновки», «динамически подключаемая библиотека») — понятие операционных систем Microsoft Windows и IBM OS/2, динамическая библиотека, позволяющая многократное использование различными программными приложениями. K DLL относятся также элементы управления ActiveX и драйверы. Формат файлов DLL придерживается тех же соглашений, что и формат исполняемых файлов, сочетая код, таблицы и ресурсы, отличаясь лишь интерпретацией некоторых полей.

Аналогично защите основного кода программы, Sentinel HASP API позволяет защитить и DLL библиотеку. Это подразумевает под собой внедрение функций HASP API в код динамических библиотек. При этом разработчик программного обеспечения имеет возможность пользоваться всеми доступными функциями (рассмотрены в работе 2).

1. Программа, как и в лабораторной работе 2, должна проверять доступность аппаратного ключа HASP и в случае успешной проверки вычислять определенный интеграл функции на заданном интервале. Различие состоит в том, что теперь функция вычисления интеграла вынесена в отдельную DLL библиотеку и будет импортирована из нее в процессе работы. Поскольку в эту библиотеку будет устанавливаться встроенная защита, то необходимо добавить в папку с проектом вспомогательные файлы, выполнив пункт 1 задания к лабораторной работе 2.

 

2. Далее необходимо запустить программу Borland Delphi и создать новый объект DLL Wizard, File-> New-> DLL Wizard, как показано на рисунке 49.

 

Рисунок 49 – создание DLL библиотеки

 

3. После сохранения проекта, следует приступить к добавлению в программный модуль необходимых функций. В данном случае это процедура integral, которая будет в дальнейшем будет вызываться из DLL библиотеки, и функция f. Исходный код программного модуля:

library Project1;

uses

SysUtils,

Classes,

hasp_unit;

{$R *.res}

{$I hasp_vcode.inc }

function f(x, m: real): real;

begin

f: =x*x;

end;

procedure integral(a, b, e: real; n: integer; var s: real; var status: hasp_status_t);

const

SCOPE_VIEW_MAXSIZE = (1024 * 128);

var

handle: hasp_handle_t;

handle2: hasp_handle_t;

fsize: hasp_size_t;

time: hasp_time_t;

info: pchar;

feature, i: integer;

day, month, year, hour, minute, second: cardinal;

scope: Array[0..SCOPE_VIEW_MAXSIZE-1] of char;

view: Array[0..SCOPE_VIEW_MAXSIZE-1] of char;

s1, d, m, raz: real;

begin

feature: = 50;

status: = hasp_login(feature, @vendor_code[1], handle);

if status = HASP_STATUS_OK then

begin

s1: =0;

s: =200;

raz: =100;

m: =b-1;

d: =(b-a)/n;

while raz> e do

begin

for i: =0 to n do

S1: =S1+d*(F(a + I*d, m) + F(a + (I+1)*d, m))/2;

raz: =abs(s-s1);

s: =s1;

s1: =0;

n: =n*2;

d: =(b-a)/n;

end;

end;

end;

exports integral;

begin

end.

4. Необходимо обратить внимание, что экспортируется только процедура integral. Также можно увидеть в коде DLL библиотеки вызов функции hasp_login, что позволит проверить наличие подлинного ключа защиты. Теперь необходимо сформировать DLL-библиотеку, выполнив действия Project-> Build All Projects. В папке с проектом появится файл Project1.dll, который нужно скопировать в папку основной программы и переименовать в HASP_INT.dll.

5. Далее следует приступить к формированию основной программы. Интерфейс пользователя не изменился, он представлен на рисунке 48. Однако код программы теперь выглядит иначе, поскольку были вынесены необходимые математические функции в отдельную DLL-библиотеку. Содержание программного модуля unit1.pas:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, hasp_unit;

type

TForm1 = class(TForm)

Button1: TButton;

Edit1: TEdit;

Edit2: TEdit;

Memo1: TMemo;

Edit3: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit4: TEdit;

Label4: TLabel;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const

AES_MIN_DATA_LEN = 16; { минимальная длина данных для AES шифрования }

MAX_MEMORY = 128; { Макс. размер памяти, который будет обрабатываться }

CUSTOM_FEATURE = 42;

DEMO_MEMBUFFER_SIZE = 8;

SCOPE_VIEW_MAXSIZE = (1024 * 128);

var

Form1: TForm1;

a, b, s, d, e: real;

n: integer;

status: hasp_status_t;

integral: procedure(a, b, e: real; n: integer; var s: real; var status: hasp_status_t);

LibHandle: THandle;

data: array[0..16] of byte =

($74, $65, $73, $74, $20, $73, $74, $72,

$69, $6e, $67, $20, $31, $32, $33, $34, 0);

membuffer: array [0..DEMO_MEMBUFFER_SIZE] of byte;

datalen: hasp_size_t;

implementation

{$R *.dfm}

{$I hasp_vcode.inc }

procedure TForm1.FormCreate(Sender: TObject);

begin

Memo1.Clear();

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

@integral: = nil;

LibHandle: = LoadLibrary('HASP_INT.dll');

if LibHandle > = 32 then begin

@integral: = GetProcAddress(LibHandle, 'integral');

if @integral < > nil then

Memo1.Clear();

n: =100; a: =StrToFloat(Edit1.Text); b: =StrToFloat(Edit2.Text);

e: =StrToFloat(Edit4.Text); integral(a, b, e, n, s, status);

if status = HASP_STATUS_OK then begin

Memo1.Lines.Add(FloatToStr(s));

end

else if status = HASP_FEATURE_NOT_FOUND then

Showmessage('Невозможно подключиться к feature')

else if status = HASP_CONTAINER_NOT_FOUND then

Showmessage('HASP ключ с данным кодом не найден')

else if status = HASP_OLD_DRIVER then

Showmessage('Устаревшая версия драйвера аппаратного ключа защиты')

else if status = HASP_NO_DRIVER then

Showmessage('Драйвер ключа не установлен')

else if status = HASP_INV_VCODE then

Showmessage('Ошибка в коде ключа')

else

Showmessage('Подключение к feature закончилось неудачей');

end; FreeLibrary(LibHandle);

end;

end.

5. Важно обратить внимание на то, что в коде основной программы нет вызова функций Sentinel HASP API, а также присутствует механизм импорта функций из DLL библиотеки HASP_INT.dll

6. Теперь необходимо скомпилировать программу и проверить ее работоспособность при подключенном и отсутствующем ключе HASP HL. Результаты описать в выводе к отчету.

 

Контрольные вопросы

1. Объясните принцип работы DLL библиотек?

2. Какие преимущества дает использование DLL библиотек? Есть ли недостатки и если есть, то какие?

3. Опишите процесс создания динамически подключаемых библиотек в среде Borland Delphi?

4. Возможно ли использование нескольких DLL библиотек одной программой?







Дата добавления: 2014-11-12; просмотров: 745. Нарушение авторских прав; Мы поможем в написании вашей работы!



Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Билиодигестивные анастомозы Показания для наложения билиодигестивных анастомозов: 1. нарушения проходимости терминального отдела холедоха при доброкачественной патологии (стенозы и стриктуры холедоха) 2. опухоли большого дуоденального сосочка...

Сосудистый шов (ручной Карреля, механический шов). Операции при ранениях крупных сосудов 1912 г., Каррель – впервые предложил методику сосудистого шва. Сосудистый шов применяется для восстановления магистрального кровотока при лечении...

Трамадол (Маброн, Плазадол, Трамал, Трамалин) Групповая принадлежность · Наркотический анальгетик со смешанным механизмом действия, агонист опиоидных рецепторов...

Типовые ситуационные задачи. Задача 1.У больного А., 20 лет, с детства отмечается повышенное АД, уровень которого в настоящее время составляет 180-200/110-120 мм рт Задача 1.У больного А., 20 лет, с детства отмечается повышенное АД, уровень которого в настоящее время составляет 180-200/110-120 мм рт. ст. Влияние психоэмоциональных факторов отсутствует. Колебаний АД практически нет. Головной боли нет. Нормализовать...

Эндоскопическая диагностика язвенной болезни желудка, гастрита, опухоли Хронический гастрит - понятие клинико-анатомическое, характеризующееся определенными патоморфологическими изменениями слизистой оболочки желудка - неспецифическим воспалительным процессом...

Признаки классификации безопасности Можно выделить следующие признаки классификации безопасности. 1. По признаку масштабности принято различать следующие относительно самостоятельные геополитические уровни и виды безопасности. 1.1. Международная безопасность (глобальная и...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия