AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen FreePascal InterlockedCompareExchange in FreePascal
Thema durchsuchen
Ansicht
Themen-Optionen

InterlockedCompareExchange in FreePascal

Ein Thema von Alter Mann · begonnen am 6. Jan 2015 · letzter Beitrag vom 7. Jan 2015
Antwort Antwort
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

InterlockedCompareExchange in FreePascal

  Alt 6. Jan 2015, 10:45
Hallo,

ich habe ein kleines (verständniss) Problem
Code:
...
Target, NewValue : Pointer;
...
if InterlickedCompareExchange(Target, NewValue, nil) <> nil then //<< Hier
...
Hier bekomme ich immer den Hinweis, dass das 3. Arg. ein Pointer ist, aber ein Longint erwartet wird.
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:
function InterlockedCompareExchange(var Target : Pointer; NewValue : Pointer; Comperand: Pointer): Pointer;
Was mache ich also falsch bzw. was muss ich dem Compiler mitteilen damit
der Code durchläuft?

Danke
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: InterlockedCompareExchange in FreePascal

  Alt 6. Jan 2015, 10:53
Gibt es die Funktion noche inmal in einer anderen Unit?
Markus Kinzler
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: InterlockedCompareExchange in FreePascal

  Alt 6. Jan 2015, 11:42
Ich habe mal nach geschaut:

in der jwawinbase.pas als
Code:
function InterlockedCompareExchange64(var Destination: LONGLONG; Exchange, Comperand: LONGLONG): LONGLONG; stdcall;
in der c:\lazarus\fpc\2.6.4\source\rtl\i386\i386.inc als
Code:
function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comperand: longint): longint; assembler;
asm
        xchgl  %eax,%ecx
        lock
        cmpxchgl  %edx, (%ecx)
end;
Und wie schon geschrieben in der systemh.inc.

Da ich keine der Units bewust eingebunden habe, sollte also eigentlich die System greifen.
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: InterlockedCompareExchange in FreePascal

  Alt 6. Jan 2015, 11:54
Hallo,

ich habe die Sache auf eine andere Art gelöst, ist aber nicht so schön
Code:
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;
Der Typecast musste sein, da der Compiler bei einem
Code:
InterlockedCompareExchange(Longint(Target), Longint(NewValue), Longint(Comperad))
das der Variablen und keine Konstanten haben möchte.

Mal schauen ob die Lösung auch die Lösung ist.

Danke
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#5

AW: InterlockedCompareExchange in FreePascal

  Alt 7. Jan 2015, 06:26
Kann es sein, dass du auch die Windows Unit eingebunden hast? Die deklariert nämlich nur eine LongInt-Variante ohne jedoch overload anzugeben und verbirgt damit die Deklarationen aus der System Unit. Wenn dem so ist, dann probier doch mal statt nur InterlockedCompareExchange den absoluten Namen System.InterlockedCompareExchange anzugeben.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 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