首页 文章

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

提问于
浏览
-1

有一个旧项目我需要重新编译到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 回答

  • 4

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

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

    enum: IEnumUnknown;
    

    至 :

    enum: ActiveX.IEnumUnknown;
    

相关问题