Code:
/ FX-1434 / FX-1434 / 1.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
- SystemWebSectionGroup.cs
- XmlSchemaChoice.cs
- BinaryWriter.cs
- PKCS1MaskGenerationMethod.cs
- LocalFileSettingsProvider.cs
- EntityModelSchemaGenerator.cs
- MruCache.cs
- XmlDomTextWriter.cs
- QueryCreatedEventArgs.cs
- PeerTransportSecuritySettings.cs
- ExceptionTranslationTable.cs
- OutOfMemoryException.cs
- QilFunction.cs
- OrCondition.cs
- ResXFileRef.cs
- Journal.cs
- SourceFilter.cs
- MimeTypeAttribute.cs
- SoapCodeExporter.cs
- JoinQueryOperator.cs
- Scene3D.cs
- AstTree.cs
- DataError.cs
- CopyOnWriteList.cs
- XmlEventCache.cs
- ConvertTextFrag.cs
- NativeMethods.cs
- CodeDelegateInvokeExpression.cs
- XmlSchemaFacet.cs
- CodeRemoveEventStatement.cs
- MemberHolder.cs
- PrtTicket_Public.cs
- OdbcParameterCollection.cs
- Pens.cs
- BufferedResponseStream.cs
- APCustomTypeDescriptor.cs
- DataObjectFieldAttribute.cs
- AuthorizationRule.cs
- Point3DAnimationBase.cs
- TypeResolvingOptionsAttribute.cs
- Storyboard.cs
- TextServicesProperty.cs
- WindowsGraphics.cs
- AppDomainManager.cs
- AngleUtil.cs
- AddInContractAttribute.cs
- DocumentGridContextMenu.cs
- DataGridTextBox.cs
- StrongNameKeyPair.cs
- OrderByBuilder.cs
- TreeNodeStyleCollection.cs
- ComponentChangedEvent.cs
- TypedColumnHandler.cs
- TextSelectionHighlightLayer.cs
- contentDescriptor.cs
- InstanceLockTracking.cs
- UnsafeNativeMethods.cs
- SimpleType.cs
- PersonalizableAttribute.cs
- selecteditemcollection.cs
- TabControlEvent.cs
- Column.cs
- PropertyGridEditorPart.cs
- PassportPrincipal.cs
- DbParameterHelper.cs
- MemberCollection.cs
- MdiWindowListStrip.cs
- UserControlParser.cs
- TaskExtensions.cs
- ImageUrlEditor.cs
- TCPClient.cs
- DataPagerFieldItem.cs
- FileRecordSequenceCompletedAsyncResult.cs
- PropertyDescriptor.cs
- LazyTextWriterCreator.cs
- WebConfigurationHost.cs
- XpsSerializationManager.cs
- HwndKeyboardInputProvider.cs
- TraceSwitch.cs
- XmlSchemaSimpleContent.cs
- ConnectionStringsExpressionBuilder.cs
- Scene3D.cs
- Certificate.cs
- AppDomainFactory.cs
- SHA512.cs
- RequestCachePolicyConverter.cs
- DBProviderConfigurationHandler.cs
- LocalizationParserHooks.cs
- EntityDesignerDataSourceView.cs
- GlyphRunDrawing.cs
- TemplateControl.cs
- GenericsNotImplementedException.cs
- MarshalByValueComponent.cs
- DataGridViewAccessibleObject.cs
- ToolStripControlHost.cs
- SafeProcessHandle.cs
- WebBrowserHelper.cs
- DeploymentExceptionMapper.cs
- ConfigurationManagerInternalFactory.cs
- Permission.cs