|
Вопрос # 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.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|