On 25/02/14 12:22, Antonio Fortuny wrote:
Hi Folks.

Lazarus 1.0.2, FPC 2.6.2, Win32 and Linux x86_64

That's an old Lazarus version. Did you test with the most recent one?

Something goes wrong with TRTRCriticalSection. There is a difference between Windows and Linux. In a program which will run on Win32 and Linux x86_64, using threads and all this stuff I need to protect some code from multi-threading access.
One critical section looks enough to do the job.
So i code this in Win32 and Linux:

Interface uses clause is:
uses
  {$IFDEF LINUX}
  CThreads,
  {$ENDIF}
  syncobjs,
  {$IFDEF MSWINDOWS}
  windows,
  {$ENDIF}
  {$IFDEF LINUX}
  LCLIntf,
  {$ENDIF}
  Classes,
  IdContext,
  uSimplelogger,
  sitacom,
  MessageQ,
  autoupdateTCPthread,
  sqldb,
  SysUtils;
    FIniCriticalSection: TRTLCriticalSection;
    ...
InitializeCriticalSection(FIniCriticalSection); <----------------- compilation error
    ...
    EnterCriticalSection(FIniCriticalSection);
    try
        ... do a lot of things
    finally
        LeaveCriticalSection(FIniCriticalSection);
    end
    ...

On the above line marked as compilation error the compiler complains with the message autoupdateserverthread.pas(255,48) Error: Call by var for arg no. 1 has to match exactly: Got "TRTLCriticalSection" expected "QWord"

Try putting syncobjs after LCLIntf in the uses section.

What you're seeing may be related to bug report http://bugs.freepascal.org/view.php?id=25187

*winapi.inc*(650,11) Hint: Found declaration: InitializeCriticalSection(var QWord);
winapi ??? Why on Linux ?
No way to get rid of this compilation error
In Win32 the program compiles and runs without errors.

Some help would be appreciated.

This is odd. What is the output of View/IDE Internals/About FPC and About IDE?

Stephano
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to