----- Original Message ----- From: "Harald Houppermans" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Friday, September 24, 2004 3:06 AM Subject: Re: [fpc-pascal]Apple Mac pointer problem
> > > > ----- Original Message ----- > From: "Stephen Downs" <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Thursday, September 23, 2004 8:49 PM > Subject: [fpc-pascal]Apple Mac pointer problem > > > 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. I > tried replacing testDataHdl^ by Ptr(testDataHdl)^ but that gives a > similar error - Got "ShortInt", expected "Ptr" > > Does anyone know how I can get around this? > > regards... Steve > > Euhm... just my two cents: > > testDataHdl is in fact a pointer to a pointer to data. > > so testDataHdl^ points to a pointer. > > If you want to read a pointer from the file that's good. > > But if you actually want to read the data then it's a mistake. > > Then you need to use this: > > testDataHdl^^ > > Bye, > Skybuck. > Though euhm.. it depends on the way the routine really works. It seems it's excepting pointers. So testDataHdl^ seems correct... since that will supply the routine with a pointer to the data. Maybe the prototype is incorrect ? You can always try testDataHdl^^ and see if it works ;) lol. Though looking at the code again... why is testDataPointer declared (it doesn't seem to be used) ? In other words... 1. Does the routine expect a pointer to data ? 2. Does the routine expect a pointer to a pointer to data ? 3. Or does the routine expect like a var parameter... that means the data itself... like a const reference or something ;) For example pascal and delphi file routines and streams work with number 3 ;) In your case it seems the routine work with number 1. That means testDataHdl^ is simply a mistake. Since you are now dereferencing it to the data. The routine doesn't want the data... the routine wants a pointer. So the correct call is probably something like: OSError := FSRead(fileRefNum, numberOfBytes, testDataHdl ) testDataHdl (without the hat ^ ) The funny thing is the declaration of the testDataPointer put you, me and everybody else off ;) It's simply misleading :) Bye, Skybuck. _______________________________________________ fpc-pascal maillist - [EMAIL PROTECTED] http://lists.freepascal.org/mailman/listinfo/fpc-pascal