summaryrefslogtreecommitdiff
path: root/src/vm/assemblynative.cpp
diff options
context:
space:
mode:
authorJeremy Koritzinsky <jkoritzinsky@gmail.com>2019-04-04 11:04:13 -0700
committerGitHub <noreply@github.com>2019-04-04 11:04:13 -0700
commitfdc9998609263d9f531079e2cbe0f3f31eba3382 (patch)
tree2901d0c8a9aae057825289290547b65eaaa489ec /src/vm/assemblynative.cpp
parent8a13881ea1d274067ac03b317fdbd9bcc9369990 (diff)
downloadcoreclr-fdc9998609263d9f531079e2cbe0f3f31eba3382.tar.gz
coreclr-fdc9998609263d9f531079e2cbe0f3f31eba3382.tar.bz2
coreclr-fdc9998609263d9f531079e2cbe0f3f31eba3382.zip
Runtime support for upcoming .NET Core WinRT Host (#23402)
* First pass at adding winrt host entry-point. * There's no way to specify HResult-swapping on a function called via hosted-interop so just return the HResult instead. * Use the WindowsRuntimeMarshal class to create the activation factory and initialize it. * Implement loading the dependent assemblies of a WinRT assembly into an isolated load context. * PR Feedback. * Fail to get the activation factory if the found type is not a managed type exported from a winmd. * Rearrange parameters based on PR feedback. * Remove unneeded include. * Make ActivationFactoryLoader internal. * Fix null-ref in WinRT-dependent-assembly loading * Remove extraneous "System."
Diffstat (limited to 'src/vm/assemblynative.cpp')
-rw-r--r--src/vm/assemblynative.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/vm/assemblynative.cpp b/src/vm/assemblynative.cpp
index eed310aaa6..9c1e467f2f 100644
--- a/src/vm/assemblynative.cpp
+++ b/src/vm/assemblynative.cpp
@@ -426,6 +426,26 @@ void QCALLTYPE AssemblyNative::GetLocation(QCall::AssemblyHandle pAssembly, QCal
END_QCALL;
}
+
+#ifdef FEATURE_COMINTEROP_WINRT_MANAGED_ACTIVATION
+void QCALLTYPE AssemblyNative::LoadTypeForWinRTTypeNameInContext(INT_PTR ptrAssemblyLoadContext, LPCWSTR pwzTypeName, QCall::ObjectHandleOnStack retType)
+{
+ QCALL_CONTRACT;
+
+ BEGIN_QCALL;
+
+ TypeHandle loadedType = WinRTTypeNameConverter::LoadManagedTypeForWinRTTypeName(pwzTypeName, (ICLRPrivBinder*)ptrAssemblyLoadContext, /* pbIsPrimitive */ nullptr);
+
+ if (!loadedType.IsNull())
+ {
+ GCX_COOP();
+ retType.Set(loadedType.GetManagedClassObject());
+ }
+
+ END_QCALL;
+}
+#endif
+
void QCALLTYPE AssemblyNative::GetType(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, BOOL bThrowOnError, BOOL bIgnoreCase, QCall::ObjectHandleOnStack retType, QCall::ObjectHandleOnStack keepAlive)
{
CONTRACTL