Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- ObjectStateEntryDbDataRecord.cs
- EventsTab.cs
- BuildProviderCollection.cs
- TextTreeObjectNode.cs
- CommonRemoteMemoryBlock.cs
- WmlTextBoxAdapter.cs
- DynamicUpdateCommand.cs
- HighlightVisual.cs
- LicenseProviderAttribute.cs
- NameValuePermission.cs
- PageBuildProvider.cs
- GridViewColumnCollection.cs
- HttpHandlersSection.cs
- XmlSiteMapProvider.cs
- Comparer.cs
- assemblycache.cs
- ConfigurationValue.cs
- RewritingValidator.cs
- TouchDevice.cs
- WebConfigurationManager.cs
- TriggerAction.cs
- VScrollProperties.cs
- TracingConnectionInitiator.cs
- Stylus.cs
- PKCS1MaskGenerationMethod.cs
- FontStretchConverter.cs
- XmlSchemaComplexContent.cs
- PathGeometry.cs
- OracleColumn.cs
- CommonObjectSecurity.cs
- SourceFileBuildProvider.cs
- DictionarySurrogate.cs
- ContentFileHelper.cs
- CustomDictionarySources.cs
- PermissionAttributes.cs
- SystemException.cs
- Site.cs
- HwndAppCommandInputProvider.cs
- FormDocumentDesigner.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- SelectionItemProviderWrapper.cs
- PackUriHelper.cs
- Parser.cs
- CriticalExceptions.cs
- XmlSchemaComplexContentRestriction.cs
- DaylightTime.cs
- FigureParagraph.cs
- ThreadStaticAttribute.cs
- RenamedEventArgs.cs
- QueueProcessor.cs
- GridPatternIdentifiers.cs
- LogicalTreeHelper.cs
- ToolboxItemCollection.cs
- StubHelpers.cs
- ControlType.cs
- ExtendedPropertyDescriptor.cs
- DataProviderNameConverter.cs
- SoapElementAttribute.cs
- DeferredReference.cs
- ModuleElement.cs
- NegotiateStream.cs
- CellTreeNode.cs
- SmtpCommands.cs
- diagnosticsswitches.cs
- EntityViewGenerationConstants.cs
- Polyline.cs
- SimpleFieldTemplateFactory.cs
- TextPatternIdentifiers.cs
- CodeIdentifiers.cs
- SoapEnvelopeProcessingElement.cs
- XmlILOptimizerVisitor.cs
- ByteStreamGeometryContext.cs
- DateTimeFormat.cs
- FontCacheUtil.cs
- RepeaterItemEventArgs.cs
- VectorCollection.cs
- ContextMenuService.cs
- ThemeDictionaryExtension.cs
- HttpDebugHandler.cs
- TraceLevelStore.cs
- ListViewGroupItemCollection.cs
- dataprotectionpermission.cs
- Soap.cs
- AssemblySettingAttributes.cs
- Classification.cs
- LinkClickEvent.cs
- DependencyPropertyChangedEventArgs.cs
- ResourceAssociationTypeEnd.cs
- ResourcesBuildProvider.cs
- ExternalFile.cs
- CircleHotSpot.cs
- FormView.cs
- GridItemPatternIdentifiers.cs
- FrameworkTemplate.cs
- NativeObjectSecurity.cs
- XamlToRtfWriter.cs
- WindowsListViewItem.cs
- AmbientLight.cs
- DecimalConstantAttribute.cs
- TransformedBitmap.cs