/*
 * Copyright 2011 Alistair Leslie-Hughes
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

[
    helpstring("Microsoft Common Language Runtime Host V2"),
    threading(both),
    progid("CLRMetaData.CLRRuntimeHost.1"),
    vi_progid("CLRMetaData.CLRRuntimeHost"),
    uuid(90F1A06E-7712-4762-86B5-7A5EBA6BDB01),
]
coclass ICLRRuntimeHost
{
}

[
    helpstring("Microsoft Common Language Runtime Host V2"),
    threading(both),
    progid("CLRMetaData.CLRRuntimeHost.2"),
    vi_progid("CLRMetaData.CLRRuntimeHost"),
    uuid(90F1A06E-7712-4762-86B5-7A5EBA6BDB02),
]
coclass CLRRuntimeHost
{
}

[
    helpstring("Microsoft Common Language Runtime Meta Data"),
    threading(both),
    progid("CLRMetaData.CorMetaDataDispenser.2"),
    vi_progid("CLRMetaData.CorMetaDataDispenser"),
    uuid(E5CB7A31-7512-11D2-89CE-0080C792E5D8),
]
coclass CorMetaDataDispenser
{
}

[
    helpstring("Microsoft Common Language Runtime Meta Data"),
    threading(both),
    progid("CLRMetaData.CorMetaDataDispenserRuntime.2"),
    vi_progid("CLRMetaData.CorMetaDataDispenserRuntime"),
    uuid(1EC2DE53-75CC-11d2-9775-00A0C9B4D50C),
]
coclass CorMetaDataDispenserRuntime
{
}

[
    helpstring("Microsoft Common Language Runtime Host"),
    threading(both),
    progid("CLRMetaData.CorRuntimeHost.2"),
    vi_progid("CLRMetaData.CorRuntimeHost"),
    uuid(CB2F6723-AB3A-11d2-9C40-00C04FA30A3E),
]
coclass CorRuntimeHost
{
}
