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
- TimerEventSubscription.cs
- KeyConstraint.cs
- XPathEmptyIterator.cs
- PermissionSet.cs
- X509DefaultServiceCertificateElement.cs
- CommonGetThemePartSize.cs
- Vector3DAnimationUsingKeyFrames.cs
- DbConnectionPoolGroup.cs
- OleDbSchemaGuid.cs
- LinkedResourceCollection.cs
- NotFiniteNumberException.cs
- ValueUtilsSmi.cs
- AssociatedControlConverter.cs
- CommunicationObjectAbortedException.cs
- ProviderConnectionPoint.cs
- XPathNodeHelper.cs
- Polygon.cs
- QuaternionAnimationBase.cs
- PageSettings.cs
- Literal.cs
- FastEncoderWindow.cs
- RuntimeIdentifierPropertyAttribute.cs
- TrackingMemoryStreamFactory.cs
- Stackframe.cs
- SelectionService.cs
- userdatakeys.cs
- Model3DGroup.cs
- OperationPerformanceCounters.cs
- DataSourceProvider.cs
- StorageRoot.cs
- CaseStatementProjectedSlot.cs
- ValidationHelper.cs
- BufferModeSettings.cs
- LocatorGroup.cs
- GatewayDefinition.cs
- ScaleTransform3D.cs
- Properties.cs
- WebPartConnectVerb.cs
- VoiceChangeEventArgs.cs
- StaticResourceExtension.cs
- SqlClientPermission.cs
- FaultDescription.cs
- InertiaExpansionBehavior.cs
- Size3DValueSerializer.cs
- XmlSchemaInfo.cs
- OrderedEnumerableRowCollection.cs
- HandleCollector.cs
- ListChangedEventArgs.cs
- SqlDataReader.cs
- XmlNamespaceDeclarationsAttribute.cs
- HttpChannelHelper.cs
- SQLBoolean.cs
- HttpBindingExtension.cs
- PrintDocument.cs
- SubclassTypeValidatorAttribute.cs
- ListBindableAttribute.cs
- CellIdBoolean.cs
- AppDomain.cs
- Certificate.cs
- DataMemberListEditor.cs
- SplashScreenNativeMethods.cs
- SkinBuilder.cs
- SchemaNotation.cs
- ReflectionPermission.cs
- KnownColorTable.cs
- TextElementAutomationPeer.cs
- _ListenerResponseStream.cs
- InvariantComparer.cs
- ServiceContractViewControl.cs
- SelectionPatternIdentifiers.cs
- Directory.cs
- MimeTypeMapper.cs
- ByteConverter.cs
- WebMessageFormatHelper.cs
- ClientScriptManagerWrapper.cs
- Region.cs
- SoapProtocolImporter.cs
- EntityTypeEmitter.cs
- HtmlSelect.cs
- TagElement.cs
- ListViewTableRow.cs
- WindowsRegion.cs
- SecurityElement.cs
- CredentialCache.cs
- UserPreferenceChangingEventArgs.cs
- XmlAttributeAttribute.cs
- ArraySortHelper.cs
- InternalBufferManager.cs
- _CookieModule.cs
- Select.cs
- DrawingImage.cs
- ScriptRegistrationManager.cs
- ObjectDataSourceDisposingEventArgs.cs
- DefaultProxySection.cs
- SoapInteropTypes.cs
- CacheOutputQuery.cs
- UInt16Storage.cs
- HtmlTextViewAdapter.cs
- Viewport3DVisual.cs
- TableCellsCollectionEditor.cs