/*
 * ITypeLib test IDL - we dump it and compare results in typelib.c
 *
 * Copyright 2007 Google (Mikolaj Zalewski)
 *
 * 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 ident
#pragma makedep typelib

import "oaidl.idl"; /* needed by widl */

[uuid(8b05fe77-4a6c-4133-b9cd-8f81747af784)]
library Test
{
	importlib("stdole2.tlb");

	[dual,uuid(b14b6bb5-904e-4ff9-b247-bd361f7aaedd)]
	interface IDualIface : IDispatch
	{
		HRESULT test();
	}

	[uuid(ec5dfcd6-eeb0-4cd6-b51e-8030e1dac009)]
	interface ISimpleIface : IDispatch
	{
		HRESULT test();
	}

	[uuid(4029f190-ca4a-4611-aeb9-673983cb96dd)]
	struct test_struct
	{
		HRESULT hr;
		VARIANT_BOOL b;
		IDispatch *disp;
		BSTR bstr;
	};
}
