dlaczego taki prosty program sie zawiesza?

0

dlaczego taki prosty program sie zawiesza? Sklada sie z 2 czesci - programu glownego i biblioteki importowanej przezen.

program Wyszukiwanie_Binarne;
{$APPTYPE CONSOLE}

const N = 10; // maksymalna liczba elementów w zbiorze

var
i,iz,s,x : integer;
d : array[0..N-1] of integer;

function BinarySearch(var d : array of integer;
ip,ik,d_szukany : integer) : integer;
stdcall external 'Project2.dll' name 'BinarySearch';

begin
writeln('Wyszukiwanie binarne');

randomize;
x := 2;
for i := 0 to N-1 do
begin
if i = 0 then
d[i] := random(x)
else
repeat
d[i] := random(x);
until d[i] > d[i-1];
x := x + 2;
end;

s := random(N+N);

iz := BinarySearch(d,0,N-1,s);

writeln('Poszukiwana liczba : ',s);
writeln;
writeln('Zbior:');
writeln;
for i := 0 to N - 1 do
begin
write(i:3,' : ');
if iz = i then
writeln('>> ',d[i]:2,' <<')
else
writeln(d[i]:5);
end;
writeln;
if iz = -1 then
writeln('Liczby w zbiorze nie ma')
else
writeln('Liczba ',s,' wystepuje na pozycji ',iz);
writeln;
writeln('Nacisnij Enter...'); readln;
end.
----------------------------------------- biblioteka
library Project2;

function fp(a1,a2 : integer) : boolean;
begin
Result := a1 <= a2;
end;

function BinarySearch(var d : array of integer;
ip,ik,d_szukany : integer) : integer;
var
i : integer;
begin
repeat
i := (ip + ik) div 2;
if d[i] = d_szukany then
begin
Result := i; Exit;
end;
if fp(d_szukany,d[i]) then
ik := i - 1
else
ip := i + 1;
until ip > ik;
Result := -1;
end;

exports
BinarySearch name 'BinarySearch';
begin
end.


zawiesza sie oczywiscie przy uzywaniu funkcji binarysearch przez glowny program. kompiluje sie dobrze. bez dzielenia tego na biblioteki dziala bezblednie. Moze ktos bardziej doswiadzczony zobacz jaki blad popelniam. Z uzywaniem bibliotek dll nie mam duzego doswiadczenia. Zawsze ograniczalem to tylko do kilku linii deklaracji importu.

0

function BinarySearch(var d : array of integer;ip,ik,d_szukany : integer) : integer; stdcall;

Może to ?

0

function BinarySearch(var d : array of integer;ip,ik,d_szukany : integer) : integer; stdcall;

Może to ?

ale przeciez jesli importuje sie z biblioteki funkcje, to tak powinno byc. ! program to engine, 2 to dll

0

flabra ma rację. Jak nie wierzysz to sprawdź. Poza tym powinieneś sprawdzić najpierw w helpie, tam też jest uzyty stdcall na zakończenie funkcji w bibliotece, bo to określa jak ona ma być wywoływana.

0

flabra ma rację. Jak nie wierzysz to sprawdź. Poza tym powinieneś sprawdzić najpierw w helpie, tam też jest uzyty stdcall na zakończenie funkcji w bibliotece, bo to określa jak ona ma być wywoływana.

Dzieki, juz rozumiem blad, zapomnialem dac infa o standardowym wywoalniu w bibliotece. Myslalem, ze Flabra mowil o programie korzystajacym z niej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1