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