Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.24;
Скачать: CL | DM;

Вниз

вызов из DLL   Найти похожие ветки 

 
olookin ©   (2003-07-10 16:50) [0]

Не могу вызвать процедуру из ДЛЛ

Код вызова:

unit Unit1;

interface

uses ShareMem, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type TDoubleArray = array of double;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure SortArray(var ValueArray: TDoubleArray; SortType: integer); external "D:\Program Files\Borland\Delphi5\Projects\EqapMath\EqapMath.dll";
function PosInArray(ValueArray: TDoubleArray; Value: double; GetProximal: boolean): integer; external "D:\Program Files\Borland\Delphi5\Projects\EqapMath\EqapMath.dll";

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var rv: TDoublearray;
i,n: integer;
begin
setlength(rv,11);
randomize;
for i:=0 to 10 do rv[i]:=random(100);
n:=PosInArray(rv,7,true);
end;

end.


Код из библиотеки:

function PosInArray(ValueArray: TDoubleArray; Value: double;
GetProximal: boolean): integer; stdcall;
var i,p: integer;
d: double;
srv: TDoubleArray;
begin
if ValueArray=nil then PosInArray:=0 else
if (Value>=MinValue(ValueArray)) and (Value<=MaxValue(ValueArray)) then begin
if GetProximal=false then for i:=0 to Length(ValueArray)-1 do
if ValueArray[i]=Value then begin p:=i; break; end;
if GetProximal then begin SetLength(srv,Length(ValueArray));
for i:=0 to Length(ValueArray)-1 do srv[i]:=Abs(ValueArray[i]-Value);
ValueInArray(srv,0,Length(srv),"min",p); end; PosInArray:=p; end else
PosInArray:=Length(ValueArray)-1; srv:=nil;
end;

Почему не работает?


 
Poirot ©   (2003-07-10 16:52) [1]

stdcall при вызове поставь


 
Poirot ©   (2003-07-10 16:53) [2]

да и сами объявления в имплементатион убери... это же фактически реализация функции!


 
panov ©   (2003-07-10 17:08) [3]

Что значит - не могу вызвать?


 
olookin ©   (2003-07-10 17:16) [4]

Код

procedure SortArray(var ValueArray: TDoubleArray; SortType: integer); register;
var i,j,n,len: integer;
m: double;
begin
rv:=Copy(ValueArray,0,Length(ValueArray)); n:=0; len:=Length(rv)-1;
for i:=0 to Length(rv)-1 do begin m:=MinValue(rv);
for j:=0 to Length(rv)-1 do if rv[j]=m then begin
case SortType of 1: ValueArray[n]:=rv[j];
2: ValueArray[len-n]:=rv[j]; end;
Inc(n); rv[j]:=MaxValue(rv); break; end; end; rv:=nil;
end;


 
olookin ©   (2003-07-10 17:17) [5]

to Poirot - не понял, откуда убрать?


 
panov ©   (2003-07-10 17:19) [6]

И все же...


 
Poirot ©   (2003-07-10 17:19) [7]

У тебя в интерфейсе... я неуверен что это правильно! stdcall
так надо!!!

implementation

procedure SortArray(var ValueArray: TDoubleArray; SortType: integer); external "D:\Program files\Borland\Delphi5\Projects\EqapMath\EqapMath.dll"; stdcall;
function PosInArray(ValueArray: TDoubleArray; Value: double; GetProximal: boolean): integer; external "D:\Program Files\Borland\Delphi5\Projects\EqapMath\EqapMath.dll"; stdcall;


 
olookin ©   (2003-07-10 17:26) [8]

to Poirot - результат такой же даже когда помещено в implementation

to panov - не могу без ошибки вызвать процедуру из библиотеки...


 
panov ©   (2003-07-10 17:29) [9]

Блин... ну так что же за ошибка и в каком месте происходит?


 
olookin ©   (2003-07-10 17:31) [10]

to panov - сейчас ошибка такая - вызов происходит внешне нормально и делается что надо... А при закрытии программы возникает Invalid pointer operation


 
Skier ©   (2003-07-10 17:31) [11]

>olookin
1) Модуль ShareMem должен быть первым в списке uses
и в host-приложении и в DLL
2) Проверь соглашения о передаче параметров процедуры SortArray
и в host-приложении и в DLL должно быть одно и то же


 
olookin ©   (2003-07-10 17:37) [12]

to Skier - все уже сделал так как ты говоришь - все равно ошибка...


 
Poirot ©   (2003-07-10 17:43) [13]

выводи что получил после едита!


 
panov ©   (2003-07-10 17:45) [14]

PosInArray:=Length(ValueArray)-1; srv:=nil

Почему так?


 
olookin ©   (2003-07-10 17:51) [15]

to panov - обнуляю массив - он же динамический чего ему висеть...


Для всех - проблема уже решена - всем спасибо..


 
Skier ©   (2003-07-10 17:59) [16]

>olookin © (10.07.03 17:51)

> Для всех - проблема уже решена - всем спасибо..

А где был косяк ?



Страницы: 1 вся ветка

Текущий архив: 2003.07.24;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.021 c
14-78086
Кен
2003-07-08 01:55
2003.07.24
Ещё раз по поводу стека. ( Любителей ругани просьба не заходить )


1-77987
незнайка
2003-07-11 12:57
2003.07.24
Данные из одной формы в другую..


4-78191
evvcom
2003-05-21 16:32
2003.07.24
LoadLibrary и LoadLibraryEx


11-77816
tamerlan311
2002-11-20 13:29
2003.07.24
обновление сайта !


14-78063
Дмитрий К.К.
2003-07-07 06:13
2003.07.24
Именинники 7 июля