[fpc-pascal]Apple Mac pointer problem
stephend at e-tempest.co.uk
Fri Sep 24 09:44:50 CEST 2004
> -----Original Message-----
> From: Olle Raab [mailto:olle.r at automagika.se]
> Sent: 23 September 2004 21:45
> To: fpc-pascal at lists.freepascal.org
> Subject: Re: [fpc-pascal]Apple Mac pointer problem
> 04-09-23 23.09, skrev Stephen Downs följande:
> > -----Original Message-----
> > From: Marcel Martin [mailto:mm10 at ellipsa.net]
> > Sent: Thu 9/23/2004 9:18 PM
> > To: fpc-pascal at lists.freepascal.org
> > Cc:
> > Subject: Re: [fpc-pascal]Apple Mac pointer problem
> > Stephen Downs a écrit :
> >> I am porting a Mac CodeWarrior project to FreePascal and have hit a
> >> compile problem with a pointer. In my original code I have a structure
> >> defined along the lines of
> >> testData = record
> >> testIndex : array [0..12] of integer;
> >> end;
> >> testDataPointer = ^testData;
> >> testDataHandle = ^testDataPointer;
> >> Within my main code I open a file and try to read it into my structure
> >> testDataHdl := testDataHandle(NewHandleClear(sizeof(testData)));
> >> OSError := FSRead(fileRefNum, numberOfBytes, testDataHdl^)
> >> The FSRead line fails with error: 62: Incompatible type for arg no. 3:
> >> Got "testDataPointer", expected "Ptr" - the third parameter for FSRead
> is a
> >> pointer. I presume this is because FreePascal uses typed pointers.
> The reason you get the error msg is that fpc supports UNIV as a dummy
> keyword. Is it is accepted but doesn't do anything.
> Since the third param is declared UNIV you do not need any typecast in
> Metrowerks, but you need to cast to Ptr in fpc (as Marcel suggests).
> From UI:
> FUNCTION FSRead(refNum: INTEGER; VAR count: LONGINT; buffPtr: UNIV Ptr):
> >> I
> >> tried replacing testDataHdl^ by Ptr(testDataHdl)^ but that gives a
> >> similar error - Got "ShortInt", expected "Ptr"
> The mac type Ptr is defined as usual in the UI, as a pointer to a signed
> byte, hence the reference to ShortInt in the error msg, which is a signed
> >> Does anyone know how I can get around this?
> >> This is very likely a stupid suggestion but have you tried this
> >> Ptr(testDataHdl^)
> > I had tried that and it compiles ok but when it runs, the FSRead
> > returns an error -36 which is an I/O error
> Are you shure nothing else is wrong ?
> If you read a binary file, alignment might not be the same.
> Actually FPC does not align arrays the same as trad mac compilers.
Thanks for everyones input (Harold - it a Mac thing !!). I'm away for a couple of days now so won't be able to follow up until next week but I guess I need to read up on alignment of binary data.
I assume from what you are saying is that Ptr(testDataHdl^) is the right way to do it in FreePascal but I need to check on how the data is read into the structure.
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
More information about the fpc-pascal