Вопрос № 144358: Доброго времени суток уважаемые эксперты! У меня не получается запустить на выполнение што я зделал не так подскажыте. Заранее спасибо....
Вопрос № 144.358
Доброго времени суток уважаемые эксперты! У меня не получается запустить на выполнение што я зделал не так подскажыте. Заранее спасибо.
Отвечает: Виктор Пырлик
Здравствуйте, Кравченко Игорь Николаевич!
Вот исправленный ваш пример.
Код:
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. ***************
**********************************************
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 N
um1:=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;
type TForm
1 = 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.
--------- Процесс обучения – cp -rfv /* /home/ - это рекурсия..:)
Ответ отправил: Виктор Пырлик (статус: Профессионал) Россия, Екатеринбург Тел.: 89043822027 ICQ: 490191733 ---- Ответ отправлен: 19.09.2008, 09:44
Отвечает: Шичко Игорь
Здравствуйте, Кравченко Игорь Николаевич! У Вас все нормально, только почему-то потерялась ссылка на использование файла ресурсов формы. Подправьте основной модуль как в приложении. Кроме этого должен быть сформирован файл Project2.dll (запустить на выполнение Project2.dpr). (проверьте его наличие) Для отладки расположить его в одном каталоге с основным модулем.
Приложение:
Ответ отправил: Шичко Игорь (статус: 4-ый класс)
Ответ отправлен: 19.09.2008, 09:50