Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2012, 17:29   #1
[Jank]
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 43
По умолчанию Использование dll файла.

Добрый день! Решил для себя создать программку, которая будет рассчитывать данные по формулам. Все формулы находятся в dll файле Код:
Код:
library TestLibrary;
uses
  SysUtils,
  Classes,
  Dialogs;

procedure square;
var x1,x2:real; b,a,c,D:integer;
begin
  if D<0 then
   ShowMessage('Êîðíåé íåò.');
  if D=0 then
  begin
   x1:=(-b)/(2*a);
   x2:=x1;
  end;
 if D>0 then
  begin
   x1:=((-b)+sqrt(d))/(2*a);
   x2:=((-b)-sqrt(d))/(2*a);
  end;
end;


procedure stepen;
var a,n,i:integer; ch1:string;
begin
 if n=1 then
  a:=a;
 if a=1 then
  a:=1;
 if a=0 then
  a:=0;
 if (a>1) and (n>1) then
 begin
  for i:=1 to n do
   a:=a*a;
 end;
 ch1:=inttostr(a);
end;

 

procedure fact;
var n,i,fact:integer;
begin
  if n=0 then
   fact:=1;
  if n>=1 then 
  For i:=1 to n do
   fact:=fact*i;
end;

 exports fact,
         stepen,
         square;

begin
end.
К нему обращаются программы. В эти программы вводятся данные, затем идет вывод данных в поля. Одна из программ:
Код:
unit Step;

interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

  procedure stepen; external 'formula.dll'

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var a,n:integer;
    ch1:string;
begin
a:=strtointdef(edit2.Text,0);
n:=strtointdef(edit3.Text,0);
 stepen;
Edit1.Text:=ch1;
end;

end.
Проблема заключается в том, что если убрать VAR, то будет ошибка, если оставить, ничего не будет высчитываться. Как быть, где я что неправильно написал?
[Jank] вне форума Ответить с цитированием
Старый 06.10.2012, 17:34   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

dll и exe живут в разных адресных пространствах. Из DLL вы должны экспортировать ФУНКЦИИ, которые будут вычислять в dll и возвращать в exe.
Человек_Борща вне форума Ответить с цитированием
Старый 06.10.2012, 17:37   #3
[Jank]
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 43
По умолчанию

Все разобрался, ошибка была в вызове функций.

Последний раз редактировалось [Jank]; 07.10.2012 в 16:43.
[Jank] вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
использование классов в dll xrob Общие вопросы Delphi 13 12.04.2012 19:30
Dll и её использование Ципихович Эндрю Microsoft Office Word 2 08.11.2011 19:28
Использование компонентов в DLL NoNameMan Общие вопросы Delphi 5 18.12.2010 09:54
Использование Dll xmaksimca Общие вопросы Delphi 0 16.05.2010 18:36
Использование dll Gromsky Общие вопросы C/C++ 1 10.02.2009 21:06