Problem solved
I have hunted round and found the answer to my problem. The example consists of pascalfunc.p (contains the Pascal procedure), externpascal.h, externpascal.c (which contains main and calls the procedure) and a Makefile. To be honest, I don't understand the _p_intialize(argc,argv,envp); or _p_finalize(); lines or the associated arguments, but it works! I would be grateful for an explanation from any gurus out there.
Chris
------------------------- files attached in [ ]
pascalfunc.p:
[
unit Foo;
interface
procedure Helloworld;
procedure Hello1;
implementation
procedure Helloworld;
begin
writeln("Hello world in Pascal");
end;
procedure Hello1;
begin
writeln("Hello1");
end;
end.
]
externpascal.h:
[
extern void Helloworld(void); /*function in pascalfunc.p */
extern void Hello1(void);
]
externpascal.c:
[
/*Calling external pascal functions in C (from pascalfunc.p) */
#include <stdio.h>
#include <string.h>
#include "externpascal.h" /*contains extern statement */
#include <gpc-in-c.h>
int main (int argc, char* *argv, char* *envp)
{
init_Foo();
_p_initialize (argc,argv,envp);
Helloworld();
Hello1();
_p_finalize ();
}
]
Makefile:
[
pascalextern : externpascal.c pascalfunc.o
gcc externpascal.c pascalfunc.o -o externpascal -lgpc -lm
pascalfunc.o : pascalfunc.p
gpc --automake -c pascalfunc.p
clean :
rm extern.o externalfunc.o
]
|