blob: 9484adb06a31075a43532d514dd268734d87abfb [file] [log] [blame]
Alexandre Julliard0799c1a2002-03-09 23:29:33 +00001/*
2 * Copyright (C) 1998 François Gouget
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 */
18
François Gougetd604eb11998-12-18 16:00:03 +000019#ifndef __WINE_OBJBASE_H
20#define __WINE_OBJBASE_H
21
Paul Quinnaaa83061999-06-05 15:23:20 +000022#define _OBJBASE_H_
François Gougetd604eb11998-12-18 16:00:03 +000023
Francois Gouget71889162000-11-15 22:12:48 +000024#include "unknwn.h"
Alexandre Julliard638f1691999-01-17 16:32:32 +000025
26/* the following depend only on obj_base.h */
Francois Gouget8a259442001-05-07 18:20:32 +000027#include "wine/obj_base.h"
Alexandre Julliard638f1691999-01-17 16:32:32 +000028#include "wine/obj_misc.h"
29#include "wine/obj_channel.h"
30#include "wine/obj_clientserver.h"
Alexandre Julliard638f1691999-01-17 16:32:32 +000031#include "wine/obj_storage.h"
32
33/* the following depend on obj_storage.h */
Francois Gouget6ccda0d1999-02-13 12:25:03 +000034#include "wine/obj_marshal.h"
Alexandre Julliard638f1691999-01-17 16:32:32 +000035#include "wine/obj_moniker.h"
36#include "wine/obj_propertystorage.h"
37
38/* the following depend on obj_moniker.h */
39#include "wine/obj_dataobject.h"
40
Paul Quinnea1640f1999-03-10 18:03:53 +000041#include "wine/obj_dragdrop.h"
42
Francois Gougetf2973ca2000-09-22 22:17:49 +000043#ifndef RC_INVOKED
44/* For compatibility only, at least for now */
45#include <stdlib.h>
46#endif
47
Peter Hunnisett3d7cd872001-04-12 21:10:54 +000048#ifndef INITGUID
François Gouget504973d2001-01-02 20:55:40 +000049#include "cguid.h"
Peter Hunnisett3d7cd872001-04-12 21:10:54 +000050#endif
François Gouget504973d2001-01-02 20:55:40 +000051
Francois Gouget00628922000-10-19 20:32:18 +000052#ifdef __cplusplus
53extern "C" {
54#endif
55
François Gouget9a8c2e22000-12-15 21:29:41 +000056HRESULT WINAPI GetClassFile(LPCOLESTR filePathName,CLSID *pclsid);
Noomen Hamzaed494ec1999-03-23 13:48:56 +000057
Francois Gouget00628922000-10-19 20:32:18 +000058#ifdef __cplusplus
59}
60#endif
61
François Gouget42b3ee72000-12-19 02:09:52 +000062#ifndef __WINE__
63/* These macros are msdev's way of defining COM objects.
64 * They are provided here for use by Winelib developpers.
Adrian Thurstonc9105da1999-04-22 14:56:14 +000065 */
Paul Quinnaaa83061999-06-05 15:23:20 +000066#define FARSTRUCT
67#define HUGEP
68
Paul Quinnea1640f1999-03-10 18:03:53 +000069#define WINOLEAPI STDAPI
70#define WINOLEAPI_(type) STDAPI_(type)
71
Paul Quinnea1640f1999-03-10 18:03:53 +000072#if defined(__cplusplus) && !defined(CINTERFACE)
73#define interface struct
74#define STDMETHOD(method) virtual HRESULT STDMETHODCALLTYPE method
75#define STDMETHOD_(type,method) virtual type STDMETHODCALLTYPE method
76#define PURE = 0
77#define THIS_
78#define THIS void
79#define DECLARE_INTERFACE(iface) interface iface
80#define DECLARE_INTERFACE_(iface, baseiface) interface iface : public baseiface
81
Adrian Thurstonc9105da1999-04-22 14:56:14 +000082#define BEGIN_INTERFACE
83#define END_INTERFACE
Paul Quinnea1640f1999-03-10 18:03:53 +000084
85#else
86
87#define interface struct
Francois Gouget6fbbe0f2000-06-16 21:48:24 +000088#define STDMETHOD(method) HRESULT STDMETHODCALLTYPE (*method)
89#define STDMETHOD_(type,method) type STDMETHODCALLTYPE (*method)
Paul Quinnea1640f1999-03-10 18:03:53 +000090#define PURE
91#define THIS_ INTERFACE FAR* This,
92#define THIS INTERFACE FAR* This
Adrian Thurstonc9105da1999-04-22 14:56:14 +000093
Paul Quinnea1640f1999-03-10 18:03:53 +000094#ifdef CONST_VTABLE
95#undef CONST_VTBL
96#define CONST_VTBL const
Adrian Thurstonc9105da1999-04-22 14:56:14 +000097#define DECLARE_INTERFACE(iface) \
98 typedef interface iface { const struct iface##Vtbl FAR* lpVtbl; } iface; \
99 typedef const struct iface##Vtbl iface##Vtbl; \
100 const struct iface##Vtbl
Paul Quinnea1640f1999-03-10 18:03:53 +0000101#else
102#undef CONST_VTBL
103#define CONST_VTBL
Adrian Thurstonc9105da1999-04-22 14:56:14 +0000104#define DECLARE_INTERFACE(iface) \
105 typedef interface iface { struct iface##Vtbl FAR* lpVtbl; } iface; \
106 typedef struct iface##Vtbl iface##Vtbl; \
107 struct iface##Vtbl
Paul Quinnea1640f1999-03-10 18:03:53 +0000108#endif
109#define DECLARE_INTERFACE_(iface, baseiface) DECLARE_INTERFACE(iface)
110
Adrian Thurstonc9105da1999-04-22 14:56:14 +0000111#define BEGIN_INTERFACE
112#define END_INTERFACE
113
François Gouget42b3ee72000-12-19 02:09:52 +0000114#endif /* __cplusplus && !CINTERFACE */
115
116#endif /* __WINE__ */
François Gougetd604eb11998-12-18 16:00:03 +0000117
118#endif /* __WINE_OBJBASE_H */