/*
 * COM Classes for mlang
 *
 * Copyright 2010 Alexandre Julliard
 *
 * 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
 */

#pragma makedep register

[
    helpstring("Multi Language Support"),
    threading(both),
    uuid(275c23e2-3747-11d0-9fea-00aa003f8646)
]
coclass CMultiLanguage { interface IMultiLanguage; }

[
    helpstring("Multi Language String"),
    threading(both),
    uuid(c04d65cf-b70d-11d0-b188-00aa0038c969)
]
coclass CMLangString { interface IMultiLanguage; }

[
    helpstring("Multi Language ConvertCharset"),
    threading(both),
    uuid(d66d6f99-cdaa-11d0-b822-00c04fc9b31f)
]
coclass CMLangConvertCharset { interface IMultiLanguage; }
