On Wed, 26 Mar 2008, Graeme Geldenhuys wrote:

> Hi,
> 
> I've noticed this ages ago and found a work-around, but never reported
> it. I hit the same error again today and thought this time I would
> mention it.
> 
> In tiOPF we have some IFDEF's for the 'Windows' unit. Some units also
> use the 'SyncObjs' unit for critical section handling. If 'SyncObjs'
> unit appears before the 'Windows' unit, our code fails to compile with
> a error referring to the TCriticalSection class.
> 
> Does anybody know about this?  Is there any permanent fix to that FPC
> doesn't depend on specific order in uses clause?

Yes, use fully qualified names.

windows.tcriticalsection.
syncobjs.tcriticalsection.

For lower level stuff, you should use TRTLCriticalSection, never 
TCriticalSection.

It has the advantage of being portable.

I'm surprised you actually use the windows unit. That is Evil(tm).

Michael.

> 
> I'm now using FPC 2.2.0, but this issue has been around since 2.0.2.
> 
> 
> ------------[ copy ]------------------
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3491,13) Error: Unknown
> record field identifier "ENTER"
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3491,18) Error: Illegal 
> expression
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3497,15) Error: Unknown
> record field identifier "LEAVE"
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3497,20) Error: Illegal 
> expression
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3503,13) Error: Unknown
> record field identifier "ENTER"
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3503,18) Error: Illegal 
> expression
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3509,15) Error: Unknown
> record field identifier "LEAVE"
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3509,20) Error: Illegal 
> expression
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3526,32) Error: Unknown
> record field identifier "CREATE"
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3532,13) Error: Unknown
> record field identifier "FREE"
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3532,17) Error: Illegal 
> expression
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3544,13) Error: Unknown
> record field identifier "ENTER"
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3544,18) Error: Illegal 
> expression
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3548,15) Error: Unknown
> record field identifier "LEAVE"
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3548,20) Error: Illegal 
> expression
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3560,13) Error: Unknown
> record field identifier "ENTER"
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3560,18) Error: Illegal 
> expression
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3564,15) Error: Unknown
> record field identifier "LEAVE"
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3564,20) Error: Illegal 
> expression
> 
> C:\Programming\tiOPF2\Source\Core\tiUtils.pas(3569) Fatal: There were
> 19 errors compiling module, stopping
> 
> ------------[ end ]-------------------
> 
> 
> And here is an example of where the cursor lands to show the error...
> 
> 
> function TtiMultiReadExclusiveWriteSynchronizer.LockForRead: boolean;
> 
> begin
> 
>   FCritSect.Enter;          // <<<<<<<<<  Cursor showing error
> 
>   try
> 
>     result:= CanLockForRead;
> 
>     if Result then
> 
>       Inc(FReadCount);
> 
>   finally
> 
>     FCritSect.Leave;
> 
>   end;
> 
> end;
> 
> 
> 
> 
> Regards,
>   - Graeme -
> 
> 
> _______________________________________________
> fpGUI - a cross-platform Free Pascal GUI toolkit
> http://opensoft.homeip.net/fpgui/
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
> 
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to