| 
| 
 | Вопрос # 127/ вопрос открыт / | 
 |  Думаю вы мне поможете. Так вот, начал я писать программку на delphi и решил прикрепить к ней DLL-ку (т.к. будет очень много повторяющихся процедур, а размещать их в exe-шнике не хочеться). Мои процедуры будут работать с компонентами на форме - допустим a:= StrToInt(edit1.text) + StrToInt(edit2.text); label1.caption:=IntToStr(a);
 но у меня нечего не получаеться.... общие принцыпы создания и вызова библиотеки я знаю..... но похоже что не всё. Помогите мне пожайлусто!
 
|  |   Вопрос задал: Друщенко Денис Юрьевич (статус: Посетитель)Вопрос отправлен: 6 октября 2006, 19:25
 Состояние вопроса: открыт, ответов: 3.
 |  Ответ #1. Отвечает эксперт: Вадим К Вы наверное не совсем представляете для чего нужны dll. Туда нужно выносить процедуры и функции, которые не зависят от компонентов на форме. Иначе теряется всё прелесть dll. Работать с dll с компонентами формы можно, но подводных камней там стоко, что необерёшся. 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 6 октября 2006, 20:01
 Оценка за ответ: 4
 Комментарий к оценке: спасибо! думаю тогда я буду помещать эти процедуры в exe-шнике  |  Ответ #2. Отвечает эксперт: ANBsoft Есть некоторые тонкости при передаче в DLL данных типа String.Сейчас все не помню (давно с этим сталкивался), но там приходилось использовать борландовскую библиотеку borlndmm.dll (на компьютерах где не установлен Делфи), а в раздел USES добавить Sharemem.
 Приведу кусок своего:
 uses
 ShareMem, SysUtils, Windows, Classes;
 Если не использовать длинные строки - этих проблем нет.
 
|  | Ответ отправил: ANBsoft (статус: Студент)Время отправки: 7 октября 2006, 18:46
 Оценка за ответ: 4
 Комментарий к оценке: Спасибо! |  Ответ #3. Отвечает эксперт: Alex Van Glukhman Здравствуйте, Друщенко Денис Юрьевич!
 Хочется ответить экспертам ответившим на данный вопрос - DLL может  хранить кроме исполняемого кода различного рода рессурсы в том числе и саму форму приложения. Тип переменных и констант не ограничен - такой же раздел uses с подключаемыми модулями.
 Теперь отвечаю своим собственным примером.
 1.Создаём библиотеку DLL
 - File->New->Other->DLL Wizard
 Удаляем весь код и пишем:
 library MyLib;
 uses
 SysUtils,
 Classes, StdCtrls  ;
 {$R *.res}
 function CalcSum(a, b: TEdit): Integer;
 begin
 Result:=StrToInt(a.Text)+StrToInt(b.Text);
 end;
 exports
 CalcSum;
 end.
 Компилируем и строим - DLL готов
 2.Далее создаём проект с формой кидаем Label1: TLabel; Edit1, Edit2: TEdit; Button1: TButton;
 К проекту подключаем библиотеку DLL Project->Add To Project - указываем путь к библиотеке.
 
 Вот код модуля формы:
 
 unit Unit2;
 
 interface
 
 uses
 Windows, Messages, SysUtils, Variants,
 Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;
 type
 TForm2 = class(TForm)
 Button1: TButton;
 Label1: TLabel;
 Edit1: TEdit;
 Edit2: TEdit;
 procedure Button1Click(Sender: TObject);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
 function CalcSum(a,b: TEdit): Integer;
 
 var
 Form2: TForm2;
 
 implementation
 
 {$R *.dfm}
 function CalcSum; external 'MyLib';
 
 procedure TForm2.Button1Click(Sender: TObject);
 begin
 Label1.Caption:=IntToStr(CalcSum(Edit1,Edit2));
 end;
 
 end.
 
 Всё работает без каких то глюков со строками и т.д
 Удачи
 
|  | Ответ отправил: Alex Van Glukhman (статус: 7-ой класс)Время отправки: 11 октября 2006, 14:33
 Оценка за ответ: 5
 Комментарий к оценке: огромное спасибо! это то что я хотел увидеть! |  
 Мини-форум вопросаВсего сообщений: 1; последнее сообщение — 8 октября 2006, 16:11; участников в обсуждении: 1. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |