Beispiel #1
0
        int IProxyManager.Invoke(
            UInt32 dispIdMember,
            IntPtr outerProxy,
            IntPtr pVarResult,
            IntPtr pExcepInfo

            )
        {
            try
            {
                ComProxy comProxy = null;
                Guid     riid;
                if ((dispIdMember == 1))
                {
                    riid = typeof(IChannelOptions).GUID;
                }
                else if ((dispIdMember == 2))
                {
                    riid = typeof(IChannelCredentials).GUID;
                }
                else
                {
                    return(HR.DISP_E_MEMBERNOTFOUND);
                }
                FindOrCreateProxyInternal(outerProxy, ref riid, out comProxy);
                TagVariant variant = new TagVariant();
                variant.vt = (ushort)VarEnum.VT_DISPATCH;
                IntPtr tearOffDispatch = IntPtr.Zero;
                comProxy.QueryInterface(ref riid, out tearOffDispatch);
                variant.ptr = tearOffDispatch;
                Marshal.StructureToPtr(variant, pVarResult, true);
                return(HR.S_OK);
            }
            catch (Exception e)
            {
                if (Fx.IsFatal(e))
                {
                    throw;
                }

                if (pExcepInfo != IntPtr.Zero)
                {
                    System.Runtime.InteropServices.ComTypes.EXCEPINFO exceptionInfo = new System.Runtime.InteropServices.ComTypes.EXCEPINFO();
                    e = e.GetBaseException();
                    exceptionInfo.bstrDescription = e.Message;
                    exceptionInfo.bstrSource      = e.Source;
                    exceptionInfo.scode           = Marshal.GetHRForException(e);
                    Marshal.StructureToPtr(exceptionInfo, pExcepInfo, false);
                }
                return(HR.DISP_E_EXCEPTION);
            }
        }
Beispiel #2
0
 int IProxyManager.Invoke(uint dispIdMember, IntPtr outerProxy, IntPtr pVarResult, IntPtr pExcepInfo)
 {
     try
     {
         Guid     gUID;
         ComProxy comProxy = null;
         if (dispIdMember == 1)
         {
             gUID = typeof(IChannelOptions).GUID;
         }
         else if (dispIdMember == 2)
         {
             gUID = typeof(IChannelCredentials).GUID;
         }
         else
         {
             return(HR.DISP_E_MEMBERNOTFOUND);
         }
         this.FindOrCreateProxyInternal(outerProxy, ref gUID, out comProxy);
         TagVariant structure = new TagVariant {
             vt = 9
         };
         IntPtr zero = IntPtr.Zero;
         comProxy.QueryInterface(ref gUID, out zero);
         structure.ptr = zero;
         Marshal.StructureToPtr(structure, pVarResult, true);
         return(HR.S_OK);
     }
     catch (Exception baseException)
     {
         if (Fx.IsFatal(baseException))
         {
             throw;
         }
         if (pExcepInfo != IntPtr.Zero)
         {
             System.Runtime.InteropServices.ComTypes.EXCEPINFO excepinfo = new System.Runtime.InteropServices.ComTypes.EXCEPINFO();
             baseException             = baseException.GetBaseException();
             excepinfo.bstrDescription = baseException.Message;
             excepinfo.bstrSource      = baseException.Source;
             excepinfo.scode           = Marshal.GetHRForException(baseException);
             Marshal.StructureToPtr(excepinfo, pExcepInfo, false);
         }
         return(HR.DISP_E_EXCEPTION);
     }
 }
Beispiel #3
0
 int IProxyManager.FindOrCreateProxy(IntPtr outerProxy, ref Guid riid, out IntPtr tearOff)
 {
     tearOff = IntPtr.Zero;
     try
     {
         ComProxy comProxy = null;
         this.FindOrCreateProxyInternal(outerProxy, ref riid, out comProxy);
         comProxy.QueryInterface(ref riid, out tearOff);
         return(HR.S_OK);
     }
     catch (Exception exception)
     {
         if (Fx.IsFatal(exception))
         {
             throw;
         }
         return(Marshal.GetHRForException(exception.GetBaseException()));
     }
 }