/*
 * Copyright 2012 Jacek Caban for CodeWeavers
 *
 * 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 typelib

import "oaidl.idl";

[
    version(1.0),
    uuid(fb137422-de47-4630-848d-a20ccae34725)
]
library MSHTMLTest {
    importlib("stdole2.tlb");

    [
        oleautomation,
        odl,
        uuid(e0d1ce9d-e916-4723-ace5-888c3537de78),
        dual
    ]
    interface IActiveXTest : IDispatch {
        HRESULT nothinginteresting();
    }

    [
        uuid(0d853edb-cb70-447e-9d8a-b9661c5da56f)
    ]
    dispinterface DispActiveXTest {
    properties:
    methods:
        [id(1)] long testfunc();
        [id(2)] long testfunc2(long a, long b);
    }

    [
        uuid(ba9d587b-1aad-4192-a29a-99bd5f7482c3)
    ]
    coclass ActiveXTest {
        [default] interface IActiveXTest;
        [source, default] interface DispActiveXTest;
    }
}
