Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit f7f49ba

Browse files
committed
Move EEMarshalingData cache from AppDomain to LoaderAllocator. This fixes the custom-marshaler conflict when using unloadable assembly contexts.
1 parent 8207f1d commit f7f49ba

15 files changed

+138
-106
lines changed

src/vm/appdomain.cpp

Lines changed: 0 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -711,8 +711,6 @@ BaseDomain::BaseDomain()
711711
m_handleStore = NULL;
712712
#endif
713713

714-
m_pMarshalingData = NULL;
715-
716714
#ifdef FEATURE_COMINTEROP
717715
m_pMngStdInterfacesInfo = NULL;
718716
m_pWinRtBinder = NULL;
@@ -785,9 +783,6 @@ void BaseDomain::Init()
785783
m_crstAssemblyList.Init(CrstAssemblyList, CrstFlags(
786784
CRST_GC_NOTRIGGER_WHEN_TAKEN | CRST_DEBUGGER_THREAD | CRST_TAKEN_DURING_SHUTDOWN));
787785

788-
// Initialize the EE marshaling data to NULL.
789-
m_pMarshalingData = NULL;
790-
791786
#ifdef FEATURE_COMINTEROP
792787
// Allocate the managed standard interfaces information.
793788
m_pMngStdInterfacesInfo = new MngStdInterfacesInfo();
@@ -1805,51 +1800,6 @@ OBJECTREF AppDomain::GetMissingObject()
18051800

18061801
#ifndef DACCESS_COMPILE
18071802

1808-
EEMarshalingData *BaseDomain::GetMarshalingData()
1809-
{
1810-
CONTRACT (EEMarshalingData*)
1811-
{
1812-
THROWS;
1813-
GC_TRIGGERS;
1814-
MODE_ANY;
1815-
INJECT_FAULT(COMPlusThrowOM());
1816-
POSTCONDITION(CheckPointer(m_pMarshalingData));
1817-
}
1818-
CONTRACT_END;
1819-
1820-
if (!m_pMarshalingData)
1821-
{
1822-
// Take the lock
1823-
CrstHolder holder(&m_InteropDataCrst);
1824-
1825-
if (!m_pMarshalingData)
1826-
{
1827-
LoaderHeap* pHeap = GetLoaderAllocator()->GetLowFrequencyHeap();
1828-
m_pMarshalingData = new (pHeap) EEMarshalingData(this, pHeap, &m_DomainCrst);
1829-
}
1830-
}
1831-
1832-
RETURN m_pMarshalingData;
1833-
}
1834-
1835-
void BaseDomain::DeleteMarshalingData()
1836-
{
1837-
CONTRACTL
1838-
{
1839-
NOTHROW;
1840-
GC_TRIGGERS;
1841-
MODE_ANY;
1842-
}
1843-
CONTRACTL_END;
1844-
1845-
// We are in shutdown - no need to take any lock
1846-
if (m_pMarshalingData)
1847-
{
1848-
delete m_pMarshalingData;
1849-
m_pMarshalingData = NULL;
1850-
}
1851-
}
1852-
18531803
#ifndef CROSSGEN_COMPILE
18541804

18551805
STRINGREF *BaseDomain::IsStringInterned(STRINGREF *pString)

src/vm/appdomain.hpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1124,14 +1124,6 @@ class BaseDomain
11241124
return m_pWinRtBinder;
11251125
}
11261126
#endif // FEATURE_COMINTEROP
1127-
1128-
//****************************************************************************************
1129-
// This method returns marshaling data that the EE uses that is stored on a per app domain
1130-
// basis.
1131-
EEMarshalingData *GetMarshalingData();
1132-
1133-
// Deletes marshaling data at shutdown (which contains cached factories that needs to be released)
1134-
void DeleteMarshalingData();
11351127

11361128
#ifdef _DEBUG
11371129
BOOL OwnDomainLocalBlockLock()
@@ -1332,8 +1324,6 @@ class BaseDomain
13321324
// The large heap handle table critical section.
13331325
CrstExplicitInit m_LargeHeapHandleTableCrst;
13341326

1335-
EEMarshalingData *m_pMarshalingData;
1336-
13371327
#ifdef FEATURE_COMINTEROP
13381328
// Information regarding the managed standard interfaces.
13391329
MngStdInterfacesInfo *m_pMngStdInterfacesInfo;

src/vm/ceemain.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1190,11 +1190,6 @@ void InnerCoEEShutDownCOM()
11901190
// Release all of the RCWs in all contexts in all caches.
11911191
ReleaseRCWsInCaches(NULL);
11921192

1193-
// Release all marshaling data in all AppDomains
1194-
AppDomainIterator i(TRUE);
1195-
while (i.Next())
1196-
i.GetDomain()->DeleteMarshalingData();
1197-
11981193
#ifdef FEATURE_APPX
11991194
// Cleanup cached factory pointer in SynchronizationContextNative
12001195
SynchronizationContextNative::Cleanup();

src/vm/cominterfacemarshaler.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -745,7 +745,7 @@ void COMInterfaceMarshaler::MarshalToNonRCWType(OBJECTREF *poref)
745745
LPCWSTR pwszRawUri = hsRawUri.GetRawBuffer(&cchRawUri);
746746
gc.refRawURI = StringObject::NewString(pwszRawUri, cchRawUri);
747747

748-
UriMarshalingInfo *pUriMarshalingInfo = GetAppDomain()->GetMarshalingData()->GetUriMarshalingInfo();
748+
UriMarshalingInfo *pUriMarshalingInfo = GetAppDomain()->GetLoaderAllocator()->GetMarshalingData()->GetUriMarshalingInfo();
749749
MethodDesc* pSystemUriCtorMD = pUriMarshalingInfo->GetSystemUriCtorMD();
750750

751751
MethodTable *pMTSystemUri = pUriMarshalingInfo->GetSystemUriType().AsMethodTable();
@@ -787,7 +787,7 @@ void COMInterfaceMarshaler::MarshalToNonRCWType(OBJECTREF *poref)
787787
case WinMDAdapter::RedirectedTypeIndex_System_ComponentModel_PropertyChangedEventArgs:
788788
{
789789
MethodDesc *pMD;
790-
EventArgsMarshalingInfo *pInfo = GetAppDomain()->GetMarshalingData()->GetEventArgsMarshalingInfo();
790+
EventArgsMarshalingInfo *pInfo = GetAppDomain()->GetLoaderAllocator()->GetMarshalingData()->GetEventArgsMarshalingInfo();
791791

792792
if (index == WinMDAdapter::RedirectedTypeIndex_System_Collections_Specialized_NotifyCollectionChangedEventArgs)
793793
pMD = pInfo->GetWinRTNCCEventArgsToSystemNCCEventArgsMD();

src/vm/custommarshalerinfo.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
// Implementation of the custom marshaler info class.
2424
//==========================================================================
2525

26-
CustomMarshalerInfo::CustomMarshalerInfo(BaseDomain *pDomain, TypeHandle hndCustomMarshalerType, TypeHandle hndManagedType, LPCUTF8 strCookie, DWORD cCookieStrBytes)
26+
CustomMarshalerInfo::CustomMarshalerInfo(LoaderAllocator *pLoaderAllocator, TypeHandle hndCustomMarshalerType, TypeHandle hndManagedType, LPCUTF8 strCookie, DWORD cCookieStrBytes)
2727
: m_NativeSize(0)
2828
, m_hndManagedType(hndManagedType)
2929
, m_hndCustomMarshaler(NULL)
@@ -38,7 +38,7 @@ CustomMarshalerInfo::CustomMarshalerInfo(BaseDomain *pDomain, TypeHandle hndCust
3838
THROWS;
3939
GC_TRIGGERS;
4040
MODE_COOPERATIVE;
41-
PRECONDITION(CheckPointer(pDomain));
41+
PRECONDITION(CheckPointer(pLoaderAllocator));
4242
}
4343
CONTRACTL_END;
4444

@@ -112,7 +112,7 @@ CustomMarshalerInfo::CustomMarshalerInfo(BaseDomain *pDomain, TypeHandle hndCust
112112
IDS_EE_NOCUSTOMMARSHALER,
113113
GetFullyQualifiedNameForClassW(hndCustomMarshalerType.GetMethodTable()));
114114
}
115-
m_hndCustomMarshaler = pDomain->CreateHandle(CustomMarshalerObj);
115+
m_hndCustomMarshaler = pLoaderAllocator->GetDomain()->CreateHandle(CustomMarshalerObj);
116116

117117
// Retrieve the size of the native data.
118118
if (m_bDataIsByValue)
@@ -628,7 +628,7 @@ CustomMarshalerInfo *SharedCustomMarshalerHelper::GetCustomMarshalerInfo()
628628
CONTRACTL_END;
629629

630630
// Retrieve the marshalling data for the current app domain.
631-
EEMarshalingData *pMarshalingData = GetThread()->GetDomain()->GetMarshalingData();
631+
EEMarshalingData *pMarshalingData = GetThread()->GetDomain()->GetLoaderAllocator()->GetMarshalingData();
632632

633633
// Retrieve the custom marshaling information for the current shared custom
634634
// marshaling helper.

src/vm/custommarshalerinfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class CustomMarshalerInfo
3636
{
3737
public:
3838
// Constructor and destructor.
39-
CustomMarshalerInfo(BaseDomain* pDomain, TypeHandle hndCustomMarshalerType, TypeHandle hndManagedType, LPCUTF8 strCookie, DWORD cCookieStrBytes);
39+
CustomMarshalerInfo(LoaderAllocator* pLoaderAllocator, TypeHandle hndCustomMarshalerType, TypeHandle hndManagedType, LPCUTF8 strCookie, DWORD cCookieStrBytes);
4040
~CustomMarshalerInfo();
4141

4242
// CustomMarshalerInfo's are always allocated on the loader heap so we need to redefine

src/vm/dispparammarshaler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ void DispParamOleColorMarshaler::MarshalNativeToManaged(VARIANT *pSrcVar, OBJECT
102102

103103
// Box the System.Drawing.Color value class and give back the boxed object.
104104
TypeHandle hndColorType =
105-
GetThread()->GetDomain()->GetMarshalingData()->GetOleColorMarshalingInfo()->GetColorType();
105+
GetThread()->GetDomain()->GetLoaderAllocator()->GetMarshalingData()->GetOleColorMarshalingInfo()->GetColorType();
106106

107107
*pDestObj = hndColorType.GetMethodTable()->Box(&MngColor);
108108
}

src/vm/ilmarshalers.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1521,7 +1521,7 @@ LocalDesc ILOleColorMarshaler::GetManagedType()
15211521
STANDARD_VM_CONTRACT;
15221522

15231523
BaseDomain* pDomain = m_pargs->m_pMarshalInfo->GetModule()->GetDomain();
1524-
TypeHandle hndColorType = pDomain->GetMarshalingData()->GetOleColorMarshalingInfo()->GetColorType();
1524+
TypeHandle hndColorType = pDomain->GetLoaderAllocator()->GetMarshalingData()->GetOleColorMarshalingInfo()->GetColorType();
15251525

15261526
//
15271527
// value class
@@ -1534,7 +1534,7 @@ void ILOleColorMarshaler::EmitConvertContentsCLRToNative(ILCodeStream* pslILEmit
15341534
STANDARD_VM_CONTRACT;
15351535

15361536
BaseDomain* pDomain = m_pargs->m_pMarshalInfo->GetModule()->GetDomain();
1537-
MethodDesc* pConvertMD = pDomain->GetMarshalingData()->GetOleColorMarshalingInfo()->GetSystemColorToOleColorMD();
1537+
MethodDesc* pConvertMD = pDomain->GetLoaderAllocator()->GetMarshalingData()->GetOleColorMarshalingInfo()->GetSystemColorToOleColorMD();
15381538

15391539
EmitLoadManagedValue(pslILEmit);
15401540
// int System.Drawing.ColorTranslator.ToOle(System.Drawing.Color c)
@@ -1547,7 +1547,7 @@ void ILOleColorMarshaler::EmitConvertContentsNativeToCLR(ILCodeStream* pslILEmit
15471547
STANDARD_VM_CONTRACT;
15481548

15491549
BaseDomain* pDomain = m_pargs->m_pMarshalInfo->GetModule()->GetDomain();
1550-
MethodDesc* pConvertMD = pDomain->GetMarshalingData()->GetOleColorMarshalingInfo()->GetOleColorToSystemColorMD();
1550+
MethodDesc* pConvertMD = pDomain->GetLoaderAllocator()->GetMarshalingData()->GetOleColorMarshalingInfo()->GetOleColorToSystemColorMD();
15511551

15521552
EmitLoadNativeValue(pslILEmit);
15531553
// System.Drawing.Color System.Drawing.ColorTranslator.FromOle(int oleColor)
@@ -5676,7 +5676,7 @@ LocalDesc ILUriMarshaler::GetManagedType()
56765676
{
56775677
STANDARD_VM_CONTRACT;;
56785678
BaseDomain* pDomain = m_pargs->m_pMarshalInfo->GetModule()->GetDomain();
5679-
TypeHandle hndUriType = pDomain->GetMarshalingData()->GetUriMarshalingInfo()->GetSystemUriType();
5679+
TypeHandle hndUriType = pDomain->GetLoaderAllocator()->GetMarshalingData()->GetUriMarshalingInfo()->GetSystemUriType();
56805680

56815681
return LocalDesc(hndUriType); // System.Uri
56825682
}
@@ -5693,7 +5693,7 @@ void ILUriMarshaler::EmitConvertCLRUriToWinRTUri(ILCodeStream* pslILEmit, BaseDo
56935693
{
56945694
STANDARD_VM_CONTRACT;
56955695

5696-
UriMarshalingInfo* marshalingInfo = pDomain->GetMarshalingData()->GetUriMarshalingInfo();
5696+
UriMarshalingInfo* marshalingInfo = pDomain->GetLoaderAllocator()->GetMarshalingData()->GetUriMarshalingInfo();
56975697

56985698
ILCodeLabel *pNotNullLabel = pslILEmit->NewCodeLabel();
56995699
ILCodeLabel *pDoneLabel = pslILEmit->NewCodeLabel();
@@ -5731,7 +5731,7 @@ void ILUriMarshaler::EmitConvertWinRTUriToCLRUri(ILCodeStream* pslILEmit, BaseDo
57315731
{
57325732
STANDARD_VM_CONTRACT;
57335733

5734-
MethodDesc* pSystemUriCtorMD = pDomain->GetMarshalingData()->GetUriMarshalingInfo()->GetSystemUriCtorMD();
5734+
MethodDesc* pSystemUriCtorMD = pDomain->GetLoaderAllocator()->GetMarshalingData()->GetUriMarshalingInfo()->GetSystemUriCtorMD();
57355735

57365736
ILCodeLabel *pNotNullLabel = pslILEmit->NewCodeLabel();
57375737
ILCodeLabel *pDoneLabel = pslILEmit->NewCodeLabel();
@@ -5784,7 +5784,7 @@ LocalDesc ILNCCEventArgsMarshaler::GetManagedType()
57845784
STANDARD_VM_CONTRACT;;
57855785

57865786
BaseDomain *pDomain = m_pargs->m_pMarshalInfo->GetModule()->GetDomain();
5787-
TypeHandle hndNCCEventArgType = pDomain->GetMarshalingData()->GetEventArgsMarshalingInfo()->GetSystemNCCEventArgsType();
5787+
TypeHandle hndNCCEventArgType = pDomain->GetLoaderAllocator()->GetMarshalingData()->GetEventArgsMarshalingInfo()->GetSystemNCCEventArgsType();
57885788

57895789
return LocalDesc(hndNCCEventArgType); // System.Collections.Specialized.NotifyCollectionChangedEventArgs
57905790
}
@@ -5802,7 +5802,7 @@ void ILNCCEventArgsMarshaler::EmitConvertCLREventArgsToWinRTEventArgs(ILCodeStre
58025802
{
58035803
STANDARD_VM_CONTRACT;
58045804

5805-
MethodDesc *pConvertMD = pDomain->GetMarshalingData()->GetEventArgsMarshalingInfo()->GetSystemNCCEventArgsToWinRTNCCEventArgsMD();
5805+
MethodDesc *pConvertMD = pDomain->GetLoaderAllocator()->GetMarshalingData()->GetEventArgsMarshalingInfo()->GetSystemNCCEventArgsToWinRTNCCEventArgsMD();
58065806

58075807
// IntPtr System.Runtime.InteropServices.WindowsRuntime.NotifyCollectionChangedEventArgsMarshaler.ConvertToNative(NotifyCollectionChangedEventArgs)
58085808
pslILEmit->EmitCALL(pslILEmit->GetToken(pConvertMD), 1, 1);
@@ -5824,7 +5824,7 @@ void ILNCCEventArgsMarshaler::EmitConvertWinRTEventArgsToCLREventArgs(ILCodeStre
58245824
{
58255825
STANDARD_VM_CONTRACT;
58265826

5827-
MethodDesc *pConvertMD = pDomain->GetMarshalingData()->GetEventArgsMarshalingInfo()->GetWinRTNCCEventArgsToSystemNCCEventArgsMD();
5827+
MethodDesc *pConvertMD = pDomain->GetLoaderAllocator()->GetMarshalingData()->GetEventArgsMarshalingInfo()->GetWinRTNCCEventArgsToSystemNCCEventArgsMD();
58285828

58295829
// NotifyCollectionChangedEventArgs System.Runtime.InteropServices.WindowsRuntime.NotifyCollectionChangedEventArgsMarshaler.ConvertToManaged(IntPtr)
58305830
pslILEmit->EmitCALL(pslILEmit->GetToken(pConvertMD), 1, 1);
@@ -5860,7 +5860,7 @@ LocalDesc ILPCEventArgsMarshaler::GetManagedType()
58605860
STANDARD_VM_CONTRACT;;
58615861

58625862
BaseDomain *pDomain = m_pargs->m_pMarshalInfo->GetModule()->GetDomain();
5863-
TypeHandle hndPCEventArgType = pDomain->GetMarshalingData()->GetEventArgsMarshalingInfo()->GetSystemPCEventArgsType();
5863+
TypeHandle hndPCEventArgType = pDomain->GetLoaderAllocator()->GetMarshalingData()->GetEventArgsMarshalingInfo()->GetSystemPCEventArgsType();
58645864

58655865
return LocalDesc(hndPCEventArgType); // System.ComponentModel.PropertyChangedEventArgs
58665866
}
@@ -5878,7 +5878,7 @@ void ILPCEventArgsMarshaler::EmitConvertCLREventArgsToWinRTEventArgs(ILCodeStrea
58785878
{
58795879
STANDARD_VM_CONTRACT;
58805880

5881-
MethodDesc *pConvertMD = pDomain->GetMarshalingData()->GetEventArgsMarshalingInfo()->GetSystemPCEventArgsToWinRTPCEventArgsMD();
5881+
MethodDesc *pConvertMD = pDomain->GetLoaderAllocator()->GetMarshalingData()->GetEventArgsMarshalingInfo()->GetSystemPCEventArgsToWinRTPCEventArgsMD();
58825882

58835883
// IntPtr System.Runtime.InteropServices.WindowsRuntime.PropertyChangedEventArgsMarshaler.ConvertToNative(PropertyChangedEventArgs)
58845884
pslILEmit->EmitCALL(pslILEmit->GetToken(pConvertMD), 1, 1);
@@ -5900,7 +5900,7 @@ void ILPCEventArgsMarshaler::EmitConvertWinRTEventArgsToCLREventArgs(ILCodeStrea
59005900
{
59015901
STANDARD_VM_CONTRACT;
59025902

5903-
MethodDesc *pConvertMD = pDomain->GetMarshalingData()->GetEventArgsMarshalingInfo()->GetWinRTPCEventArgsToSystemPCEventArgsMD();
5903+
MethodDesc *pConvertMD = pDomain->GetLoaderAllocator()->GetMarshalingData()->GetEventArgsMarshalingInfo()->GetWinRTPCEventArgsToSystemPCEventArgsMD();
59045904

59055905
// PropertyChangedEventArgs System.Runtime.InteropServices.WindowsRuntime.PropertyChangedEventArgsMarshaler.ConvertToManaged(IntPtr)
59065906
pslILEmit->EmitCALL(pslILEmit->GetToken(pConvertMD), 1, 1);

src/vm/interopconverter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ IUnknown *GetComIPFromObjectRef(OBJECTREF *poref, ComIpType ReqIpType, ComIpType
207207
// This is a redirected type - see if we need to manually marshal it
208208
if (redirectedTypeIndex == WinMDAdapter::RedirectedTypeIndex_System_Uri)
209209
{
210-
UriMarshalingInfo *pUriMarshalInfo = GetAppDomain()->GetMarshalingData()->GetUriMarshalingInfo();
210+
UriMarshalingInfo *pUriMarshalInfo = GetAppDomain()->GetLoaderAllocator()->GetMarshalingData()->GetUriMarshalingInfo();
211211
struct
212212
{
213213
OBJECTREF ref;
@@ -241,7 +241,7 @@ IUnknown *GetComIPFromObjectRef(OBJECTREF *poref, ComIpType ReqIpType, ComIpType
241241
redirectedTypeIndex == WinMDAdapter::RedirectedTypeIndex_System_ComponentModel_PropertyChangedEventArgs)
242242
{
243243
MethodDesc *pMD;
244-
EventArgsMarshalingInfo *pInfo = GetAppDomain()->GetMarshalingData()->GetEventArgsMarshalingInfo();
244+
EventArgsMarshalingInfo *pInfo = GetAppDomain()->GetLoaderAllocator()->GetMarshalingData()->GetEventArgsMarshalingInfo();
245245

246246
if (redirectedTypeIndex == WinMDAdapter::RedirectedTypeIndex_System_Collections_Specialized_NotifyCollectionChangedEventArgs)
247247
pMD = pInfo->GetSystemNCCEventArgsToWinRTNCCEventArgsMD();

src/vm/interoputil.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3261,7 +3261,7 @@ void ConvertOleColorToSystemColor(OLE_COLOR SrcOleColor, SYSTEMCOLOR *pDestSysCo
32613261

32623262
// Retrieve the method desc to use for the current AD.
32633263
MethodDesc *pOleColorToSystemColorMD =
3264-
GetAppDomain()->GetMarshalingData()->GetOleColorMarshalingInfo()->GetOleColorToSystemColorMD();
3264+
GetAppDomain()->GetLoaderAllocator()->GetMarshalingData()->GetOleColorMarshalingInfo()->GetOleColorToSystemColorMD();
32653265

32663266
MethodDescCallSite oleColorToSystemColor(pOleColorToSystemColorMD);
32673267

@@ -3290,7 +3290,7 @@ OLE_COLOR ConvertSystemColorToOleColor(OBJECTREF *pSrcObj)
32903290

32913291
// Retrieve the method desc to use for the current AD.
32923292
MethodDesc *pSystemColorToOleColorMD =
3293-
GetAppDomain()->GetMarshalingData()->GetOleColorMarshalingInfo()->GetSystemColorToOleColorMD();
3293+
GetAppDomain()->GetLoaderAllocator()->GetMarshalingData()->GetOleColorMarshalingInfo()->GetSystemColorToOleColorMD();
32943294
MethodDescCallSite systemColorToOleColor(pSystemColorToOleColorMD);
32953295

32963296
// Set up the args and call the method.
@@ -6732,7 +6732,7 @@ ABI::Windows::Foundation::IUriRuntimeClass *CreateWinRTUri(LPCWSTR wszUri, INT32
67326732
{
67336733
STANDARD_VM_CONTRACT;
67346734

6735-
UriMarshalingInfo* marshalingInfo = GetAppDomain()->GetMarshalingData()->GetUriMarshalingInfo();
6735+
UriMarshalingInfo* marshalingInfo = GetAppDomain()->GetLoaderAllocator()->GetMarshalingData()->GetUriMarshalingInfo();
67366736

67376737
// Get the cached factory from the UriMarshalingInfo object of the current appdomain
67386738
ABI::Windows::Foundation::IUriRuntimeClassFactory* pFactory = marshalingInfo->GetUriFactory();

0 commit comments

Comments
 (0)