@@ -9095,23 +9095,39 @@ AbiToProjectionVftablePtr = ComWrappersSupport.AllocateVtableMemory(typeof(@), s
9095
9095
else
9096
9096
{
9097
9097
w.write (R"(
9098
+ if (!RuntimeFeature.IsDynamicCodeCompiled)
9099
+ {
9100
+ AbiToProjectionVftablePtr = %.AbiToProjectionVftablePtr;
9101
+ }
9102
+ else
9103
+ {
9104
+ #if NET8_0_OR_GREATER
9105
+ [RequiresDynamicCode("Generic instantiations might not be available in AOT scenarios.")]
9106
+ #endif
9107
+ [MethodImpl(MethodImplOptions.NoInlining)]
9108
+ static void InitializeAbiToProjectionVftablePtrFallback()
9109
+ {
9098
9110
%
9099
9111
9100
- if (RuntimeFeature.IsDynamicCodeCompiled && %.AbiToProjectionVftablePtr == default)
9112
+ if (%.AbiToProjectionVftablePtr == default)
9101
9113
{
9102
- AbiInvokeDelegate = %;
9103
- AbiToProjectionVftablePtr = ComWrappersSupport.AllocateVtableMemory(typeof(@%), sizeof(IntPtr) * 4);
9104
- *(global::WinRT.Interop.IUnknownVftbl*)AbiToProjectionVftablePtr = global::WinRT.Interop.IUnknownVftbl.AbiToProjectionVftbl;
9105
- ((IntPtr*)AbiToProjectionVftablePtr)[3] = Marshal.GetFunctionPointerForDelegate(AbiInvokeDelegate);
9114
+ AbiInvokeDelegate = %;
9115
+ AbiToProjectionVftablePtr = ComWrappersSupport.AllocateVtableMemory(typeof(@%), sizeof(IntPtr) * 4);
9116
+ *(global::WinRT.Interop.IUnknownVftbl*)AbiToProjectionVftablePtr = global::WinRT.Interop.IUnknownVftbl.AbiToProjectionVftbl;
9117
+ ((IntPtr*)AbiToProjectionVftablePtr)[3] = Marshal.GetFunctionPointerForDelegate(AbiInvokeDelegate);
9106
9118
}
9107
9119
else
9108
9120
{
9109
- AbiToProjectionVftablePtr = %.AbiToProjectionVftablePtr;
9121
+ AbiToProjectionVftablePtr = %.AbiToProjectionVftablePtr;
9122
+ }
9123
+ }
9124
+
9125
+ InitializeAbiToProjectionVftablePtrFallback();
9110
9126
}
9111
9127
)" ,
9112
9128
!have_generic_params ? " " :
9113
9129
w.write_temp (R"(
9114
- if (RuntimeFeature.IsDynamicCodeCompiled && (%.AbiToProjectionVftablePtr == default || %._Invoke == default))
9130
+ if ((%.AbiToProjectionVftablePtr == default || %._Invoke == default))
9115
9131
{
9116
9132
Abi_Invoke_Type = Expression.GetDelegateType(new Type[] { typeof(void*), %typeof(int) });
9117
9133
}
0 commit comments