首页 > 解决方案 > IStream.Seek() 出错

问题描述

我有一段非常古老的代码来处理 Delphi 5 中的 Excel 文件,我将其改编为与 Delphi 2005 一起工作,直到 2010 年我才专业使用它。从那时起,就没有合理的 Delphi 免费版本。因此,只是现在使用 Delphi 10.2.3 Tokyo 我想再次对其进行调整。

我无法解决的一个问题与下面给出的函数中的使用有关,OleStream.Seek(...)在该函数中,我得到一个致命错误,其中的所有表达式都是OleCheck(...).

OleStream.Seek(...)另外,我在互联网上搜索该功能时没有找到类似问题的任何提示。

代码如下

function Streamseek(offset : longint; origin: word):string;
var   
  Pos : longInt ; //  Pos: largeint;
begin
  if FBIFFVersion > biff4 then begin
    case Origin of
      soFromBeginning:
        OleCheck(OStream.Seek(Offset,STREAM_SEEK_SET,Pos));  //  ENUM:  set =0
      soFromCurrent:
        OleCheck(OStream.Seek(Offset,STREAM_SEEK_CUR,Pos));        /// 1 cur
      soFromEnd:
        OleCheck(OStream.Seek(Offset,STREAM_SEEK_END,Pos));        //    2      end
    end;

当然,它只是一个更大的程序中的一个功能,这里不相关。

我的问题是:我 OStream.Seek(Offset,STREAM_SEEK_SET,Pos)在互联网上搜索,但除了一个网页,我只能找到OleStream.seek(offset : longint; origin: word):string;一个网页,但使用的类型相同。

在 Delphi 中使用 IStream

所以,我想知道需要使用哪些参数类型。

在德文版的 Delphi 10.2.3 中,出现错误:

[dcc32 Fehler] line(878): E2033 Die Typen der tatsächlichen und formen Var-Parameter müssen übereinstimmen

用英语讲:

实参和形参的类型必须相同。

很明显,这largeint不是现代参数类型,我只看到可能需要,而不是Integer,或 else LongIntInt64因为参数的数量应该是可以的。

LongInt代替Integerforoffset不起作用,Longint而不是LargeInt不适合pos.

有谁知道错误的原因可能是什么?Delphi 10.2.3 中这个函数需要哪些类型?

标签: oleseekdelphi-10.2-tokyo

解决方案


推荐阅读