File: Windows.Win32.IVTable.g.cs
Project: src\src\System.Private.Windows.Core\src\System.Private.Windows.Core.csproj (System.Private.Windows.Core)
// ------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------

#pragma warning disable CS1591,CS1573,CS0465,CS0649,CS8019,CS1570,CS1584,CS1658,CS0436,CS8981
using global::System;
using global::System.Diagnostics;
using global::System.Diagnostics.CodeAnalysis;
using global::System.Runtime.CompilerServices;
using global::System.Runtime.InteropServices;
using global::System.Runtime.Versioning;
using winmdroot = global::Windows.Win32;
namespace Windows.Win32
{
	/// <summary>
	/// Non generic interface that allows constraining against a COM wrapper type directly. COM structs should
	/// implement <see cref="IVTable{TComInterface, TVTable}"/>.
	/// </summary>
	internal unsafe interface IVTable
	{
		static abstract System.Com.IUnknown.Vtbl* VTable 		{
			get; 		}
	}
	internal unsafe interface IVTable<TComInterface, TVTable> 		: IVTable
where TVTable : unmanaged
where TComInterface : unmanaged, IVTable<TComInterface, TVTable>
	{
		private protected static abstract void PopulateVTable(TVTable* vtable);


		static System.Com.IUnknown.Vtbl* IVTable.VTable 		{
			get; 		}
= (System.Com.IUnknown.Vtbl*)CreateVTable();


		private static TVTable* CreateVTable()

		{
			TVTable* vtbl = (TVTable*)RuntimeHelpers.AllocateTypeAssociatedMemory(typeof(TVTable), sizeof(TVTable));
			ComHelpers.PopulateIUnknown<TComInterface>((System.Com.IUnknown.Vtbl*)vtbl);
			TComInterface.PopulateVTable(vtbl);
			return vtbl;
		}
	}
}