【问题标题】:IdStreamVCLWin32 not found error in Delphi XE4在 Delphi XE4 中找不到 IdStreamVCLWin32 错误
【发布时间】:2013-11-07 08:17:05
【问题描述】:

我的旧 Delphi 7 应用程序在一个 pas 文件中使用 IdStreamVCLWin32 单元。该单元位于以下位置。

C:\Program Files\Indy 10 for Delphi\Source\System\IdStreamVCLWin32.pas

当我在我的 Delphi XE4 环境中运行相同的代码时,我收到错误 IdStreamVCLWin32 not found。

注意:Delphi 7 使用的是 Indy 10,但 Delphi XE4 使用的是默认的 Indy。我没有在 Delphi XE4 环境中显式安装 indy。

我搜索了安装 Delphi XE4 的整个 C 盘,但没有找到 IdStreamVCLWin32.pas 文件。

如何摆脱这个错误?

【问题讨论】:

    标签: delphi delphi-7 indy indy10 delphi-xe4


    【解决方案1】:

    据我所知,您从未打算直接包含该单元。单元IdStreamVCL 将委托给IdStreamVCLDotNetIdStreamVCLWin32。所以在我看来IdStreamVCLWin32 是一个实现细节,你可以通过使用IdStreamVCL 来屏蔽它。

    如今,这些单位都合并为IdStreamVCL。所以你可以把它包括在内。但是,我不清楚您是否应该这样做。看看IdStream

    unit IdStream;
    
    interface
    
    {$I IdCompilerDefines.inc}
    
    uses
    {$IFDEF DOTNET}
      IdStreamNET
    {$ELSE}
      IdStreamVCL
    {$ENDIF};
    
    type
    {$IFDEF DOTNET}
      TIdStreamHelper = TIdStreamHelperNET;
    {$ELSE}
      TIdStreamHelper = TIdStreamHelperVCL;
    {$ENDIF}
    
    implementation
    
    end.
    

    很明显,您应该使用IdStream,并让编译器确定该实现是由IdStreamNET 还是IdStreamVCL 提供的。

    因此,您的问题的答案可能是您应该将您对IdStreamVCLWin32 的使用替换为IdStream。请注意,IdStream 中的功能现在以不同的方式实现。您不再实例化流类的实例。现代 Indy 为您提供了一个帮助类 TIdStreamHelper,其中包含类函数。所以你最终会写出这样的代码:

    BytesWritten := TIdStreamHelper.Write(Stream, Bytes, Count);
    

    但是,我不能确定这是正确的方法,因为我不知道您在 IdStreamVCLWin32 中实际使用了什么。很可能您的代码没有使用任何内容,而使用 IdStreamVCLWin32 只是您的某些旧版本代码的遗留问题。

    所以我的建议是:

    1. 从您的使用中删除 IdStreamVCLWin32
    2. 通过研究代码并找出使用当前 Indy 代码的正确方法来处理任何后续的编译器错误。

    【讨论】:

    • 我包含了 IdStreamVCL,但在 idStreamVCL := TIdStreamVCLWin32.Create(fStream); 行出现错误我在上面的语句中将 TIdStreamVCLWin32 更改为 TIdStreamHelperVCL 。然后我收到错误“实际参数太多”。该类中没有创建方法。
    • 我建议您按照我在更新答案的最后部分中的建议进行操作。
    • 正如您所建议的,我将单元 IdStreamVCLWin32 替换为 IdStream 并将 TIdStreamVCLWin32 类替换为 TIdStreamHelper。现在我在 idStreamVCL 处遇到错误:= TIdStreamHelper.Create(fStream);错误是实际参数太多
    • 不,我建议删除IdStreamVCLWin32,并处理后果。你不实例化TIdStreamHelper。仔细看。它是一个只包含类方法的类。我在答案中添加了更多内容。
    • 我使用了 TIdStreamHelper 类并对函数调用的参数进行了一些更改,并且有效!感谢大卫的帮助。我接受你的回答。
    猜你喜欢
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多