1

有人设法在 Delphi XE4 中安装 InstantObjects?

我正在编译 svn 存储库中的最新源代码。在更正了编译器版本的一些问题后,我陷入了以下代码片段:

procedure TInstantAccessor.SetOnCompare(Value: TInstantCompareObjectsEvent);
begin
   if @Value <> @FOnCompare then
   begin
      FOnCompare := Value;
      RefreshView;
   end;
end;

导致错误消息“[dcc32 Error] InstantPresentation.pas (1580): E2008 Incompatible types”就行了:

if @Value <> @FOnCompare then

但它们是同一类型:TInstantCompareObjectsEvent

怎么了?

4

2 回答 2

1

也许将过程指针转换为泛型Pointer类型可以解决:

procedure TInstantAccessor.SetOnCompare(Value: TInstantCompareObjectsEvent);
var 
  PValue, PFOnCompare: Pointer;
begin
   PValue := Pointer(@Value);           // Casting the original pointer to an generic pointer 
   PFOnCompare := Pointer(@FOnCompare);
   if @PValue <> @PFOnCompare then
   begin
      FOnCompare := Value;
      RefreshView;
   end;
end;
于 2013-07-16T21:32:51.063 回答
0

Fabricio 在评论中写的东西是有道理的。我用指令 {$T-} 和 {$T+} 包围了代码并编译了代码!

现在我在代码的其他部分遇到了麻烦,但那是另一回事了。

procedure TInstantAccessor.SetOnCompare(Value: TInstantCompareObjectsEvent);
begin
{$T-}
   if @Value <> @FOnCompare then
   begin
      FOnCompare := Value;
      RefreshView;
   end;
{$T+}
end;

谢谢你们。

于 2013-07-17T11:28:25.730 回答