我继承了一些目前使用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}
答案 0 :(得分:6)
您正在使用一些devexpress组件,问题是您使用的是C ++ Builder XE之前的代码版本。特别的问题是在cxVer.inc中声明的条件定义不知道XE。因此,这个cxClasses.pas文件不知道它所针对的是哪个版本的Delphi。
在大多数情况下,您只需添加必要的定义,代码就会开始工作。但是,您的devexpress代码版本适用于使用ANSI字符串的RAD Studio 2007,但您尝试在使用Unicode字符串的XE上进行编译。这种差异需要对其余的源代码进行重大更改。
不幸的是,要使此代码在XE上运行,您需要掌握所有第三方组件的最新版本。更新后的版本已经进行必要的更改以支持Unicode文本。
更重要的是,您的代码可能还需要一些重要的重新工作来支持Unicode,但我不太确定这一点,因为我的经验是使用Delphi而不是C ++ Builder。