gpt4 book ai didi

delphi - E2251 不明确的重载调用

转载 作者:行者123 更新时间:2023-12-02 08:13:29 25 4
gpt4 key购买 nike

我继承了一些当前使用 C++ Builder 2007 编译的 Delphi 组件/代码。我现在只是尝试使用 C++ Builder RAD XE 编译这些组件。我不知道 Delphi(对象 pascal)。

以下是似乎存在冲突的“支持”功能的版本。是否有一个编译器开关可以用来使 RAD XE 向后兼容?或者我可以对这些函数调用做些什么来纠正不明确的性质?

我收到的错误是:

[DCC Error] cxClasses.pas(566): E2251 Ambiguous overloaded call to 'Supports'
SysUtils.pas(19662): Related method: function Supports(const TObject; const TGUID; out): Boolean;
cxClasses.pas(467): Related method: function Supports(TObject; const TGUID; out): Boolean;



{$IFNDEF DELPHI5}

procedure FreeAndNil(var Obj);
var
Temp: TObject;
begin
Temp := TObject(Obj);
Pointer(Obj) := nil;
Temp.Free;
end;

function Supports(const Instance: IUnknown; const Intf: TGUID; out Inst): Boolean; overload;
begin
Result := (Instance <> nil) and (Instance.QueryInterface(Intf, Inst) = 0);
end;


function Supports(Instance: TObject; const Intf: TGUID; out Inst): Boolean; overload;
var
Unk: IUnknown;
begin
Result := (Instance <> nil) and Instance.GetInterface(IUnknown, Unk) and
Supports(Unk, Intf, Inst);
end;

{$ENDIF}


{$IFNDEF DELPHI6}

function Supports(const Instance: TObject; const IID: TGUID): Boolean;
var
Temp: IUnknown;
begin
Result := Supports(Instance, IID, Temp);
end;

{$ENDIF}

最佳答案

您正在使用一些 devexpress 组件,问题是您正在使用早于 C++ Builder XE 的代码版本。特殊的问题是 cxVer.inc 中声明的条件定义不了解 XE。因此,这个 cxClasses.pas 文件不知道它所针对的是哪个版本的 Delphi。

在大多数情况下,您只需添加必要的定义,代码就会开始工作。但是,您的 devexpress 代码版本适用于使用 ANSI 字符串的 RAD Studio 2007,但您尝试在使用 Unicode 字符串的 XE 上进行编译。这种差异需要对源代码的其余部分进行重大更改。

不幸的是,要让此代码在 XE 上运行,您需要获取所有第 3 方组件的最新版本。更新版本进行了必要的更改以支持 Unicode 文本。

此外,您的代码可能还需要一些重大的重新工作才能支持 Unicode,但我对此不太确定,因为我的经验是使用 Delphi 而不是 C++ Builder。

关于delphi - E2251 不明确的重载调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5060840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com