private static object PtrToStructureHelper(IntPtr ptr, Type structureType) { Object boxedStruct = InteropExtensions.RuntimeNewObject(structureType.TypeHandle); PtrToStructureImpl(ptr, boxedStruct); return(boxedStruct); }
private static __ComObject CreateComObjectInternal(RuntimeTypeHandle classType, IntPtr pComItf) { Debug.Assert(!classType.IsNull()); if (classType.Equals(McgModule.s_DependencyReductionTypeRemovedTypeHandle)) { // We should filter out the strongly typed RCW in TryGetClassInfoFromName step #if !RHTESTCL Environment.FailFast(McgTypeHelpers.GetDiagnosticMessageForMissingType(classType)); #else Environment.FailFast("We should never see strongly typed RCW discarded here"); #endif } //Note that this doesn't run the constructor in RH but probably do in your reflection based implementation. //If this were a real RCW, you would actually 'new' the RCW which is wrong. Fortunately in CoreCLR we don't have //this scenario so we are OK, but we should figure out a way to fix this by having a runtime API. object newClass = InteropExtensions.RuntimeNewObject(classType); Debug.Assert(newClass is __ComObject); __ComObject newObj = InteropExtensions.UncheckedCast <__ComObject>(newClass); IntPtr pfnCtor = AddrOfIntrinsics.AddrOf <AddrOfIntrinsics.AddrOfAttachingCtor>(__ComObject.AttachingCtor); CalliIntrinsics.Call <int>(pfnCtor, newObj, pComItf, classType); return(newObj); }
public int CreateInstance(IntPtr pUnkOuter, Guid *riid, IntPtr *ppv) { if (pUnkOuter != IntPtr.Zero) { // We do not currently support COM aggregation return(Interop.COM.CLASS_E_NOAGGREGATION); } RuntimeTypeHandle interfaceTypeHandle = parent.GetTypeFromGuid(ref *riid); if (interfaceTypeHandle.Equals(default(RuntimeTypeHandle))) { return(Interop.COM.E_NOINTERFACE); } else { object result = InteropExtensions.RuntimeNewObject(classType); * ppv = McgMarshal.ObjectToComInterface(result, interfaceTypeHandle); if (*ppv == IntPtr.Zero) { return(Interop.COM.E_NOINTERFACE); } else { return(Interop.COM.S_OK); } } }
/// <summary> /// Returns the requested interface pointer specified by itfType from the CCWActivationFactory /// object instance. Typically the requested interface is the /// System.Runtime.InteropServices.WindowsRuntime.IActivationFactory interface. /// </summary> public unsafe int GetCCWActivationFactory(HSTRING activatableClassId, RuntimeTypeHandle itfType, IntPtr *factoryOut) { try { string classId = McgMarshal.HStringToString(activatableClassId); if (classId == null) { return(Interop.COM.E_INVALIDARG); } RuntimeTypeHandle factoryTypeHandle = default(RuntimeTypeHandle); if (m_ccwFactoriesNameMap != null) { int slot = m_ccwFactoriesNameMap.FindString(classId); if (slot >= 0) { factoryTypeHandle = m_ccwFactories[slot].FactoryType; } } if (factoryTypeHandle.IsNull()) { return(Interop.COM.E_NOINTERFACE); } object factory = InteropExtensions.RuntimeNewObject(factoryTypeHandle); *factoryOut = McgMarshal.ObjectToComInterface( factory, itfType); } catch (Exception ex) { *factoryOut = default(IntPtr); return(McgMarshal.GetHRForExceptionWinRT(ex)); } return(Interop.COM.S_OK); }
public static T CreateClass <T>() where T : class { return(InteropExtensions.UncheckedCast <T>(InteropExtensions.RuntimeNewObject(typeof(T).TypeHandle))); }
internal static __ComGenericInterfaceDispatcher CreateGenericComDispatcher(RuntimeTypeHandle genericDispatcherDef, RuntimeTypeHandle[] genericArguments, __ComObject comThisPointer) { #if !RHTESTCL && !CORECLR && !CORERT Debug.Assert(genericDispatcherDef.IsGenericTypeDefinition()); Debug.Assert(genericArguments != null && genericArguments.Length > 0); RuntimeTypeHandle instantiatedDispatcherType; if (!Internal.Runtime.TypeLoader.TypeLoaderEnvironment.Instance.TryGetConstructedGenericTypeForComponents(genericDispatcherDef, genericArguments, out instantiatedDispatcherType)) { return(null); // ERROR } __ComGenericInterfaceDispatcher dispatcher = (__ComGenericInterfaceDispatcher)InteropExtensions.RuntimeNewObject(instantiatedDispatcherType); dispatcher.m_comObject = comThisPointer; return(dispatcher); #else return(null); #endif }