Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / WinForms / Managed / System / WinForms / DataStreamFromComStream.cs / 1 / DataStreamFromComStream.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Windows.Forms { using System.Runtime.InteropServices; using System.Diagnostics; using System; using System.IO; ////// /// /// internal class DataStreamFromComStream : Stream { private UnsafeNativeMethods.IStream comStream; public DataStreamFromComStream(UnsafeNativeMethods.IStream comStream) : base() { this.comStream = comStream; } public override long Position { get { return Seek(0, SeekOrigin.Current); } set { Seek(value, SeekOrigin.Begin); } } public override bool CanWrite { get { return true; } } public override bool CanSeek { get { return true; } } public override bool CanRead { get { return true; } } public override long Length { get { long curPos = this.Position; long endPos = Seek(0, SeekOrigin.End); this.Position = curPos; return endPos - curPos; } } /* private void _NotImpl(string message) { NotSupportedException ex = new NotSupportedException(message, new ExternalException(SR.GetString(SR.ExternalException), NativeMethods.E_NOTIMPL)); throw ex; } */ private unsafe int _Read(void* handle, int bytes) { return comStream.Read((IntPtr)handle, bytes); } private unsafe int _Write(void* handle, int bytes) { return comStream.Write((IntPtr)handle, bytes); } public override void Flush() { } public unsafe override int Read(byte[] buffer, int index, int count) { int bytesRead = 0; if (count > 0 && index >= 0 && (count + index) <= buffer.Length) { fixed (byte* ch = buffer) { bytesRead = _Read((void*)(ch + index), count); } } return bytesRead; } public override void SetLength(long value) { comStream.SetSize(value); } public override long Seek(long offset, SeekOrigin origin) { return comStream.Seek(offset, (int)origin); } public unsafe override void Write(byte[] buffer, int index, int count) { int bytesWritten = 0; if (count > 0 && index >= 0 && (count + index) <= buffer.Length) { try { fixed (byte* b = buffer) { bytesWritten = _Write((void*)(b + index), count); } } catch { } } if (bytesWritten < count) { throw new IOException(SR.GetString(SR.DataStreamWrite)); } } protected override void Dispose(bool disposing) { try { if (disposing && comStream != null) { try { comStream.Commit(NativeMethods.STGC_DEFAULT); } catch(Exception) { } } // Can't release a COM stream from the finalizer thread. comStream = null; } finally { base.Dispose(disposing); } } ~DataStreamFromComStream() { Dispose(false); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ZipPackage.cs
- XPathItem.cs
- PersonalizationDictionary.cs
- DocumentViewerAutomationPeer.cs
- TimelineClockCollection.cs
- LinqDataSourceDisposeEventArgs.cs
- ToolboxComponentsCreatingEventArgs.cs
- TypeBuilder.cs
- XmlSchemaSimpleType.cs
- JsonWriter.cs
- DbParameterCollectionHelper.cs
- DataObjectCopyingEventArgs.cs
- EnumValAlphaComparer.cs
- SiteMapPathDesigner.cs
- ShapeTypeface.cs
- ScaleTransform.cs
- PagedDataSource.cs
- iisPickupDirectory.cs
- ElementUtil.cs
- PermissionSet.cs
- CancellableEnumerable.cs
- SmtpDateTime.cs
- InputLanguage.cs
- PropertyRecord.cs
- HttpRequest.cs
- FixedPageAutomationPeer.cs
- OleDbMetaDataFactory.cs
- TraceLevelStore.cs
- CommittableTransaction.cs
- XsltArgumentList.cs
- CurrentChangingEventManager.cs
- DataSourceHelper.cs
- AttributeTableBuilder.cs
- DefaultWorkflowSchedulerService.cs
- TextServicesHost.cs
- IdentitySection.cs
- SoapConverter.cs
- EnumConverter.cs
- ErrorTableItemStyle.cs
- MsmqHostedTransportManager.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- WebHeaderCollection.cs
- ClientSideQueueItem.cs
- MainMenu.cs
- List.cs
- IdentifierElement.cs
- Metadata.cs
- NavigatorInput.cs
- HttpCachePolicyElement.cs
- WebWorkflowRole.cs
- ConnectorDragDropGlyph.cs
- AvTraceDetails.cs
- PieceDirectory.cs
- RemoteWebConfigurationHost.cs
- SQLDecimal.cs
- PropertySegmentSerializer.cs
- SqlComparer.cs
- TextBoxDesigner.cs
- AdjustableArrowCap.cs
- RMEnrollmentPage2.cs
- BinaryReader.cs
- GuidelineSet.cs
- CompilerGlobalScopeAttribute.cs
- UriScheme.cs
- UIHelper.cs
- MetaType.cs
- BufferBuilder.cs
- Decorator.cs
- FontSizeConverter.cs
- HitTestResult.cs
- NegotiateStream.cs
- SHA512Cng.cs
- WebPartConnectionsConfigureVerb.cs
- MimeMultiPart.cs
- Cursor.cs
- ExceptionRoutedEventArgs.cs
- ApplicationBuildProvider.cs
- BamlVersionHeader.cs
- LambdaCompiler.Lambda.cs
- DbException.cs
- MaskedTextBoxTextEditor.cs
- WebBaseEventKeyComparer.cs
- CalendarDataBindingHandler.cs
- ServiceObjectContainer.cs
- DefaultSection.cs
- ConfigurationStrings.cs
- Drawing.cs
- BitmapImage.cs
- MulticastOption.cs
- BooleanFunctions.cs
- DoubleAnimationClockResource.cs
- GridViewRowEventArgs.cs
- NotCondition.cs
- DisplayNameAttribute.cs
- ConfigurationStrings.cs
- ScrollPattern.cs
- designeractionlistschangedeventargs.cs
- ContactManager.cs
- BindingWorker.cs
- IntSecurity.cs