首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FPC3.0与InterlockedCompareExchange

FPC3.0与InterlockedCompareExchange
EN

Stack Overflow用户
提问于 2016-04-05 05:14:45
回答 2查看 345关注 0票数 1

我安装了Lazarus1.6/FPC3.0,在Windows 10上安装了64位(64位),并移植了包含InterlockedCompareExchangePointer功能的Delphi代码。

FPC3.0不包括InterlockedCompareExchangePointer声明;相反,它“重载”InterlockedCompareExchange (如systemh.inc中所示)

代码语言:javascript
复制
function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comperand: longint): longint; public name 'FPC_INTERLOCKEDCOMPAREEXCHANGE';
{$ifdef cpu64}
function InterlockedCompareExchange64(var Target: int64; NewValue: int64; Comperand: int64): int64; public name 'FPC_INTERLOCKEDCOMPAREEXCHANGE64';
function InterlockedCompareExchange(var Target: Pointer; NewValue: Pointer; Comperand: Pointer): Pointer; external name 'FPC_INTERLOCKEDCOMPAREEXCHANGE64';
{$else cpu64}
function InterlockedCompareExchange(var Target: Pointer; NewValue: Pointer; Comperand: Pointer): Pointer; external name 'FPC_INTERLOCKEDCOMPAREEXCHANGE';
{$endif cpu64}

现在,我尝试在指针中使用InterlockedCompareExchange

代码语言:javascript
复制
program Project1;

uses Windows;

function Test: Boolean;
var
  P1, P2: Pointer;

begin
  Result:= InterlockedCompareExchange(P1, P2, nil) <> nil
end;

begin
  Test;
end.

并且它不使用消息进行编译。

项目1.lpr(10,50)错误: arg no. 3的不兼容类型: Got“指针”,预期"LongInt“

因此,“超载”显然不起作用。怎么修呢?

我在默认(64位)目标上使用64位FPC3.0.

EN

回答 2

Stack Overflow用户

发布于 2016-04-05 05:59:01

以下解决办法

代码语言:javascript
复制
{$ifdef fpc}
function InterlockedCompareExchangePointer(var Target: Pointer; NewValue: Pointer; Comperand: Pointer): Pointer;
begin
{$ifdef cpu64}
  Result:= Pointer(InterlockedCompareExchange64(int64(Target), int64(NewValue), int64(Comperand)));
{$else cpu64}
  Result:= Pointer(InterlockedCompareExchange(LongInt(Target), LongInt(NewValue), LongInt(Comperand)));
{$endif cpu64}
end;
{$endif fpc}

编译并确保Delphi/FPC的兼容性;看起来缺少InterlockedCompareExchangePointer声明是应该修复的FPC错误。

票数 2
EN

Stack Overflow用户

发布于 2016-10-02 17:42:01

InterlockedCompareExchangePointer添加在FPC 3.1.1 (r34599)中:

http://bugs.freepascal.org/view.php?id=29965

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36417627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档