scripts
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Runtime.Remoting;
|
||||
using System.Runtime.Remoting.Messaging;
|
||||
using System.Runtime.Remoting.Proxies;
|
||||
using System.Threading;
|
||||
|
||||
namespace Mono.Interop
|
||||
{
|
||||
// Token: 0x02000091 RID: 145
|
||||
internal class ComInteropProxy : RealProxy, IRemotingTypeInfo
|
||||
{
|
||||
// Token: 0x06000831 RID: 2097 RVA: 0x0001E128 File Offset: 0x0001C328
|
||||
private ComInteropProxy(Type t)
|
||||
: base(t)
|
||||
{
|
||||
this.com_object = __ComObject.CreateRCW(t);
|
||||
}
|
||||
|
||||
// Token: 0x06000832 RID: 2098 RVA: 0x0001E144 File Offset: 0x0001C344
|
||||
private ComInteropProxy(IntPtr pUnk)
|
||||
: this(pUnk, typeof(__ComObject))
|
||||
{
|
||||
}
|
||||
|
||||
// Token: 0x06000833 RID: 2099 RVA: 0x0001E158 File Offset: 0x0001C358
|
||||
internal ComInteropProxy(IntPtr pUnk, Type t)
|
||||
: base(t)
|
||||
{
|
||||
this.com_object = new __ComObject(pUnk);
|
||||
this.CacheProxy();
|
||||
}
|
||||
|
||||
// Token: 0x06000834 RID: 2100
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
private static extern void AddProxy(IntPtr pItf, ComInteropProxy proxy);
|
||||
|
||||
// Token: 0x06000835 RID: 2101
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern ComInteropProxy FindProxy(IntPtr pItf);
|
||||
|
||||
// Token: 0x06000836 RID: 2102 RVA: 0x0001E188 File Offset: 0x0001C388
|
||||
private void CacheProxy()
|
||||
{
|
||||
ComInteropProxy.AddProxy(this.com_object.IUnknown, this);
|
||||
}
|
||||
|
||||
// Token: 0x06000837 RID: 2103 RVA: 0x0001E19C File Offset: 0x0001C39C
|
||||
internal static ComInteropProxy GetProxy(IntPtr pItf, Type t)
|
||||
{
|
||||
Guid iid_IUnknown = __ComObject.IID_IUnknown;
|
||||
IntPtr intPtr;
|
||||
int num = Marshal.QueryInterface(pItf, ref iid_IUnknown, out intPtr);
|
||||
Marshal.ThrowExceptionForHR(num);
|
||||
ComInteropProxy comInteropProxy = ComInteropProxy.FindProxy(intPtr);
|
||||
if (comInteropProxy == null)
|
||||
{
|
||||
Marshal.Release(pItf);
|
||||
return new ComInteropProxy(intPtr);
|
||||
}
|
||||
Marshal.Release(pItf);
|
||||
Interlocked.Increment(ref comInteropProxy.ref_count);
|
||||
return comInteropProxy;
|
||||
}
|
||||
|
||||
// Token: 0x06000838 RID: 2104 RVA: 0x0001E1F0 File Offset: 0x0001C3F0
|
||||
internal static ComInteropProxy CreateProxy(Type t)
|
||||
{
|
||||
ComInteropProxy comInteropProxy = new ComInteropProxy(t);
|
||||
comInteropProxy.com_object.Initialize(t);
|
||||
ComInteropProxy comInteropProxy2 = ComInteropProxy.FindProxy(comInteropProxy.com_object.IUnknown);
|
||||
if (comInteropProxy2 == null)
|
||||
{
|
||||
return comInteropProxy;
|
||||
}
|
||||
Type type = comInteropProxy2.com_object.GetType();
|
||||
if (type != t)
|
||||
{
|
||||
throw new InvalidCastException(string.Format("Unable to cast object of type '{0}' to type '{1}'.", type, t));
|
||||
}
|
||||
return comInteropProxy2;
|
||||
}
|
||||
|
||||
// Token: 0x06000839 RID: 2105 RVA: 0x0001E250 File Offset: 0x0001C450
|
||||
public override IMessage Invoke(IMessage msg)
|
||||
{
|
||||
Console.WriteLine("Invoke");
|
||||
Console.WriteLine(Environment.StackTrace);
|
||||
throw new Exception("The method or operation is not implemented.");
|
||||
}
|
||||
|
||||
// Token: 0x170000E2 RID: 226
|
||||
// (get) Token: 0x0600083A RID: 2106 RVA: 0x0001E270 File Offset: 0x0001C470
|
||||
// (set) Token: 0x0600083B RID: 2107 RVA: 0x0001E278 File Offset: 0x0001C478
|
||||
public string TypeName
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.type_name;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.type_name = value;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x0600083C RID: 2108 RVA: 0x0001E284 File Offset: 0x0001C484
|
||||
public bool CanCastTo(Type fromType, object o)
|
||||
{
|
||||
__ComObject _ComObject = o as __ComObject;
|
||||
if (_ComObject == null)
|
||||
{
|
||||
throw new NotSupportedException("Only RCWs are currently supported");
|
||||
}
|
||||
return (fromType.Attributes & TypeAttributes.Import) != TypeAttributes.NotPublic && !(_ComObject.GetInterface(fromType, false) == IntPtr.Zero);
|
||||
}
|
||||
|
||||
// Token: 0x040001A8 RID: 424
|
||||
private __ComObject com_object;
|
||||
|
||||
// Token: 0x040001A9 RID: 425
|
||||
private int ref_count = 1;
|
||||
|
||||
// Token: 0x040001AA RID: 426
|
||||
private string type_name;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user