Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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. // //----------------------------------------------------------------------------- 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RowUpdatingEventArgs.cs
- AutomationProperties.cs
- QueryServiceConfigHandle.cs
- DataGridViewCellContextMenuStripNeededEventArgs.cs
- DataListItemEventArgs.cs
- SBCSCodePageEncoding.cs
- TransactionChannelListener.cs
- SafeCryptHandles.cs
- PersonalizationStateInfo.cs
- ContextMenu.cs
- EntityDataSourceWrapperCollection.cs
- SqlVersion.cs
- ICollection.cs
- DataGridViewBindingCompleteEventArgs.cs
- ProcessModelSection.cs
- XmlUnspecifiedAttribute.cs
- CmsInterop.cs
- TaskHelper.cs
- PauseStoryboard.cs
- XhtmlStyleClass.cs
- AutoResizedEvent.cs
- SafeNativeMethods.cs
- Adorner.cs
- NamespaceInfo.cs
- PathFigureCollectionConverter.cs
- SplashScreenNativeMethods.cs
- Base64Encoder.cs
- UrlPath.cs
- ReadOnlyDictionary.cs
- RegexRunnerFactory.cs
- Line.cs
- DependencyObjectPropertyDescriptor.cs
- MetadataPropertyAttribute.cs
- ParameterCollection.cs
- TemplateLookupAction.cs
- Int16.cs
- DataSourceControlBuilder.cs
- SystemDiagnosticsSection.cs
- SafeNativeMethods.cs
- MSAANativeProvider.cs
- VersionUtil.cs
- XMLSchema.cs
- MenuItem.cs
- PopupEventArgs.cs
- QilInvokeEarlyBound.cs
- MLangCodePageEncoding.cs
- SimpleBitVector32.cs
- DataServiceStreamProviderWrapper.cs
- ToolBarOverflowPanel.cs
- DeploymentSectionCache.cs
- StringFormat.cs
- GridViewSelectEventArgs.cs
- AsymmetricAlgorithm.cs
- DetailsViewUpdatedEventArgs.cs
- ClientSideProviderDescription.cs
- BuilderInfo.cs
- EntryWrittenEventArgs.cs
- WsatAdminException.cs
- ToolTip.cs
- EventBookmark.cs
- GraphicsContext.cs
- Effect.cs
- NullableConverter.cs
- IpcClientChannel.cs
- OleAutBinder.cs
- BinaryFormatter.cs
- CompoundFileReference.cs
- ActivityCodeDomSerializationManager.cs
- Point4DValueSerializer.cs
- SystemIPGlobalStatistics.cs
- Vector3DCollectionValueSerializer.cs
- DataGridrowEditEndingEventArgs.cs
- SynchronizationValidator.cs
- TextTrailingCharacterEllipsis.cs
- UserPreferenceChangedEventArgs.cs
- NeutralResourcesLanguageAttribute.cs
- IgnoreSection.cs
- CategoryAttribute.cs
- ListParagraph.cs
- input.cs
- BamlReader.cs
- XmlSequenceWriter.cs
- StylusPlugInCollection.cs
- EncoderParameter.cs
- ClientSession.cs
- CurrentChangingEventManager.cs
- KeyValueConfigurationElement.cs
- Point3DCollectionConverter.cs
- XmlAnyAttributeAttribute.cs
- RootBrowserWindowProxy.cs
- HttpWebRequest.cs
- Reference.cs
- MultiPropertyDescriptorGridEntry.cs
- ToolboxItemWrapper.cs
- TypeDescriptor.cs
- AutomationPeer.cs
- MappingModelBuildProvider.cs
- SqlDataSourceView.cs
- DictionaryContent.cs
- ItemMap.cs