/// <summary>
        /// Finds the appropriate toolchain-generated proxy instance class for the given
        /// interface and proxy class.
        /// </summary>
        /// <param name="proxyClassTypeHandle">The proxy class the proxy instance class derives from/
        /// forwards its method calls to.</param>
        /// <param name="interfaceTypeHandle">The interface that the proxy instance class
        /// implements.</param>
        /// <returns>The type handle for the requested proxy instance class type.</returns>
        /// <exception cref="System.Reflection.DispatchProxyInstanceNotFoundException">
        /// Thrown when no generated proxy instance class exists for the requested proxy class
        /// and interface class types.
        /// </exception>
        public static RuntimeTypeHandle GetConcreteProxyType(RuntimeTypeHandle proxyClassTypeHandle,
                                                             RuntimeTypeHandle interfaceTypeHandle)
        {
            for (int i = 0; i < s_entryTable.Length; i++)
            {
                if ((s_entryTable[i].ProxyClassType.Equals(proxyClassTypeHandle)) &&
                    (s_entryTable[i].InterfaceType.Equals(interfaceTypeHandle)))
                {
                    return s_entryTable[i].ImplementationClassType;
                }
            }

            throw new DispatchProxyInstanceNotFoundException(
                "Could not find an DispatchProxy implementation class for the interface type '" +
                interfaceTypeHandle.ToString() + "' and the proxy class type '" +
                proxyClassTypeHandle.ToString() + "'."
            );
        }