ComEventsInfo.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Runtime / InteropServices / ComEventsInfo.cs / 1305376 / ComEventsInfo.cs

                            // ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 

/*============================================================ 
** 
** Class:  ComEventsInfo
** 
** Purpose: part of ComEventHelpers APIs which allow binding
** managed delegates to COM's connection point based events.
**
** Date:  April 2008 
**/
 
 
#if FEATURE_COMINTEROP
 
namespace System.Runtime.InteropServices {

    using System;
    using ComTypes = System.Runtime.InteropServices.ComTypes; 

    // see code:ComEventsHelper#ComEventsArchitecture 
    [System.Security.SecurityCritical] 
    internal class ComEventsInfo {
 

#region fields

        private ComEventsSink _sinks; 
        private object _rcw;
 
#endregion 

 
#region ctor/dtor

        ComEventsInfo(object rcw) {
            _rcw = rcw; 
        }
 
        [System.Security.SecuritySafeCritical] 
        ~ComEventsInfo() {
            // see code:ComEventsHelper#ComEventsFinalization 
            _sinks = ComEventsSink.RemoveAll(_sinks);
        }

#endregion 

 
#region static methods 

        [System.Security.SecurityCritical] 
        internal static ComEventsInfo Find(object rcw) {
            return (ComEventsInfo)Marshal.GetComObjectData(rcw, typeof(ComEventsInfo));
        }
 
        // it is caller's responsibility to call this method under lock(rcw)
        [System.Security.SecurityCritical] 
        internal static ComEventsInfo FromObject(object rcw) { 
            ComEventsInfo eventsInfo = Find(rcw);
            if (eventsInfo == null) { 
                eventsInfo = new ComEventsInfo(rcw);
                Marshal.SetComObjectData(rcw, typeof(ComEventsInfo), eventsInfo);
            }
            return eventsInfo; 
        }
 
#endregion 

 
#region internal methods

        internal ComEventsSink FindSink(ref Guid iid) {
            return ComEventsSink.Find(_sinks, ref iid); 
        }
 
        // it is caller's responsibility to call this method under lock(rcw) 
        internal ComEventsSink AddSink(ref Guid iid) {
            ComEventsSink sink = new ComEventsSink(_rcw, iid); 
            _sinks = ComEventsSink.Add(_sinks, sink);

            return _sinks;
        } 

        // it is caller's responsibility to call this method under lock(rcw) 
        [System.Security.SecurityCritical] 
        internal ComEventsSink RemoveSink(ComEventsSink sink) {
            _sinks = ComEventsSink.Remove(_sinks, sink); 
            return _sinks;
        }

#endregion 

    } 
} 

#endif 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 

/*============================================================ 
** 
** Class:  ComEventsInfo
** 
** Purpose: part of ComEventHelpers APIs which allow binding
** managed delegates to COM's connection point based events.
**
** Date:  April 2008 
**/
 
 
#if FEATURE_COMINTEROP
 
namespace System.Runtime.InteropServices {

    using System;
    using ComTypes = System.Runtime.InteropServices.ComTypes; 

    // see code:ComEventsHelper#ComEventsArchitecture 
    [System.Security.SecurityCritical] 
    internal class ComEventsInfo {
 

#region fields

        private ComEventsSink _sinks; 
        private object _rcw;
 
#endregion 

 
#region ctor/dtor

        ComEventsInfo(object rcw) {
            _rcw = rcw; 
        }
 
        [System.Security.SecuritySafeCritical] 
        ~ComEventsInfo() {
            // see code:ComEventsHelper#ComEventsFinalization 
            _sinks = ComEventsSink.RemoveAll(_sinks);
        }

#endregion 

 
#region static methods 

        [System.Security.SecurityCritical] 
        internal static ComEventsInfo Find(object rcw) {
            return (ComEventsInfo)Marshal.GetComObjectData(rcw, typeof(ComEventsInfo));
        }
 
        // it is caller's responsibility to call this method under lock(rcw)
        [System.Security.SecurityCritical] 
        internal static ComEventsInfo FromObject(object rcw) { 
            ComEventsInfo eventsInfo = Find(rcw);
            if (eventsInfo == null) { 
                eventsInfo = new ComEventsInfo(rcw);
                Marshal.SetComObjectData(rcw, typeof(ComEventsInfo), eventsInfo);
            }
            return eventsInfo; 
        }
 
#endregion 

 
#region internal methods

        internal ComEventsSink FindSink(ref Guid iid) {
            return ComEventsSink.Find(_sinks, ref iid); 
        }
 
        // it is caller's responsibility to call this method under lock(rcw) 
        internal ComEventsSink AddSink(ref Guid iid) {
            ComEventsSink sink = new ComEventsSink(_rcw, iid); 
            _sinks = ComEventsSink.Add(_sinks, sink);

            return _sinks;
        } 

        // it is caller's responsibility to call this method under lock(rcw) 
        [System.Security.SecurityCritical] 
        internal ComEventsSink RemoveSink(ComEventsSink sink) {
            _sinks = ComEventsSink.Remove(_sinks, sink); 
            return _sinks;
        }

#endregion 

    } 
} 

#endif 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK