InterlockedCompareExchange in FreePascal
Hallo,
ich habe ein kleines (verständniss) Problem:(
Code:
Hier bekomme ich immer den Hinweis, dass das 3. Arg. ein Pointer ist, aber ein Longint erwartet wird.
...
Target, NewValue : Pointer; ... if InterlickedCompareExchange(Target, NewValue, nil) <> nil then //<< Hier ... Gehe ich mit der Maus über die betreffende Zeile verweist er im Hint auf die systemh.inc Zeile 1014,10 und dort steht die folgende Deklaration:
Code:
Was mache ich also falsch bzw. was muss ich dem Compiler mitteilen damit
function InterlockedCompareExchange(var Target : Pointer; NewValue : Pointer; Comperand: Pointer): Pointer;
der Code durchläuft? Danke |
AW: InterlockedCompareExchange in FreePascal
Gibt es die Funktion noche inmal in einer anderen Unit?
|
AW: InterlockedCompareExchange in FreePascal
Ich habe mal nach geschaut:
in der jwawinbase.pas als
Code:
in der c:\lazarus\fpc\2.6.4\source\rtl\i386\i386.inc als
function InterlockedCompareExchange64(var Destination: LONGLONG; Exchange, Comperand: LONGLONG): LONGLONG; stdcall;
Code:
Und wie schon geschrieben in der systemh.inc.
function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comperand: longint): longint; assembler;
asm xchgl %eax,%ecx lock cmpxchgl %edx, (%ecx) end; Da ich keine der Units bewust eingebunden habe, sollte also eigentlich die System greifen. |
AW: InterlockedCompareExchange in FreePascal
Hallo,
ich habe die Sache auf eine andere Art gelöst, ist aber nicht so schön:(
Code:
Der Typecast musste sein, da der Compiler bei einem
function InterlockedCompareExchangePtr(var Target : Pointer; NewValue : Ponter; Comperad . Pointer): Pointer;
var TV, NV, CO : Longint; begin TV := Longint(Target); NV := Longint(NewValue); CO := Longint(Comperad); Result := Pointer(InterlockedCompareExchange(TV, NV, CO)); end;
Code:
das der Variablen und keine Konstanten haben möchte.
InterlockedCompareExchange(Longint(Target), Longint(NewValue), Longint(Comperad))
Mal schauen ob die Lösung auch die Lösung ist. Danke |
AW: InterlockedCompareExchange in FreePascal
Kann es sein, dass du auch die Windows Unit eingebunden hast? Die deklariert nämlich nur eine LongInt-Variante ohne jedoch
Delphi-Quellcode:
anzugeben und verbirgt damit die Deklarationen aus der System Unit. Wenn dem so ist, dann probier doch mal statt nur
overload
Delphi-Quellcode:
den absoluten Namen
InterlockedCompareExchange
Delphi-Quellcode:
anzugeben.
System.InterlockedCompareExchange
Gruß, Sven |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz