19.11.2019, 16:56 [+3 UTC]
в нашей команде: 3 981 чел. | участники онлайн: 6 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.78 (18.11.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
16.11.2019, 20:23

Последний вопрос:
19.11.2019, 16:31
Всего: 151007

Последний ответ:
19.11.2019, 16:12
Всего: 259427

Последняя рассылка:
19.11.2019, 16:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
04.06.2010, 16:36 »
Мироненко Николай Николаевич
Спасибо Вам большое smile [вопрос № 178811, ответ № 261871]
30.05.2011, 16:54 »
lamed
Большое спасибо, Роман. Все "по полочкам". С уважением [вопрос № 183419, ответ № 267462]

РАЗДЕЛ • Pascal / Delphi / Lazarus

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Старший модератор)]

Лучшие эксперты в этом разделе

Gluck
Статус: 7-й класс
Рейтинг: 930
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 601
puporev
Статус: Профессионал
Рейтинг: 322

Перейти к консультации №:
 

Консультация онлайн # 144358
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: Кравченко Игорь Николаевич
Отправлена: 19.09.2008, 08:52
Поступило ответов: 2

Доброго времени суток уважаемые эксперты! У меня не получается запустить на выполнение што я зделал не так подскажыте.
Заранее спасибо.

Приложение:

Состояние: Консультация закрыта

Ответ # 229635 от Виктор Пырлик

Здравствуйте, Кравченко Игорь Николаевич!

Вот исправленный ваш пример.

library Project2;

uses
  SysUtils, Classes ;
function MyFunc(num1,num2,Errcode:Integer; Operation:PChar):integer;stdcall;
begin
  Result := 0;
  try
    if Operation='plus' then
        Result:=num1+num2
    else if Operation='minus' then
        Result:=num1-num2
    else if Operation='multiply' then
        Result:=num1*num2
    else if Operation='div' then
        Result:=num1 div num2
    else if Operation='mod' then
        Result:=num1 mod num2;
  except Result:=Errcode;
end;
end;

exports
MyFunc  NAME 'MathFunc';

begin
end.
*************************************************************

unit Unit2;

interface

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

type
  TForm1 = class(TForm)
    Num1Edit: TEdit;
    Num2Edit: TEdit;
    OpEdit: TEdit;
    ResultEdit: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

   function MyFunc(num1, num2, Errcode:Integer; Operation: PCHar):Integer; stdcall; external 'Project2.dll' name 'MathFunc'; 
  implementation
  {$R *.dfm}  

procedure TForm1.Button1Click(Sender: TObject);
const
    Errcode:Integer=978987;
var
    Num1, Num2, Result_:Integer;
    Operation:String;
    begin
        try
            Num1:=StrToInt(Num1Edit.Text);
            Num2:=StrToInt(Num2Edit.Text);
        except
        Num1Edit.Text:='0';
        Num2Edit.Text:='0';
        ResultEdit.Text:='Введите целые ЧИСЛА';
        exit;
    end;
    Operation:=OpEdit.Text;
    if (Operation<>'plus')and(Operation<>'minus')and(Operation<>'multiply')
       and(Operation<>'div')and(Operation<>'mod')then
    begin
        ResultEdit.Text:='Введите коректную команду';
        exit;
    end;
    Result_:=MyFunc(Num1, Num2, Errcode, PChar(Operation));
    if Result_=Errcode then
    begin
        ResultEdit.Text:='ОШИБКА';
    end
    else
    begin
        ResultEdit.Text:= IntToStr(Result_);
    end;

end;

end.

Но, рекомендую, максимально, где только возможно – обходиться числовыми параметрами, и строки использовать только в крайней необходимости.
Напрмер так:
library Project2;

uses
  SysUtils, Classes ;
function MyFunc(num1,num2,Errcode,Operation:Integer):integer;stdcall;
begin
  Result := 0;
  try
      case Operation of
        0:  Result:=num1+num2;
        1:  Result:=num1-num2;
        2:  Result:=num1*num2;
        3:  Result:=num1 div num2;
        4:  Result:=num1 mod num2;
        else Result:= 0;
      end;
  except Result:=Errcode;
end;
end;

exports
MyFunc  NAME 'MathFunc';

begin
end.
unit Unit2;

interface

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

type
  TForm1 = class(TForm)
    Num1Edit: TEdit;
    Num2Edit: TEdit;
    ResultEdit: TEdit;
    Button1: TButton;
    ComboBox1: TComboBox;   // тут храним список операций
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

  function MyFunc(num1, num2, Errcode,Operation: Integer):Integer; stdcall; external 'Project2.dll' name 'MathFunc';
  implementation


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
    Errcode:Integer=978987;
var
    Num1, Num2, Result_:Integer;
    Operation:String;
    begin
        try
            Num1:=StrToInt(Num1Edit.Text);
            Num2:=StrToInt(Num2Edit.Text);
        except
        Num1Edit.Text:='0';
        Num2Edit.Text:='0';
        ResultEdit.Text:='Введите целые ЧИСЛА';
        exit;
    end;
    Result_:=MyFunc(Num1, Num2, Errcode, ComboBox1.ItemIndex); //передаем операцию что выбрал пользователь
    if Result_=Errcode then
    begin
        ResultEdit.Text:='ОШИБКА';
    end
    else
    begin
        ResultEdit.Text:= IntToStr(Result_);
    end;

end;

end.


Консультировал: Виктор Пырлик
Дата отправки: 19.09.2008, 09:44

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 229636 от Шичко Игорь

Здравствуйте, Кравченко Игорь Николаевич!
У Вас все нормально, только почему-то потерялась ссылка на использование файла ресурсов формы.
Подправьте основной модуль как в приложении.
Кроме этого должен быть сформирован файл Project2.dll (запустить на выполнение Project2.dpr). (проверьте его наличие)
Для отладки расположить его в одном каталоге с основным модулем.

Приложение:


Консультировал: Шичко Игорь
Дата отправки: 19.09.2008, 09:50

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.15550 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.78 от 18.11.2019
Версия JS: 1.34 | Версия CSS: 3.35