0

私の古い Delphi 7 アプリケーションはIdStreamVCLWin32、1 つの pas ファイルで unit を使用しています。このユニットは次の場所にあります。

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

Delphi XE4 環境で同じコードを実行すると、エラーIdStreamVCLWin32が見つかりません。

注: Delphi 7 は Indy 10 を使用していますが、Delphi XE4 はデフォルトで付属する Indy を使用しています。Delphi XE4 環境に indy を明示的にインストールしていません。

Delphi XE4 がインストールされている C ドライブ全体を検索しましたが、IdStreamVCLWin32.pasファイルが見つかりませんでした。

このエラーを取り除くにはどうすればよいですか?

4

1 に答える 1

1

私が知る限り、そのユニットを直接含めるつもりはありませんでした。ユニットは、 または のいずれかIdStreamVCLに委任します。そして、それはあなたが を使用することによって保護されている実装の詳細であるように私には思えます。IdStreamVCLDotNetIdStreamVCLWin32IdStreamVCLWin32IdStreamVCL

現在、これらのユニットはすべて に統合されてい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によって提供されているかどうかにかかわらず、コンパイラを使用して動作させることを意図していることは明らかです。IdStreamNETIdStreamVCL

したがって、あなたの質問に対する答えは、おそらく の使用を に置き換える必要があるということIdStreamVCLWin32ですIdStreamIdStreamの機能は、現在は別の方法で実装されていることに注意してください。ストリーム クラスのインスタンスをインスタンス化する必要はなくなりました。TIdStreamHelper最新の Indy は、クラス関数を含むヘルパー クラスを提供します。したがって、次のようなコードを書くことになります。

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

ただし、 から実際に何を使用しているのかわからないため、それが正しいアプローチであるかどうかはわかりませんIdStreamVCLWin32。あなたのコードがそこから何も使用していない可能性は非常に高く、 の使用IdStreamVCLWin32は単にコードの古いバージョンからの漂遊的な後遺症です。

だから私のアドバイスは:

  1. IdStreamVCLWin32用途から外してください。
  2. コードを調べて、現在の Indy コードで正しい方法を見つけ出すことで、後続のコンパイラ エラーに対処します。
于 2013-11-07T09:12:26.180 に答える