Дайте элементарный пример создания Dll

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Всем привет! Вот я сижу и репу чешу, делаю я несколько программ но в них есть пачка одинаковых функций которые я повторяю из одной в другую, и тут до меня допрело, а может dll сделать и цепляеть ее к программам? да и потом можно будет править код в dll не разбирая саму прогу. Дайте простейший пример создания и подключения к проге dll'ку а в длл-ке пусть будет например сложение двух чисел. Ну что-то в этом духе
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Так как складывать числа - это неинтересно, приведу пример с программой всех времен и народов - Hello, World!
Итак, создаем новый проект. Это будет наша ДЛЛ-ка. Назовем ее, скажем, hello.dll. Причем открываем не тот файл, который pas, а тот, который совсем даже dpr! Там в данный момент скорее всего написано:

Код: Выделить всё

 program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};
ну и так далее. Удаляем оттуда все это дело и пишем следующее:

Код: Выделить всё

Library Hello; //Library - дает понять компилятору, что мы вроде как ДЛЛ-ку пишем
uses
  Dialogs;

procedure helloworld;//а это и будет та самая наша мегапроцедура.
  begin showmessage('Hello, World!'); end;

  exports //в этом разделе описывается, какие процедуры и функции экспортируются из 
     //этой библиотеки, т.е. какие из них можно будет использовать в программах
  helloworld index 1 name 'helloworld'; {здесь мы сообщаем, что под нумером 1 мы выставляем на публичное юзание процедуру helloworld, и что называться она будет ровно так же. Можно, конечно, выбрать и другое имя, но зачем это нам? Кстати, если экспортируются несколько функций или процедур, они перечисляются через запятую}
begin
end.
После этого компилируешь. У тебя должен родиться файлик hello.dll. Теперь делаем другой проект, в котором мы будем юзать нашу процедуру. Быстренько ляпаем на формочку кнопочку, а в коде модуля пишем:

Код: Выделить всё

 procedure helloworld;external 'hello.dll'; 
, таким образом, мы говорим, что в программе будет использоваться внешняя (external) функция helloworld из библиотеки hello.dll. Ну, и последний штрих - вешаем на нажатие кнопки следующий обработчик:

Код: Выделить всё

procedure TForm1.Button1Click(Sender: TObject);
begin
  helloworld;
end;
Теперь по нажатию кнопки ваша программа будет радостно приветствовать весь мир!
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Хыиуду Спасибо, но у меня выскакивает ошибка когда пытаюсь заюзать библиотеку т.е.
procedure helloworld;external 'hello.dll';
вот тут компилятор говорит: Field definition not allowed after methods or properties. Что тут не так? И еще все таки хотелось бы сделать чтоб программа закидивала какие-то данные в библиотеку, та чаго-нить с ними сделала и выдала в программу результат. Это возможно осуществить?
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Просто у меня много интересных разработанных алгоритмов, которые можно использовать почти в любой проге, дак вот и хотелось бы все это в библиотеку запихнуть
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

обычно такая ошибка возникает, если в классе после обявления процедуры/функции попытаться объявить переменную... Сдаётся мне ты пытаешься указанную строку прописать в объявлении класса, а этого делать не надо:

Код: Выделить всё

...
TForm1 = class(TForm)
...
end;

procedure helloworld и так далее
Изображение
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Так точно :wink: я ща переделал и все заработало :)
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Ну вот я и сделал эту самую функцию сложения в библиотеке :) Спасибо всем!
Ответить