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
- TableAdapterManagerHelper.cs
- CannotUnloadAppDomainException.cs
- EntityWithChangeTrackerStrategy.cs
- DefaultCommandConverter.cs
- ConnectionStringsSection.cs
- ExpanderAutomationPeer.cs
- BamlLocalizableResource.cs
- SByteStorage.cs
- XmlNodeChangedEventManager.cs
- TaiwanLunisolarCalendar.cs
- MatrixTransform3D.cs
- ColorAnimationBase.cs
- InkCanvasSelectionAdorner.cs
- X509Chain.cs
- _BufferOffsetSize.cs
- CapiSafeHandles.cs
- DocumentPage.cs
- RoutedEventConverter.cs
- ParenthesizePropertyNameAttribute.cs
- FixUp.cs
- FlowDocumentFormatter.cs
- SurrogateDataContract.cs
- CalloutQueueItem.cs
- NestPullup.cs
- PortCache.cs
- FormatException.cs
- ResourceAssociationSet.cs
- HTMLTagNameToTypeMapper.cs
- ClientBuildManagerTypeDescriptionProviderBridge.cs
- SynchronizationFilter.cs
- Subtree.cs
- ToolStripSplitStackLayout.cs
- ModuleConfigurationInfo.cs
- TransactionScopeDesigner.cs
- XmlAggregates.cs
- CatalogPartChrome.cs
- ParenthesizePropertyNameAttribute.cs
- CodeMemberField.cs
- Compress.cs
- SqlTypeSystemProvider.cs
- MaterializeFromAtom.cs
- ImageFormatConverter.cs
- Size3D.cs
- SqlDataSourceCache.cs
- FixedHyperLink.cs
- DependencyPropertyKey.cs
- SmiContext.cs
- ScrollViewerAutomationPeer.cs
- ToolBarButton.cs
- EpmTargetTree.cs
- SqlUserDefinedAggregateAttribute.cs
- Buffer.cs
- PageCatalogPart.cs
- DataGridDetailsPresenter.cs
- AssemblyNameProxy.cs
- CalloutQueueItem.cs
- LineSegment.cs
- SQLBytes.cs
- BrowserCapabilitiesCodeGenerator.cs
- WindowsStatusBar.cs
- WinFormsSpinner.cs
- DataMisalignedException.cs
- XmlAttribute.cs
- ValidationEventArgs.cs
- InstanceDescriptor.cs
- ManifestResourceInfo.cs
- WebPartEditorCancelVerb.cs
- CodeDirectionExpression.cs
- NamespaceInfo.cs
- MDIClient.cs
- DescendantBaseQuery.cs
- manifestimages.cs
- WsatTransactionInfo.cs
- GuidConverter.cs
- WaitHandle.cs
- RegexRunnerFactory.cs
- HttpCacheParams.cs
- RequestQueryParser.cs
- Content.cs
- OpacityConverter.cs
- MaskInputRejectedEventArgs.cs
- XamlClipboardData.cs
- DataGridLength.cs
- Properties.cs
- RowTypePropertyElement.cs
- LinkArea.cs
- Dump.cs
- SqlTypeConverter.cs
- ObjectConverter.cs
- RegexStringValidator.cs
- ClickablePoint.cs
- ChtmlTextWriter.cs
- SafeArrayRankMismatchException.cs
- _ConnectOverlappedAsyncResult.cs
- XmlSchemaException.cs
- ClientConfigurationHost.cs
- Schema.cs
- StateMachineSubscription.cs
- EmbeddedMailObjectCollectionEditor.cs
- DelegatedStream.cs