Дайте элементарный пример создания Dll
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 50
- Зарегистрирован: 09 мар 2005, 13:57
- Контактная информация:
Всем привет! Вот я сижу и репу чешу, делаю я несколько программ но в них есть пачка одинаковых функций которые я повторяю из одной в другую, и тут до меня допрело, а может dll сделать и цепляеть ее к программам? да и потом можно будет править код в dll не разбирая саму прогу. Дайте простейший пример создания и подключения к проге dll'ку а в длл-ке пусть будет например сложение двух чисел. Ну что-то в этом духе
Так как складывать числа - это неинтересно, приведу пример с программой всех времен и народов - Hello, World!
Итак, создаем новый проект. Это будет наша ДЛЛ-ка. Назовем ее, скажем, hello.dll. Причем открываем не тот файл, который pas, а тот, который совсем даже dpr! Там в данный момент скорее всего написано:
ну и так далее. Удаляем оттуда все это дело и пишем следующее:
После этого компилируешь. У тебя должен родиться файлик hello.dll. Теперь делаем другой проект, в котором мы будем юзать нашу процедуру. Быстренько ляпаем на формочку кнопочку, а в коде модуля пишем:
, таким образом, мы говорим, что в программе будет использоваться внешняя (external) функция helloworld из библиотеки hello.dll. Ну, и последний штрих - вешаем на нажатие кнопки следующий обработчик:
Теперь по нажатию кнопки ваша программа будет радостно приветствовать весь мир!
Итак, создаем новый проект. Это будет наша ДЛЛ-ка. Назовем ее, скажем, 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.
Код: Выделить всё
procedure helloworld;external 'hello.dll';
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
helloworld;
end;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
-
- Сообщения: 50
- Зарегистрирован: 09 мар 2005, 13:57
- Контактная информация:
Хыиуду Спасибо, но у меня выскакивает ошибка когда пытаюсь заюзать библиотеку т.е.
вот тут компилятор говорит: Field definition not allowed after methods or properties. Что тут не так? И еще все таки хотелось бы сделать чтоб программа закидивала какие-то данные в библиотеку, та чаго-нить с ними сделала и выдала в программу результат. Это возможно осуществить?procedure helloworld;external 'hello.dll';
-
- Сообщения: 50
- Зарегистрирован: 09 мар 2005, 13:57
- Контактная информация:
Просто у меня много интересных разработанных алгоритмов, которые можно использовать почти в любой проге, дак вот и хотелось бы все это в библиотеку запихнуть
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
обычно такая ошибка возникает, если в классе после обявления процедуры/функции попытаться объявить переменную... Сдаётся мне ты пытаешься указанную строку прописать в объявлении класса, а этого делать не надо:
Код: Выделить всё
...
TForm1 = class(TForm)
...
end;
procedure helloworld и так далее

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

-
- Сообщения: 50
- Зарегистрирован: 09 мар 2005, 13:57
- Контактная информация:
Ну вот я и сделал эту самую функцию сложения в библиотеке
Спасибо всем!
