/*
 * Copyright 2005 Jacek Caban
 *
 * 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
 */

import "ocidl.idl";

cpp_quote("#ifdef ATL_INITGUID")
cpp_quote("#include <initguid.h>")
cpp_quote("#endif")

[
    object,
    oleautomation,
    uuid(44EC053B-400F-11D0-9DCD-00A0C90391D3)
]
interface IRegistrar : IUnknown
{
    HRESULT AddReplacement(
        [in] LPCOLESTR Key,
        [in] LPCOLESTR item);

    HRESULT ClearReplacements();

    HRESULT ResourceRegisterSz(
        [in] LPCOLESTR resFileName,
        [in] LPCOLESTR szID,
        [in] LPCOLESTR szType);

    HRESULT ResourceUnregisterSz(
        [in] LPCOLESTR resFileName,
        [in] LPCOLESTR szID,
        [in] LPCOLESTR szType);

    HRESULT FileRegister(
        [in] LPCOLESTR fileName);

    HRESULT FileUnregister(
        [in] LPCOLESTR fileName);

    HRESULT StringRegister(
        [in] LPCOLESTR data);

    HRESULT StringUnregister(
        [in] LPCOLESTR data);

    HRESULT ResourceRegister(
        [in] LPCOLESTR resFileName,
        [in] UINT nID,
        [in] LPCOLESTR szType);

    HRESULT ResourceUnregister(
        [in] LPCOLESTR resFileName,
        [in] UINT nID,
        [in] LPCOLESTR szType);
}

cpp_quote("DEFINE_GUID(CLSID_Registrar,0x44ec053a,0x400f,0x11d0,0x9d,0xcd,0x00,0xa0,0xc9,0x03,0x91,0xd3);")

cpp_quote("HRESULT WINAPI AtlAxCreateControl(LPCOLESTR,HWND,IStream*,IUnknown**);")
cpp_quote("HRESULT WINAPI AtlAxCreateControlEx(LPCOLESTR,HWND,IStream*,IUnknown**,IUnknown**,REFIID,IUnknown*);")
cpp_quote("BOOL WINAPI AtlAxWinInit(void);")

cpp_quote("HWND WINAPI AtlAxCreateDialogW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);")
cpp_quote("HWND WINAPI AtlAxCreateDialogA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);")
cpp_quote("#define     AtlAxCreateDialog WINELIB_NAME_AW(AtlAxCreateDialog)")
