次の方法で共有


マネージド ストリーミング パイプライン コンポーネントでの Seek メソッドの実装

ネイティブ IStream インターフェイスには、現在のストリーム位置を確認するメソッドが用意されていないため、メッセージング エンジンは次の Seek メソッドを使用します。

pStream->Seek(0, STREAM_SEEK_CUR, &pNewPosition);  

このメソッドはストリーム ポインターを移動しません。代わりに、現在の位置を照会します。 そのため、参照できないストリームで動作するパイプライン コンポーネントを実装する場合は、次の例のように Stream.Seek メソッドを使用できます。

override public long Seek(long offset, SeekOrigin origin)  
{  
   long pos = -1;  
  
   switch(origin)  
   {  
      case SeekOrigin.Begin :  
         pos = offset;  
         break;  
      case SeekOrigin.Current :  
         pos = Position + offset;  
         break;  
      case SeekOrigin.End :  
         break;  
   }  
  
   // We generally disallow seeking of the stream  
   // However, in unmanaged code, many people use Seek(0,CURR) to retrieve    // the current position  
   // Special case (that is, if Seek does not change position, do not   
   // throw an exception)  
   if (pos==Position)  
   {  
      return pos;  
   }  
   else  
   {  
      throw new NotSupportedException("ForwardOnlyEventingReadStream does not support Seek()");  
   }  
}  

こちらもご覧ください

カスタム パイプライン コンポーネントの開発