X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2Fcorlib%2FSystem.Runtime.InteropServices%2FMarshal.cs;h=8bed0815d260a9d15a98da78b35cdbbe2a62f6ba;hb=8784e2e1cbbd88b4872536d3a8077702dc547216;hp=424bb0b26079e1fd306dce70af519a8c634d7e70;hpb=912dda4613db82b1983753b258a72848d3bdf025;p=mono.git diff --git a/mcs/class/corlib/System.Runtime.InteropServices/Marshal.cs b/mcs/class/corlib/System.Runtime.InteropServices/Marshal.cs index 424bb0b2607..1516216ddc2 100644 --- a/mcs/class/corlib/System.Runtime.InteropServices/Marshal.cs +++ b/mcs/class/corlib/System.Runtime.InteropServices/Marshal.cs @@ -37,10 +37,11 @@ using System; using System.Security; using System.Reflection; using System.Threading; +using System.Runtime.InteropServices.ComTypes; +using System.Text; using System.Runtime.ConstrainedExecution; #if !FULL_AOT_RUNTIME -using System.Runtime.InteropServices.ComTypes; using Mono.Interop; #endif @@ -68,8 +69,24 @@ namespace System.Runtime.InteropServices #endif } + [MonoTODO] + public static bool AreComObjectsAvailableForCleanup () + { + return false; + } + + [MonoTODO] + public static void CleanupUnusedObjectsInCurrentContext () + { + if (Environment.IsRunningOnWindows) + throw new PlatformNotSupportedException (); + } + [MethodImplAttribute(MethodImplOptions.InternalCall)] public extern static IntPtr AllocCoTaskMem (int cb); + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal extern static IntPtr AllocCoTaskMemSize (UIntPtr sizet); [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContractAttribute (Consistency.WillNotCorruptState, Cer.MayFail)] @@ -191,9 +208,11 @@ namespace System.Runtime.InteropServices return CreateAggregatedObject (pOuter, (object)o); } -#if !FULL_AOT_RUNTIME public static object CreateWrapperOfType (object o, Type t) { +#if FULL_AOT_RUNTIME + throw new PlatformNotSupportedException (); +#else __ComObject co = o as __ComObject; if (co == null) throw new ArgumentException ("o must derive from __ComObject", "o"); @@ -207,12 +226,12 @@ namespace System.Runtime.InteropServices } return ComInteropProxy.GetProxy (co.IUnknown, t).GetTransparentProxy (); +#endif } public static TWrapper CreateWrapperOfType (T o) { return (TWrapper)CreateWrapperOfType ((object)o, typeof (TWrapper)); } -#endif [MethodImplAttribute(MethodImplOptions.InternalCall)] [ComVisible (true)] @@ -270,6 +289,12 @@ namespace System.Runtime.InteropServices FreeCoTaskMem (s); } + public static void ZeroFreeCoTaskMemUTF8 (IntPtr s) + { + ClearAnsi (s); + FreeCoTaskMem (s); + } + public static void ZeroFreeGlobalAllocAnsi (IntPtr s) { ClearAnsi (s); @@ -329,22 +354,30 @@ namespace System.Runtime.InteropServices return GetCCW (o, T); } #endif +#endif // !FULL_AOT_RUNTIME public static IntPtr GetComInterfaceForObject (object o, Type T) { -#if !MOBILE +#if MOBILE + throw new PlatformNotSupportedException (); +#else IntPtr pItf = GetComInterfaceForObjectInternal (o, T); AddRef (pItf); return pItf; -#else - throw new NotImplementedException (); #endif } + [MonoTODO] + public static IntPtr GetComInterfaceForObject (object o, Type T, CustomQueryInterfaceMode mode) + { + throw new NotImplementedException (); + } + public static IntPtr GetComInterfaceForObject (T o) { return GetComInterfaceForObject ((object)o, typeof (T)); } +#if !FULL_AOT_RUNTIME [MonoTODO] public static IntPtr GetComInterfaceForObjectInContext (object o, Type t) { @@ -383,12 +416,6 @@ namespace System.Runtime.InteropServices throw new NotImplementedException (); } - [MonoTODO] - public static int GetExceptionCode() - { - throw new NotImplementedException (); - } - [MonoTODO] [ComVisible (true)] public static IntPtr GetExceptionPointers() @@ -405,22 +432,35 @@ namespace System.Runtime.InteropServices } #endif // !FULL_AOT_RUNTIME -#if !FULL_AOT_RUNTIME + public static int GetExceptionCode () + { + throw new PlatformNotSupportedException (); + } + public static int GetHRForException (Exception e) { + if (e == null) return 0; + +#if FEATURE_COMINTEROP var errorInfo = new ManagedErrorInfo(e); SetErrorInfo (0, errorInfo); +#endif - return e.hresult; + return e._HResult; } [MonoTODO] [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)] public static int GetHRForLastWin32Error() { +#if FULL_AOT_RUNTIME + throw new PlatformNotSupportedException (); +#else throw new NotImplementedException (); +#endif } +#if !FULL_AOT_RUNTIME [MethodImplAttribute (MethodImplOptions.InternalCall)] private extern static IntPtr GetIDispatchForObjectInternal (object o); @@ -444,17 +484,6 @@ namespace System.Runtime.InteropServices throw new NotImplementedException (); } - [MethodImplAttribute (MethodImplOptions.InternalCall)] - private extern static IntPtr GetIUnknownForObjectInternal (object o); - - public static IntPtr GetIUnknownForObject (object o) - { - IntPtr pUnk = GetIUnknownForObjectInternal (o); - // Internal method does not AddRef - AddRef (pUnk); - return pUnk; - } - [MonoTODO] public static IntPtr GetIUnknownForObjectInContext (object o) { @@ -474,25 +503,48 @@ namespace System.Runtime.InteropServices throw new NotImplementedException (); } + [MethodImplAttribute (MethodImplOptions.InternalCall)] + private extern static IntPtr GetIUnknownForObjectInternal (object o); + +#endif // !FULL_AOT_RUNTIME + + public static IntPtr GetIUnknownForObject (object o) + { +#if FULL_AOT_RUNTIME + throw new PlatformNotSupportedException (); +#else + IntPtr pUnk = GetIUnknownForObjectInternal (o); + // Internal method does not AddRef + AddRef (pUnk); + return pUnk; +#endif + } + public static void GetNativeVariantForObject (object obj, IntPtr pDstNativeVariant) { +#if FULL_AOT_RUNTIME + throw new PlatformNotSupportedException (); +#else Variant vt = new Variant(); vt.SetValue(obj); Marshal.StructureToPtr(vt, pDstNativeVariant, false); +#endif } public static void GetNativeVariantForObject (T obj, IntPtr pDstNativeVariant) { GetNativeVariantForObject ((object)obj, pDstNativeVariant); } -#if !MOBILE +#if !MOBILE && !FULL_AOT_RUNTIME [MethodImplAttribute (MethodImplOptions.InternalCall)] private static extern object GetObjectForCCW (IntPtr pUnk); #endif public static object GetObjectForIUnknown (IntPtr pUnk) { -#if !MOBILE +#if MOBILE || FULL_AOT_RUNTIME + throw new PlatformNotSupportedException (); +#else object obj = GetObjectForCCW (pUnk); // was not a CCW if (obj == null) { @@ -500,24 +552,34 @@ namespace System.Runtime.InteropServices obj = proxy.GetTransparentProxy (); } return obj; -#else - throw new NotImplementedException (); #endif } public static object GetObjectForNativeVariant (IntPtr pSrcNativeVariant) { +#if FULL_AOT_RUNTIME + throw new PlatformNotSupportedException (); +#else Variant vt = (Variant)Marshal.PtrToStructure(pSrcNativeVariant, typeof(Variant)); return vt.GetValue(); +#endif } - public static T GetObjectForNativeVariant (IntPtr pSrcNativeVariant) { + public static T GetObjectForNativeVariant (IntPtr pSrcNativeVariant) + { +#if FULL_AOT_RUNTIME + throw new PlatformNotSupportedException (); +#else Variant vt = (Variant)Marshal.PtrToStructure(pSrcNativeVariant, typeof(Variant)); return (T)vt.GetValue(); +#endif } public static object[] GetObjectsForNativeVariants (IntPtr aSrcNativeVariant, int cVars) { +#if FULL_AOT_RUNTIME + throw new PlatformNotSupportedException (); +#else if (cVars < 0) throw new ArgumentOutOfRangeException ("cVars", "cVars cannot be a negative number."); object[] objects = new object[cVars]; @@ -525,9 +587,14 @@ namespace System.Runtime.InteropServices objects[i] = GetObjectForNativeVariant ((IntPtr)(aSrcNativeVariant.ToInt64 () + i * SizeOf (typeof(Variant)))); return objects; +#endif } - public static T[] GetObjectsForNativeVariants (IntPtr aSrcNativeVariant, int cVars) { + public static T[] GetObjectsForNativeVariants (IntPtr aSrcNativeVariant, int cVars) + { +#if FULL_AOT_RUNTIME + throw new PlatformNotSupportedException (); +#else if (cVars < 0) throw new ArgumentOutOfRangeException ("cVars", "cVars cannot be a negative number."); T[] objects = new T[cVars]; @@ -535,14 +602,20 @@ namespace System.Runtime.InteropServices objects[i] = GetObjectForNativeVariant ((IntPtr)(aSrcNativeVariant.ToInt64 () + i * SizeOf (typeof(Variant)))); return objects; +#endif } [MonoTODO] public static int GetStartComSlot (Type t) { +#if FULL_AOT_RUNTIME + throw new PlatformNotSupportedException (); +#else throw new NotImplementedException (); +#endif } +#if !FULL_AOT_RUNTIME [MonoTODO] [Obsolete ("This method has been deprecated")] public static Thread GetThreadFromFiberCookie (int cookie) @@ -569,12 +642,6 @@ namespace System.Runtime.InteropServices throw new NotImplementedException (); } - public static Type GetTypeFromCLSID (Guid clsid) - { - throw new NotImplementedException (); - } - -#if !FULL_AOT_RUNTIME [Obsolete] [MonoTODO] public static string GetTypeInfoName (UCOMITypeInfo pTI) @@ -582,11 +649,6 @@ namespace System.Runtime.InteropServices throw new NotImplementedException (); } - public static string GetTypeInfoName (ITypeInfo typeInfo) - { - throw new NotImplementedException (); - } - [Obsolete] [MonoTODO] public static Guid GetTypeLibGuid (UCOMITypeLib pTLB) @@ -638,12 +700,6 @@ namespace System.Runtime.InteropServices throw new NotImplementedException (); } - public static object GetUniqueObjectForIUnknown (IntPtr unknown) - { - throw new NotImplementedException (); - } -#endif - [MonoTODO] [Obsolete ("This method has been deprecated")] public static IntPtr GetUnmanagedThunkForManagedMethodPtr (IntPtr pfnMethodToWrap, IntPtr pbSignature, int cbSignature) @@ -651,16 +707,6 @@ namespace System.Runtime.InteropServices throw new NotImplementedException (); } -#if !MOBILE - [MethodImplAttribute (MethodImplOptions.InternalCall)] - public extern static bool IsComObject (object o); -#else - public static bool IsComObject (object o) - { - throw new NotImplementedException (); - } -#endif - [MonoTODO] public static bool IsTypeVisibleFromCom (Type t) { @@ -672,6 +718,31 @@ namespace System.Runtime.InteropServices { throw new NotImplementedException (); } +#endif // !FULL_AOT_RUNTIME + + public static Type GetTypeFromCLSID (Guid clsid) + { + throw new PlatformNotSupportedException (); + } + + public static string GetTypeInfoName (ITypeInfo typeInfo) + { + throw new PlatformNotSupportedException (); + } + + public static object GetUniqueObjectForIUnknown (IntPtr unknown) + { + throw new PlatformNotSupportedException (); + } + +#if !MOBILE + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static bool IsComObject (object o); +#else + public static bool IsComObject (object o) + { + throw new PlatformNotSupportedException (); + } #endif [MethodImplAttribute(MethodImplOptions.InternalCall)] @@ -697,6 +768,16 @@ namespace System.Runtime.InteropServices [MethodImplAttribute(MethodImplOptions.InternalCall)] public extern static string PtrToStringAnsi (IntPtr ptr, int len); + public static string PtrToStringUTF8 (IntPtr ptr) + { + return PtrToStringAnsi (ptr); + } + + public static string PtrToStringUTF8 (IntPtr ptr, int byteLen) + { + return PtrToStringAnsi (ptr, byteLen); + } + public static string PtrToStringAuto (IntPtr ptr) { return SystemDefaultCharSize == 2 @@ -715,15 +796,8 @@ namespace System.Runtime.InteropServices [MethodImplAttribute(MethodImplOptions.InternalCall)] public extern static string PtrToStringUni (IntPtr ptr, int len); -#if !MOBILE [MethodImplAttribute(MethodImplOptions.InternalCall)] public extern static string PtrToStringBSTR (IntPtr ptr); -#else - public static string PtrToStringBSTR (IntPtr ptr) - { - throw new NotImplementedException (); - } -#endif [MethodImplAttribute(MethodImplOptions.InternalCall)] [ComVisible (true)] @@ -788,7 +862,7 @@ namespace System.Runtime.InteropServices return *(short*)addr; short s; - String.memcpy ((byte*)&s, (byte*)ptr, 2); + Buffer.Memcpy ((byte*)&s, (byte*)ptr, 2); return s; } @@ -800,7 +874,7 @@ namespace System.Runtime.InteropServices return *(short*)addr; short s; - String.memcpy ((byte*)&s, addr, 2); + Buffer.Memcpy ((byte*)&s, addr, 2); return s; } @@ -820,7 +894,7 @@ namespace System.Runtime.InteropServices return *(int*)addr; int s; - String.memcpy ((byte*)&s, addr, 4); + Buffer.Memcpy ((byte*)&s, addr, 4); return s; } @@ -833,7 +907,7 @@ namespace System.Runtime.InteropServices return *(int*)addr; else { int s; - String.memcpy ((byte*)&s, addr, 4); + Buffer.Memcpy ((byte*)&s, addr, 4); return s; } } @@ -857,7 +931,7 @@ namespace System.Runtime.InteropServices return *(long*)ptr; long s; - String.memcpy ((byte*)&s, addr, 8); + Buffer.Memcpy ((byte*)&s, addr, 8); return s; } @@ -869,7 +943,7 @@ namespace System.Runtime.InteropServices return *(long*)addr; long s; - String.memcpy ((byte*)&s, addr, 8); + Buffer.Memcpy ((byte*)&s, addr, 8); return s; } @@ -934,16 +1008,22 @@ namespace System.Runtime.InteropServices #if !FULL_AOT_RUNTIME [MethodImplAttribute (MethodImplOptions.InternalCall)] private extern static int ReleaseComObjectInternal (object co); +#endif public static int ReleaseComObject (object o) { +#if FULL_AOT_RUNTIME + throw new PlatformNotSupportedException (); +#else if (o == null) throw new ArgumentException ("Value cannot be null.", "o"); if (!IsComObject (o)) throw new ArgumentException ("Value must be a Com object.", "o"); return ReleaseComObjectInternal (o); +#endif } +#if !FULL_AOT_RUNTIME [Obsolete] [MonoTODO] public static void ReleaseThreadCache() @@ -975,26 +1055,27 @@ namespace System.Runtime.InteropServices return SizeOf (structure.GetType ()); } + internal static uint SizeOfType (Type type) + { + return (uint) SizeOf (type); + } + + internal static uint AlignedSizeOf () where T : struct + { + uint size = SizeOfType (typeof (T)); + if (size == 1 || size == 2) + return size; + if (IntPtr.Size == 8 && size == 4) + return size; + return (size + 3) & (~((uint)3)); + } + [MethodImplAttribute(MethodImplOptions.InternalCall)] public extern static IntPtr StringToBSTR (string s); - // - // I believe this is wrong, because in Mono and in P/Invoke - // we treat "Ansi" conversions as UTF-8 conversions, while - // this one does not do this - // public static IntPtr StringToCoTaskMemAnsi (string s) { - int length = s.Length + 1; - IntPtr ctm = AllocCoTaskMem (length); - - byte[] asBytes = new byte[length]; - for (int i = 0; i < s.Length; i++) - asBytes[i] = (byte)s[i]; - asBytes[s.Length] = 0; - - copy_to_unmanaged (asBytes, 0, ctm, length); - return ctm; + return StringToAllocatedMemoryUTF8 (s); } public static IntPtr StringToCoTaskMemAuto (string s) @@ -1019,6 +1100,29 @@ namespace System.Runtime.InteropServices [MethodImplAttribute(MethodImplOptions.InternalCall)] public extern static IntPtr StringToHGlobalAnsi (string s); + unsafe public static IntPtr StringToAllocatedMemoryUTF8(String s) + { + const int MAX_UTF8_CHAR_SIZE = 3; + if (s == null) + return IntPtr.Zero; + + int nb = (s.Length + 1) * MAX_UTF8_CHAR_SIZE; + + // Overflow checking + if (nb < s.Length) + throw new ArgumentOutOfRangeException("s"); + + IntPtr pMem = AllocCoTaskMemSize(new UIntPtr((uint)nb +1)); + + if (pMem == IntPtr.Zero) + throw new OutOfMemoryException(); + + byte* pbMem = (byte*)pMem; + int nbWritten = s.GetBytesFromEncoding(pbMem, nb, Encoding.UTF8); + pbMem[nbWritten] = 0; + return pMem; + } + public static IntPtr StringToHGlobalAuto (string s) { return SystemDefaultCharSize == 2 @@ -1032,25 +1136,21 @@ namespace System.Runtime.InteropServices { if (s == null) throw new ArgumentNullException ("s"); - int len = s.Length; - IntPtr ctm = AllocCoTaskMem ((len+1) * 2 + 4); - byte [] buffer = null; - WriteInt32 (ctm, 0, len*2); - try { - buffer = s.GetBuffer (); - for (int i = 0; i < len; i++) - WriteInt16 (ctm, 4 + (i * 2), (short) ((buffer [(i*2)] << 8) | (buffer [i*2+1]))); - WriteInt16 (ctm, 4 + buffer.Length, 0); - } finally { - if (buffer != null) - for (int i = buffer.Length; i > 0; ){ - i--; - buffer [i] = 0; - } + byte[] buffer = s.GetBuffer (); + int len = s.Length; + + // SecureString doesn't take endian-ness into account. + // Therefore swap bytes here before we send it to c-side if little-endian. + if (BitConverter.IsLittleEndian) { + for (int i = 0; i < buffer.Length; i += 2) { + byte b = buffer[i]; + buffer[i] = buffer[i + 1]; + buffer[i + 1] = b; + } } - return (IntPtr) ((long)ctm + 4); - } + return BufferToBSTR (buffer, len); + } public static IntPtr SecureStringToCoTaskMemAnsi (SecureString s) { @@ -1137,6 +1237,10 @@ namespace System.Runtime.InteropServices throw ex; } + + [MethodImplAttribute(MethodImplOptions.InternalCall)] + public extern static IntPtr BufferToBSTR (Array ptr, int slen); + [MethodImplAttribute(MethodImplOptions.InternalCall)] public extern static IntPtr UnsafeAddrOfPinnedArrayElement (Array arr, int index); @@ -1171,7 +1275,7 @@ namespace System.Runtime.InteropServices if (((uint)addr & 1) == 0) *(short*)addr = val; else - String.memcpy (addr, (byte*)&val, 2); + Buffer.Memcpy (addr, (byte*)&val, 2); } public static unsafe void WriteInt16 (IntPtr ptr, int ofs, short val) @@ -1181,7 +1285,7 @@ namespace System.Runtime.InteropServices if (((uint)addr & 1) == 0) *(short*)addr = val; else { - String.memcpy (addr, (byte*)&val, 2); + Buffer.Memcpy (addr, (byte*)&val, 2); } } @@ -1215,7 +1319,7 @@ namespace System.Runtime.InteropServices if (((uint)addr & 3) == 0) *(int*)addr = val; else { - String.memcpy (addr, (byte*)&val, 4); + Buffer.Memcpy (addr, (byte*)&val, 4); } } @@ -1226,7 +1330,7 @@ namespace System.Runtime.InteropServices if (((uint)addr & 3) == 0) *(int*)addr = val; else { - String.memcpy (addr, (byte*)&val, 4); + Buffer.Memcpy (addr, (byte*)&val, 4); } } @@ -1246,7 +1350,7 @@ namespace System.Runtime.InteropServices if (((uint)addr & 7) == 0) *(long*)addr = val; else - String.memcpy (addr, (byte*)&val, 8); + Buffer.Memcpy (addr, (byte*)&val, 8); } public static unsafe void WriteInt64 (IntPtr ptr, int ofs, long val) @@ -1258,7 +1362,7 @@ namespace System.Runtime.InteropServices if (((uint)addr & 7) == 0) *(long*)addr = val; else - String.memcpy (addr, (byte*)&val, 8); + Buffer.Memcpy (addr, (byte*)&val, 8); } [MonoTODO] @@ -1351,10 +1455,10 @@ namespace System.Runtime.InteropServices const int COR_E_TARGET = unchecked ((int)0x80131603L); const int COR_E_TARGETINVOCATION = unchecked ((int)0x80131604L); const int COR_E_TARGETPARAMCOUNT = unchecked ((int)0x8002000EL); - const int COR_E_THREADABORTED = unchecked ((int)0x80131530L); + //const int COR_E_THREADABORTED = unchecked ((int)0x80131530L); const int COR_E_THREADINTERRUPTED = unchecked ((int)0x80131519L); const int COR_E_THREADSTATE = unchecked ((int)0x80131520L); - const int COR_E_THREADSTOP = unchecked ((int)0x80131521L); + //const int COR_E_THREADSTOP = unchecked ((int)0x80131521L); const int COR_E_TYPEINITIALIZATION = unchecked ((int)0x80131534L); const int COR_E_VERIFICATION = unchecked ((int)0x8013150DL); //const int COR_E_WEAKREFERENCE = unchecked ((int)?); @@ -1503,6 +1607,7 @@ namespace System.Runtime.InteropServices return null; } +#if FEATURE_COMINTEROP [DllImport ("oleaut32.dll", CharSet=CharSet.Unicode, EntryPoint = "SetErrorInfo")] static extern int _SetErrorInfo (int dwReserved, [MarshalAs(UnmanagedType.Interface)] IErrorInfo pIErrorInfo); @@ -1551,7 +1656,7 @@ namespace System.Runtime.InteropServices } return retVal; } - +#endif public static Exception GetExceptionForHR (int errorCode) { return GetExceptionForHR (errorCode, IntPtr.Zero); @@ -1559,7 +1664,7 @@ namespace System.Runtime.InteropServices public static Exception GetExceptionForHR (int errorCode, IntPtr errorInfo) { -#if !MOBILE +#if FEATURE_COMINTEROP IErrorInfo info = null; if (errorInfo != (IntPtr)(-1)) { if (errorInfo == IntPtr.Zero) { @@ -1571,7 +1676,7 @@ namespace System.Runtime.InteropServices } } - if (info is ManagedErrorInfo && ((ManagedErrorInfo) info).Exception.hresult == errorCode) { + if (info is ManagedErrorInfo && ((ManagedErrorInfo) info).Exception._HResult == errorCode) { return ((ManagedErrorInfo) info).Exception; } @@ -1598,13 +1703,11 @@ namespace System.Runtime.InteropServices #endif } -#if !FULL_AOT_RUNTIME public static int FinalReleaseComObject (object o) { while (ReleaseComObject (o) != 0); return 0; } -#endif [MethodImplAttribute(MethodImplOptions.InternalCall)] private static extern Delegate GetDelegateForFunctionPointerInternal (IntPtr ptr, Type t); @@ -1644,5 +1747,35 @@ namespace System.Runtime.InteropServices return GetFunctionPointerForDelegateInternal ((Delegate)(object)d); } + + internal static void SetLastWin32Error (int error) + { + } + + // Copied from referencesource/mscorlib/system/runtime/interopservices/marshal.cs + //==================================================================== + // return the raw IUnknown* for a COM Object not related to current + // context + // Does not call AddRef + //==================================================================== + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal static extern IntPtr /* IUnknown* */ GetRawIUnknownForComObjectNoAddRef(Object o); + + // Copied from referencesource/mscorlib/system/runtime/interopservices/marshal.cs + //==================================================================== + // Converts the CLR exception to an HRESULT. This function also sets + // up an IErrorInfo for the exception. + // This function is only used in WinRT and converts ObjectDisposedException + // to RO_E_CLOSED + //==================================================================== + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal static extern int GetHRForException_WinRT(Exception e); + + // Copied from referencesource/mscorlib/system/runtime/interopservices/marshal.cs + //======================================================================== + // Create activation factory and wraps it with a unique RCW + //======================================================================== + [MethodImplAttribute(MethodImplOptions.InternalCall)] + internal static extern object GetNativeActivationFactory(Type type); } }