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

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

Краткие сведения о 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; просмотров: 779. Нарушение авторских прав; Мы поможем в написании вашей работы!




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


Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...


Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...


Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Методика обучения письму и письменной речи на иностранном языке в средней школе. Различают письмо и письменную речь. Письмо – объект овладения графической и орфографической системами иностранного языка для фиксации языкового и речевого материала...

Классификация холодных блюд и закусок. Урок №2 Тема: Холодные блюда и закуски. Значение холодных блюд и закусок. Классификация холодных блюд и закусок. Кулинарная обработка продуктов...

ТЕРМОДИНАМИКА БИОЛОГИЧЕСКИХ СИСТЕМ. 1. Особенности термодинамического метода изучения биологических систем. Основные понятия термодинамики. Термодинамикой называется раздел физики...

Вопрос. Отличие деятельности человека от поведения животных главные отличия деятельности человека от активности животных сводятся к следующему: 1...

Расчет концентрации титрованных растворов с помощью поправочного коэффициента При выполнении серийных анализов ГОСТ или ведомственная инструкция обычно предусматривают применение раствора заданной концентрации или заданного титра...

Психолого-педагогическая характеристика студенческой группы   Характеристика группы составляется по 407 группе очного отделения зооинженерного факультета, бакалавриата по направлению «Биология» РГАУ-МСХА имени К...

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