/*
 * COM Classes for dmcompos
 *
 * 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
 */

[
    threading(both),
    progid("Microsoft.DirectMusicChordMap.1"),
    vi_progid("Microsoft.DirectMusicChordMap"),
    uuid(d2ac288f-b39b-11d1-8704-00600893b1bd)
]
coclass DirectMusicChordMap { interface IDirectMusicChordMap; }

[
    threading(both),
    progid("Microsoft.DirectMusicComposer.1"),
    vi_progid("Microsoft.DirectMusicComposer"),
    uuid(d2ac2890-b39b-11d1-8704-00600893b1bd)
]
coclass DirectMusicComposer { interface IDirectMusicComposer; }

[
    threading(both),
    progid("Microsoft.DirectMusicChordMapTrack.1"),
    vi_progid("Microsoft.DirectMusicChordMapTrack"),
    uuid(d2ac2896-b39b-11d1-8704-00600893b1bd)
]
coclass DirectMusicChordMapTrack { interface IDirectMusicChordMapTrack; }

[
    threading(both),
    progid("Microsoft.DirectMusicTemplate.1"),
    vi_progid("Microsoft.DirectMusicTemplate"),
    uuid(d30bcc65-60e8-11d1-a7ce-00a0c913f73c)
]
coclass DirectMusicTemplate { interface IDirectMusicTemplate; }

[
    threading(both),
    progid("Microsoft.DirectMusicSignPostTrack.1"),
    vi_progid("Microsoft.DirectMusicSignPostTrack"),
    uuid(f17e8672-c3b4-11d1-870b-00600893b1bd)
]
coclass DirectMusicSignPostTrack { interface IDirectMusicSignPostTrack; }
