从Delphi 7重新编译到XE5时出错

时间:2014-09-21 17:06:09

标签: delphi delphi-xe5

有一个旧项目我需要重新编译到XE5,试图避免原始D7组件带来的奇怪的Twebbrowser错误。下面的代码在D7上很有用,但在XE5上却没有。

    function GetFrame(FrameNo: Integer; WB: TWEbbrowser): IWebbrowser2;
    var
      OleContainer: IOleContainer;
      enum: IEnumUnknown;
      unk: IUnknown;
      Fetched: PLongint;
    begin
      while WB.ReadyState <> READYSTATE_COMPLETE do
        Application.ProcessMessages;
      if Assigned(WB.document) then
      begin
        Fetched := nil;
        OleContainer := WB.Document as IOleContainer;
        OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum);
        Enum.Skip(FrameNo);
        Enum.Next(1, Unk, Fetched);
        Result := Unk as IWebbrowser2;
      end
      else
        Result := nil;
    end;

我已经检查过,两个版本的EnumObjects参数相同,但XE5表示“E2033。实际和正式var参数的类型必须相同”。 知道如何重新编译这只小狗吗?谢谢。和平!

1 个答案:

答案 0 :(得分:4)

对于变量参数,实际参数必须是形式参数的确切类型。

如果你得到错误,我可以假设你的枚举变量的类型不是类型:ActiveX.IEnumUnknown,所以你可以尝试在变量声明部分中更改这一行:

enum: IEnumUnknown;

到:

enum: ActiveX.IEnumUnknown;