Procedura z tablicą w bibliotece dll

0

Mógłby ktoś mi powiedzieć jak się przenosi procedurę z tablicą do biblioteki .dll ?

Dokładnie mam taka procedurę

PROCEDURE sprawdzanie;
  begin
    writeln('*****');
    writeln(x,':');
    writeln;
    for i:=0 to 64 do
      begin
        if (tab[i][1]=x) and  (tab[i][3]='BO') then
          writeln('   ',tab[i][2],'  ',tab[i][0]);
      end;
    writeln;
  end;

i nie wiem jak przesłać te parametry
zrobiłem coś takiego

PROCEDURE sprawdzanie(x: string; tab: array of string; i: Integer); stdcall;
  begin
    writeln('*****');
    writeln(x,':');
    writeln;
    for i:=0 to 64 do
      begin
        if (tab[i][1]=x) and  (tab[i][3]='BO') then
          writeln('   ',tab[i][2],'  ',tab[i][0]);
      end;
    writeln;
  end;




EXPORTS
  sprawdzanie name 'sprawdzanie';

ale nie działa ;/ tzn. jak próbuje skompilować bibliotekę to wyskakuję error

Z góry dzięki za pomoc

0

ale nie działa ;/ tzn. jak próbuje skompilować bibliotekę to wyskakuję error

A w google nie ma tutków jak robić biblioteki?

poza tym, tablice dynamiczne i stringi nie dają się tak łatwo przenosić (tak, to też jest w tutkach!)

0

są ale nie znalazłem nic z tablicami tylko ze zwykłymi zmiennymi ;/

0

są ale nie znalazłem nic z tablicami tylko ze zwykłymi zmiennymi ;/

Wiec tu cie boli, synu.
Z tego wynika że skoro google o tym milczy to się nie da. Jak chcesz porządnie się z Dllkami bawić to chyba interfejsy są najlepszym rozwiązaniem. poza tym, jeszcze raz przypomnę, że nie wolno używać stringów w parametrach które idą do dllki (użyj PChar).

0

Na pewno się da bo na zajęciach mówili że można tylko nigdzie nie mogę znaleźć jak ;/

0

Na pewno się da bo na zajęciach mówili że można tylko nigdzie nie mogę znaleźć jak ;/

No dobra, no to idź do swojego świata gdzie się da zamiast słuchać opinii innych.

Powtórzę raz jeszcze: Nie da się tak jak kolega tego chce, da się (z tego co się orientuję) przez interfejsy o których już wspomniałem.

0

Co się nie da?
Przede wszystkim NIE UŻYWAJ STRINGÓW W DLL!!!!!
Zamiast tego masz używać PChar, jak już było wspomniane. PChar to nic innego jak wskaźnik na tablicę znaków. Zwykłą tablicę też się da chyba nawet bez interfejsu(nie sprawdzałem). Wystarczy stworzyć odpowiedni typ, np: type TArrayOfPChar = array of PChar. W przypadku tablic dynamicznych przyda się jeszcze dodatkowy parametr - ilość elementów w tablicy.

0

A w OleVariant to stringa sie przekazac nie da do dll?

0

A w OleVariant to stringa sie przekazac nie da do dll?

A w opcodach nie da się dowolnego programu napisać bez użycia bibliotek?
Oczywiście że się da, tylko mądra osoba to leniwa osoba.

0

Przede wszystkim NIE UŻYWAJ STRINGÓW W DLL!!!!!

Ech. Po pierwsze, zasada nie jest „nie używaj stringów w dll”, tylko „zarówno program jak i dll-ka muszą zawierać uses sharemem żeby stringi działały. Jeśli jedna część nie jest napisana w Delphi albo C++ Builderze no to wtedy trudno, stringi nie przejdą.

Po drugie, to samo się tyczy tablic dynamicznych.

Po trzecie, Delphi/Pascal zawsze zna rozmiar tablicy podanej jako parametr funkcji.

Po czwarte, jest zasadnicza różnica między zapisem

procedure foo(tab:array of PChar)

a

type TArrayOfPChar = array of PChar;
procedure foo(tab:TArrayOfPChar)

i o tym trzeba pamiętać.

0
Azarien napisał(a)

jest zasadnicza różnica między zapisem

procedure foo(tab:array of PChar)

a

type TArrayOfPChar = array of PChar;
procedure foo(tab:TArrayOfPChar)

Yyyyy, jaka?

0

Yyyyy, jaka?

A spróbuj sobie tam przypisać arraya...

Generalnie to procedure a(x:array of y) oznacza że będzie się to wykonywać to np. tak a([1,2,3]) . Wtedy jest to open array, czyli dowolna ilość parametrów.
W drugim przypadku oczekuje się typu tablicowego, czyli tak jak to większości się wydaje że jest w pierwszym przypadku a nie jest.

0

jedno to jest "open array" a drugie "dynamic array". czasami różnica jest nieistotna, czasami bardzo ważna. szczegóły w Google ;-)

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