Problem z dll

0

w programie kozystajacym z dlla mam tak

function PoleKwadratu(var a:Integer):Integer; stdcall; external 'Project1.dll' name 'PoleKwadratu';

i gdzies dalej mam

x:=PoleKwadratu(5);

no i pokazuje mi blad : Types of actual and formal parametrs must be identical

czy ktoz moze pokazac gdzie jest błąd?

ewentualnie czy ktos moze mi podac jak mam napisac biblioteke dll zawierajaca funkcje, ktora oblicza pole kwadratu i program ktory kozysta z tej biblioteki? [zaznaczam ze jestem poczatkujacym programista i samemu jest ciezko mi to napisac :(]

0

NAPISAŁEŚ:

function PoleKwadratu(var a:Integer):Integer; stdcall; external 'Project1.dll' name 'PoleKwadratu';

x:=PoleKwadratu(5);

ROZWIĄZANIE:
W deklaracji funkcji w pliku DLL musisz dać CONST zamiast VAR. Gdy dajesz VAR to parametr jaki przekazujesz też musi być VARem a 5 jest stałą (CONST).

Rozwiązanie pierwsze:
W deklaracji funckji w pliku DLL zrób "CONST a: integer":

function PoleKwadratu(CONST a: integer): Integer; stdcall;
begin
...
end;

i analogicznie w programie zmień odwołanie do funkcji na poniższe:

function PoleKwadratu(CONST a:Integer):Integer; stdcall; external 'Project1.dll' name 'PoleKwadratu';

Rozwiązanie drugie:
Nie zmieniaj deklaracji funkcji w DLL ani w programie, a w kodzie programu zrób tak:

var
  X: integer;
begin
  X:=5;
  X:=PoleKwadratu(X);
end;
0

Trzeba uczyc sie na bledach :) ... Ale ktos musi pokazac gdzie one są :)
Dzieki Wielkie !!! nareszcie dziala:)

0
cichy_r napisał(a)

Trzeba uczyc sie na bledach :) ... Ale ktos musi pokazac gdzie one są :)
Dzieki Wielkie !!! nareszcie dziala:)

W tym celu właśnie wymyślili debugger i jak sama jego nazwa wskazuje od-bugowuje kod czyli odpluskwia. Ale programiści mogli by jeszcze wyposażyć debuggera w pierwiastek człowieka czyli "Dobra nie mów że coś jest źle, tylko powiedz co i powiedz jak to naprawić" :D

Nie ma za co :)

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