Odwołanie przez referencję w dll

0

Witam.
Jestem studentem I roku informatyki.
Mam do zrobienia projekt, do którego funkcje i procedury mają znaleźć się w bibliotece dll.
Problem polega na tym, jak odnieść się do zmiennych/tablic/rekordów zadeklarowanych w programie, a nie w bibliotece.

Program jest konsolowy.

Załóżmy np. że w bibliotece dll mamy taką o to funkcję

procedure zeruj(var x:array[1..10] of dane);stdcall;
begin
  for k:=1 to 10 do
  begin
    x[k].nr=k;
    x[k].gracz='(brak)';
    x[k].rozegranych:=0;
    x[k].wygranych:=0;
    x[k].procent:=0;
  end

Rekord i tablica są natomiast zdefiniowane w programie w następujący sposób:

var dane = record
   nr: 1..10;
   gracz: string;
   rozegranych: 1..5;
   wygranych: 1..5;
   procent: real;
end;

var x:array[1..10] of dane;

Niestety rzecz jasna jak w ten sposób to zapiszę to przy budowaniu biblioteki dll zacznie mi sypać że nic nie zadeklarowalem. Jak wobec tego mam się tutaj odwołać?

Nie piszcie 'nie umiesz/naucz się podstaw' i tak dalej i tak dalej - jak tak chcecie napisać to lepiej nic nie piszcie, to i tak nic nie wniesie. Delphi nie jest moją mocną strona, wolę C, nie mniej jednak mam do zrobienia projekt w Delphi więc robię w Delphi.

Z góry dzięki za pomoc
Pozdrawiam, Krzysiek</delphi>

0

Mógłbyś przesyłać każdy element tablicy elementarne (procedure zeruj(nr: 1..10, gracz: string,rozegranych: 1..5,wygranych: 1..5,procent: real) i w programie wywoływać procedurę z DLL w pętli 1..10. Możesz też zadeklarować tablicę i rekord w DLL tak samo jak w programie. (Warto spróbować, bo może zadziała)

0
czarny445 napisał(a)

Mógłbyś przesyłać każdy element tablicy elementarne (procedure zeruj(nr: 1..10, gracz: string,rozegranych: 1..5,wygranych: 1..5,procent: real) i w programie wywoływać procedurę z DLL w pętli 1..10.

W sumie tak, ale to jest dość dużo roboty. Przy czym jeżeli weźmiemy pod uwagę że jeszcze odwołanie nie następuje przez referencję to już w ogóle ta procedura byłaby bez sensu.

0

No, ale masz rozwiązanie awaryjne jakby nikt nie odpowiedział.

0

Widzisz, niekoniecznie, bo w tym wypadku który opisałeś funkcja musiałaby zwracać kilka parametrów, a takie założenie zupełnie mija się z celem.

Może możnaby to zrobić za pomocą wskaźników (tylko jak)?

0

Jeśli dobrze zrozumiałem, to tutaj coś znajdziesz :
http://4programmers.net/Delphi/Artyku%C5%82y/Biblioteki_DLL
Podpunkt : Parametry funkcji.

0

Zarówno program jak i DLL musi dysponować pełną definicją typu:

type TDane = record
nr: 1..10;
gracz: string;
rozegranych: 1..5;
wygranych: 1..5;
procent: real;
end;

Najlepiej, jeśli wyciągnąłbyś ją do osobnego unita, który będzie uses-owany przez program i przez bibliotekę.

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