/*
 * Copyright (C) 2003 Robert Shearman
 *               2005 Huw Davies
 *
 * 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
 *
 */

[
  uuid(00020430-0000-0000-C000-000000000046),
  version(1.0),
  helpstring("OLE Automation")
]
library stdole
{
	/* typedefs aren't stored in the type library.
           These type names are known by the type compiler so it
           doesn't really matter what we define them as. */

    typedef void *VARIANT;
    typedef wchar_t *BSTR;
    typedef unsigned long SCODE;
    typedef unsigned long HRESULT;
    
    typedef struct GUID {
        unsigned long  Data1;
        unsigned short Data2;
        unsigned short Data3;
        unsigned char  Data4[ 8 ];
    } GUID;

    typedef struct DISPPARAMS {
        VARIANT *rgvarg;
        long *rgdispidNamedArgs;
        unsigned int cArgs;
        unsigned int cNamedArgs;
    } DISPPARAMS;

    typedef struct EXCEPINFO {
        unsigned short wCode;
        unsigned short wReserved;
        BSTR  bstrSource;
        BSTR  bstrDescription;
        BSTR  bstrHelpFile;
        unsigned long dwHelpContext;
        void *pvReserved;
        void *pfnDeferredFillIn;
        SCODE scode;
    } EXCEPINFO;

    [
        odl,
        uuid(00000000-0000-0000-C000-000000000046)
    ]
    interface IUnknown
    {
        [restricted]
        HRESULT QueryInterface(
                               [in] GUID *riid,
                               [out] void **ppvObj);

        [restricted]
        unsigned long AddRef();

        [restricted]
        unsigned long Release();
    }

    [
        odl,
        uuid(00020400-0000-0000-C000-000000000046)
    ]
    interface IDispatch : IUnknown
    {
        [restricted]
        HRESULT GetTypeInfoCount(
                                 [out] unsigned int *pctinfo);

        [restricted]
        HRESULT GetTypeInfo(
                            [in] unsigned int itinfo,
                            [in] unsigned long lcid,
                            [out] void **pptinfo);

        [restricted]
        HRESULT GetIDsOfNames(
                              [in] GUID *riid,
                              [in] char **rgszNames,
                              [in] unsigned int cNames,
                              [in] unsigned long lcid,
                              [out] long *rgdispid);

        [restricted]
        HRESULT Invoke(
                       [in] long dispidMember,
                       [in] GUID *riid,
                       [in] unsigned long lcid,
                       [in] unsigned short wFlags,
                       [in] DISPPARAMS *pdispparams,
                       [out] VARIANT *pvarResult,
                       [out] EXCEPINFO *pexcepinfo,
                       [out] unsigned int *puArgErr);

    }

    [
        odl,
        uuid(00020404-0000-0000-C000-000000000046)
    ]
    interface IEnumVARIANT : IUnknown
    {
        HRESULT Next(
                     [in] unsigned long celt,
                     [in] VARIANT *rgvar,
                     [out] unsigned long *pceltFetched);

        HRESULT Skip(
                     [in] unsigned long celt);

        HRESULT Reset();

        HRESULT Clone(
                      [out] IEnumVARIANT **ppenum);
    }
};
