mieszanie modulow z roznych jezykow (C i Pascal)

0

mam pytanko. Jak uruchomić podprogram w Pascalu pod C. Znalazłem kilka ciekawych artykułów o tym , ale podane przykłady z jakiś powodów nie odpalają mi się . Mam prośbę. Czy ktoś mógłbym podać jakiś prosty działajacy przykład.

0

Zdefiniuj Pascal, C oraz podprogram. Jakie kompilatory, jaki system operacyjny i co rozumiesz przez podprogram: kod unitu, moduł, paczkę (package) czy bibliotekę DLL?

0

chodzi mi o to że mam napisaną procedure w pascalu w "plik.p" i teraz chce wywołać ją z poziomu C czyli mam "plik2.c" do którego chce załaczyc procedure z "plik.p"
środowisko linux kompilator gpc i gcc

czytalem troszke o tym ze plik.p kompiluje do obiektu przez gpc -c potem w nagłówku plik2.c wpisuje np extern void procedura(); a potem wszystko kompiluje przez gcc -o nazwa_programu plik2.c plik.o , ale tu mam problem wystepuje bład "multiple definition of main " .Domyslam sie ze chodzi o funkcje główna w plik.p ale jak skompilować plik.p do obiektu bez funkcji głównej ?

0

hm.. a czy w tym pliku .p masz cos ponad definicje funkcji? jak tak to wywal i zostaw tylko kod ktory tworzy funkcje, zadnego "luzno latajacego" programu. sama funkcja

0

mam samą procedure w pliku .p i gdy kompiluje ja do obiektu wystepuje bład syntax error at end of input
a procedura przykladowa wyglada tak

procedure pas(var i: integer; var r: integer);

begin

i :=9;
r:=9;

end;

0

o ile mnie pamiec nie myli, program pascalowy konczy sie kropka a nie srednikiem

0

dam kropke zamiast ; jest bład error: syntax error befor .

0

1' http://alignment.hep.brandeis.edu/Software/Mixing_Manual.html
2'

funkcja.p

unit Pascal_Library;

interface

function Sqr(x:longreal):longreal; attribute(name='kwadrat');

implementation

function Sqr(x:longreal):longreal;
begin
    Sqr:=x*x;
end;


initialization

writeln('Pascal: Initialized Pascal Library.');

end.

test.c

extern double kwadrat(double x);

int main()
{   printf("%lf\n", kwadrat(2.5));
    return 0;
}

-sh-3.00# gpc -c funkcja.p
-sh-3.00# gcc -c test.c
-sh-3.00# gcc test.o funkcja.o -lgpc -L/usr/lib/gcc-lib/i686-pld-linux/3.3.6/ -lm
-sh-3.00# ./a.out
nan

i wsio gra
...tylko wynik troche dziwny :))))

0

no mi tez sie skompilowało tylko też dziwny wynik dało :)) ale na prawde wielkie dzieki . Teraz bede musiał sie pobawic z kompilacja bo to jest wiekszy projekt składajacy sie z kilkunasty modułów ale mam nadzieje ze dam rade :) jeszcze raz dzieki za pomoc

0

Może chodzi o typ wywołania ? Spróbuj:

extern __pascal double kwadrat(double x);

czy jakoś podobnie, nie wiem jak jest w gcc

0

punkt, to pewnie wlasnie to. niestety w obecnej chwili nie dam rady sprawdzic, zostawiam autorowi:)

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