<Compile Include="$(BclSourcesRoot)\Internal\Runtime\Augments\EnvironmentAugments.cs" />
<Compile Include="$(BclSourcesRoot)\Internal\Runtime\Augments\RuntimeThread.cs" />
<Compile Include="$(BclSourcesRoot)\Internal\Console.cs" />
- <Compile Condition="'$(FeatureCominterop)' == 'true'" Include="$(BclSourcesRoot)\Internal\Threading\Tasks\AsyncCausalitySupport.cs" />
+ <Compile Condition="'$(FeatureCominterop)' == 'true'" Include="$(BclSourcesRoot)\Internal\Threading\Tasks\AsyncCausalitySupport.cs" />
<Compile Condition="'$(FeatureCominterop)' == 'true'" Include="$(BclSourcesRoot)\Internal\Runtime\InteropServices\WindowsRuntime\ExceptionSupport.cs" />
<Compile Condition="'$(FeatureAppX)' == 'true'" Include="$(BclSourcesRoot)\Internal\Resources\WindowsRuntimeResourceManagerBase.cs" />
<Compile Condition="'$(FeatureAppX)' == 'true'" Include="$(BclSourcesRoot)\Internal\Resources\PRIExceptionInfo.cs" />
} // class DateMarshaler
#if FEATURE_COMINTEROP
- // [FriendAccessAllowed]
internal static class InterfaceMarshaler
{
[MethodImplAttribute(MethodImplOptions.InternalCall)]
[DllImport(JitHelpers.QCall)]
internal static extern void ClearNative(IntPtr pUnk);
- // [FriendAccessAllowed]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal static extern object ConvertToManagedWithoutUnboxing(IntPtr pNative);
} // class InterfaceMarshaler
}
} // class InterfaceMarshaler
- // [FriendAccessAllowed]
- internal static class EventArgsMarshaler
- {
- // [FriendAccessAllowed]
- internal static IntPtr CreateNativeNCCEventArgsInstance(int action, object newItems, object oldItems, int newIndex, int oldIndex)
- {
- IntPtr newItemsIP = IntPtr.Zero;
- IntPtr oldItemsIP = IntPtr.Zero;
-
- RuntimeHelpers.PrepareConstrainedRegions();
- try
- {
- if (newItems != null)
- newItemsIP = Marshal.GetComInterfaceForObject(newItems, typeof(IBindableVector));
- if (oldItems != null)
- oldItemsIP = Marshal.GetComInterfaceForObject(oldItems, typeof(IBindableVector));
-
- return CreateNativeNCCEventArgsInstanceHelper(action, newItemsIP, oldItemsIP, newIndex, oldIndex);
- }
- finally
- {
- if (oldItemsIP != IntPtr.Zero)
- Marshal.Release(oldItemsIP);
- if (newItemsIP != IntPtr.Zero)
- Marshal.Release(newItemsIP);
- }
- }
-
- // [FriendAccessAllowed]
- [DllImport(JitHelpers.QCall)]
- static internal extern IntPtr CreateNativePCEventArgsInstance([MarshalAs(UnmanagedType.HString)]string name);
-
- [DllImport(JitHelpers.QCall)]
- static internal extern IntPtr CreateNativeNCCEventArgsInstanceHelper(int action, IntPtr newItem, IntPtr oldItem, int newIndex, int oldIndex);
- }
#endif // FEATURE_COMINTEROP
internal static class MngdNativeArrayMarshaler
#define g_NotifyCollectionChangedEventHandlerName "System.Collections.Specialized.NotifyCollectionChangedEventHandler"
#define g_NotifyCollectionChangedEventArgsName "System.Collections.Specialized.NotifyCollectionChangedEventArgs"
#define g_NotifyCollectionChangedEventArgsMarshalerName "System.Runtime.InteropServices.WindowsRuntime.NotifyCollectionChangedEventArgsMarshaler"
-#define g_WinRTNotifyCollectionChangedEventArgsNameW W("Windows.UI.Xaml.Interop.NotifyCollectionChangedEventArgs")
#define g_INotifyPropertyChangedName "System.ComponentModel.INotifyPropertyChanged"
#define g_PropertyChangedEventHandlerName "System.ComponentModel.PropertyChangedEventHandler"
#define g_PropertyChangedEventArgsName "System.ComponentModel.PropertyChangedEventArgs"
#define g_PropertyChangedEventArgsMarshalerName "System.Runtime.InteropServices.WindowsRuntime.PropertyChangedEventArgsMarshaler"
-#define g_WinRTPropertyChangedEventArgsNameW W("Windows.UI.Xaml.Data.PropertyChangedEventArgs")
#define g_WinRTIIteratorClassName "Windows.Foundation.Collections.IIterator`1"
#define g_WinRTIIteratorClassNameW W("Windows.Foundation.Collections.IIterator`1")
#define g_ICommandName "System.Windows.Input.ICommand"
FCFuncElement("CreateNativeUriInstanceHelper", StubHelpers::UriMarshaler__CreateNativeUriInstance)
FCFuncEnd()
-FCFuncStart(gEventArgsMarshalerFuncs)
- QCFuncElement("CreateNativeNCCEventArgsInstanceHelper", StubHelpers::EventArgsMarshaler__CreateNativeNCCEventArgsInstance)
- QCFuncElement("CreateNativePCEventArgsInstance", StubHelpers::EventArgsMarshaler__CreateNativePCEventArgsInstance)
-FCFuncEnd()
-
FCFuncStart(gMngdSafeArrayMarshalerFuncs)
FCFuncElement("CreateMarshaler", MngdSafeArrayMarshaler::CreateMarshaler)
FCFuncElement("ConvertSpaceToNative", MngdSafeArrayMarshaler::ConvertSpaceToNative)
#endif // !defined(FEATURE_COREFX_GLOBALIZATION)
FCClassElement("Enum", "System", gEnumFuncs)
FCClassElement("Environment", "System", gEnvironmentFuncs)
-#ifdef FEATURE_COMINTEROP
-FCClassElement("EventArgsMarshaler", "System.StubHelpers", gEventArgsMarshalerFuncs)
-#endif // FEATURE_COMINTEROP
#if defined(FEATURE_PERFTRACING)
FCClassElement("EventPipeInternal", "System.Diagnostics.Tracing", gEventPipeInternalFuncs)
#endif // FEATURE_PERFTRACING
}
else
{
- *pObjOut = marshaler.FindOrCreateObjectRef(pUnk, pItfMT);
+ *pObjOut = marshaler.FindOrCreateObjectRef(pUnk, pItfMT);
}
}
}
RETURN mem;
}
-
void EventArgsMarshalingInfo::operator delete(void *pMem)
{
LIMITED_METHOD_CONTRACT;
}
CONTRACTL_END;
- // Create on-demand as we don't want to create the factories in NGEN time
- m_pNCCEventArgsFactory = NULL;
- m_pPCEventArgsFactory = NULL;
-
// Load the System.Collections.Specialized.NotifyCollectionChangedEventArgs class.
SString qualifiedNCCEventArgsTypeName(SString::Utf8, NCCEVENTARGS_ASM_QUAL_TYPE_NAME);
m_hndSystemNCCEventArgsType = TypeName::GetTypeFromAsmQualifiedName(qualifiedNCCEventArgsTypeName.GetUnicode(), FALSE);
EventArgsMarshalingInfo::~EventArgsMarshalingInfo()
{
- CONTRACTL
- {
- NOTHROW;
- GC_TRIGGERS;
- MODE_ANY;
- }
- CONTRACTL_END;
-
- if (m_pNCCEventArgsFactory)
- {
- SafeRelease(m_pNCCEventArgsFactory);
- m_pNCCEventArgsFactory = NULL;
- }
-
- if (m_pPCEventArgsFactory)
- {
- SafeRelease(m_pPCEventArgsFactory);
- m_pPCEventArgsFactory = NULL;
- }
+ LIMITED_METHOD_CONTRACT;
}
void *UriMarshalingInfo::operator new(size_t size, LoaderHeap *pHeap)
return m_hndSystemPCEventArgsType;
}
- ABI::Windows::UI::Xaml::Interop::INotifyCollectionChangedEventArgsFactory *GetNCCEventArgsFactory()
- {
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS; // For potential COOP->PREEMP->COOP switch
- MODE_ANY;
- PRECONDITION(!GetAppDomain()->IsCompilationDomain());
- }
- CONTRACTL_END;
-
- if (m_pNCCEventArgsFactory.Load() == NULL)
- {
- GCX_PREEMP();
- SafeComHolderPreemp<ABI::Windows::UI::Xaml::Interop::INotifyCollectionChangedEventArgsFactory> pNCCEventArgsFactory;
-
- IfFailThrow(clr::winrt::GetActivationFactory(g_WinRTNotifyCollectionChangedEventArgsNameW, (ABI::Windows::UI::Xaml::Interop::INotifyCollectionChangedEventArgsFactory **)&pNCCEventArgsFactory));
- _ASSERTE_MSG(pNCCEventArgsFactory, "Got NULL NCCEventArgs factory!");
-
- if (InterlockedCompareExchangeT(&m_pNCCEventArgsFactory, (ABI::Windows::UI::Xaml::Interop::INotifyCollectionChangedEventArgsFactory *)pNCCEventArgsFactory, NULL) == NULL)
- pNCCEventArgsFactory.SuppressRelease();
- }
-
- return m_pNCCEventArgsFactory;
- }
-
- ABI::Windows::UI::Xaml::Data::IPropertyChangedEventArgsFactory *GetPCEventArgsFactory()
- {
- CONTRACTL
- {
- THROWS;
- GC_TRIGGERS; // For potential COOP->PREEMP->COOP switch
- MODE_ANY;
- PRECONDITION(!GetAppDomain()->IsCompilationDomain());
- }
- CONTRACTL_END;
-
- if (m_pPCEventArgsFactory.Load() == NULL)
- {
- GCX_PREEMP();
- SafeComHolderPreemp<ABI::Windows::UI::Xaml::Data::IPropertyChangedEventArgsFactory> pPCEventArgsFactory;
-
- IfFailThrow(clr::winrt::GetActivationFactory(g_WinRTPropertyChangedEventArgsNameW, (ABI::Windows::UI::Xaml::Data::IPropertyChangedEventArgsFactory **)&pPCEventArgsFactory));
- _ASSERTE_MSG(pPCEventArgsFactory, "Got NULL PCEventArgs factory!");
-
- if (InterlockedCompareExchangeT(&m_pPCEventArgsFactory, (ABI::Windows::UI::Xaml::Data::IPropertyChangedEventArgsFactory *)pPCEventArgsFactory, NULL) == NULL)
- pPCEventArgsFactory.SuppressRelease();
- }
-
- return m_pPCEventArgsFactory;
- }
-
MethodDesc *GetSystemNCCEventArgsToWinRTNCCEventArgsMD()
{
LIMITED_METHOD_CONTRACT;
MethodDesc *m_pWinRTNCCEventArgsToSystemNCCEventArgsMD;
MethodDesc *m_pSystemPCEventArgsToWinRTPCEventArgsMD;
MethodDesc *m_pWinRTPCEventArgsToSystemPCEventArgsMD;
-
- VolatilePtr<ABI::Windows::UI::Xaml::Interop::INotifyCollectionChangedEventArgsFactory> m_pNCCEventArgsFactory;
- VolatilePtr<ABI::Windows::UI::Xaml::Data::IPropertyChangedEventArgsFactory> m_pPCEventArgsFactory;
};
class UriMarshalingInfo
}
FCIMPLEND
-ABI::Windows::UI::Xaml::Interop::INotifyCollectionChangedEventArgs* QCALLTYPE
-StubHelpers::EventArgsMarshaler__CreateNativeNCCEventArgsInstance
-(int action, ABI::Windows::UI::Xaml::Interop::IBindableVector *newItem, ABI::Windows::UI::Xaml::Interop::IBindableVector *oldItem, int newIndex, int oldIndex)
-{
- QCALL_CONTRACT;
-
- ABI::Windows::UI::Xaml::Interop::INotifyCollectionChangedEventArgs *pArgsRC = NULL;
-
- BEGIN_QCALL;
-
- EventArgsMarshalingInfo *marshalingInfo = GetAppDomain()->GetMarshalingData()->GetEventArgsMarshalingInfo();
- ABI::Windows::UI::Xaml::Interop::INotifyCollectionChangedEventArgsFactory *pFactory = marshalingInfo->GetNCCEventArgsFactory();
-
- SafeComHolderPreemp<IInspectable> pInner;
- HRESULT hr;
- hr = pFactory->CreateInstanceWithAllParameters(
- (ABI::Windows::UI::Xaml::Interop::NotifyCollectionChangedAction)action,
- (ABI::Windows::UI::Xaml::Interop::IBindableVector *)newItem,
- (ABI::Windows::UI::Xaml::Interop::IBindableVector *)oldItem,
- newIndex,
- oldIndex,
- NULL,
- &pInner,
- &pArgsRC);
- IfFailThrow(hr);
-
- END_QCALL;
-
- return pArgsRC;
-}
-
-ABI::Windows::UI::Xaml::Data::IPropertyChangedEventArgs* QCALLTYPE
- StubHelpers::EventArgsMarshaler__CreateNativePCEventArgsInstance(HSTRING name)
-{
- QCALL_CONTRACT;
-
- ABI::Windows::UI::Xaml::Data::IPropertyChangedEventArgs *pArgsRC = NULL;
-
- BEGIN_QCALL;
-
- EventArgsMarshalingInfo *marshalingInfo = GetAppDomain()->GetMarshalingData()->GetEventArgsMarshalingInfo();
- ABI::Windows::UI::Xaml::Data::IPropertyChangedEventArgsFactory *pFactory = marshalingInfo->GetPCEventArgsFactory();
-
- SafeComHolderPreemp<IInspectable> pInner;
- HRESULT hr;
- hr = pFactory->CreateInstance(
- name,
- NULL,
- &pInner,
- &pArgsRC);
- IfFailThrow(hr);
-
- END_QCALL;
-
- return pArgsRC;
-}
-
// A helper to convert an IP to object using special flags.
FCIMPL1(Object *, StubHelpers::InterfaceMarshaler__ConvertToManagedWithoutUnboxing, IUnknown *pNative)
{
static FCDECL1(StringObject*, UriMarshaler__GetRawUriFromNative, ABI::Windows::Foundation::IUriRuntimeClass* pIUriRC);
static FCDECL2(IUnknown*, UriMarshaler__CreateNativeUriInstance, __in_ecount(strLen) CLR_CHAR* pRawUriObj, UINT strLen);
- static ABI::Windows::UI::Xaml::Interop::INotifyCollectionChangedEventArgs* QCALLTYPE
- EventArgsMarshaler__CreateNativeNCCEventArgsInstance
- (int action, ABI::Windows::UI::Xaml::Interop::IBindableVector *newItem, ABI::Windows::UI::Xaml::Interop::IBindableVector *oldItem, int newIndex, int oldIndex);
-
- static ABI::Windows::UI::Xaml::Data::IPropertyChangedEventArgs* QCALLTYPE EventArgsMarshaler__CreateNativePCEventArgsInstance(HSTRING name);
-
static FCDECL1(MethodDesc *, GetDelegateInvokeMethod, DelegateObject *pThisUNSAFE);
static FCDECL2(IInspectable *, GetWinRTFactoryReturnValue, Object *pThisUNSAFE, PCODE pCtorEntry);
static FCDECL2(IInspectable *, GetOuterInspectable, Object *pThisUNSAFE, MethodDesc *pCtorMD);