ReactOS 0.4.17-dev-966-gf06eace
objsel.c
Go to the documentation of this file.
1/*
2 * Object Picker Dialog
3 *
4 * Copyright (C) 2002 John K. Hohm
5 * Copyright (C) 2002 Robert Shearman
6 * Copyright 2005 Thomas Weidenmueller <w3seek@reactos.com>
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 */
22
23#define COBJMACROS
24#include "objidl.h"
25#include "objsel.h"
26
27#include "wine/debug.h"
28
30
31typedef struct
32{
33 IDsObjectPicker IDsObjectPicker_iface;
36
37/**********************************************************************
38 * OBJSEL_IDsObjectPicker_Destroy (also IUnknown)
39 */
41{
43 0,
44 This);
45}
46
47
48static inline IDsObjectPickerImpl *impl_from_IDsObjectPicker(IDsObjectPicker *iface)
49{
50 return CONTAINING_RECORD(iface, IDsObjectPickerImpl, IDsObjectPicker_iface);
51}
52
53/**********************************************************************
54 * OBJSEL_IDsObjectPicker_AddRef (also IUnknown)
55 */
56static ULONG WINAPI OBJSEL_IDsObjectPicker_AddRef(IDsObjectPicker * iface)
57{
59
60 TRACE("\n");
61
62 return InterlockedIncrement(&This->ref);
63}
64
65
66/**********************************************************************
67 * OBJSEL_IDsObjectPicker_Release (also IUnknown)
68 */
69static ULONG WINAPI OBJSEL_IDsObjectPicker_Release(IDsObjectPicker * iface)
70{
72 ULONG ref;
73
74 TRACE("\n");
75
77
78 if (ref == 0)
80
81 return ref;
82}
83
84
85/**********************************************************************
86 * OBJSEL_IDsObjectPicker_QueryInterface (also IUnknown)
87 */
89 IDsObjectPicker * iface,
91 LPVOID *ppvObj)
92{
93 TRACE("\n\tIID:\t%s\n",debugstr_guid(riid));
94
95 if (ppvObj == NULL) return E_POINTER;
96
98 IsEqualGUID(riid, &IID_IDsObjectPicker))
99 {
100 *ppvObj = iface;
102 return S_OK;
103 }
104
105 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
106 return E_NOINTERFACE;
107}
108
109
110/**********************************************************************
111 * OBJSEL_IDsObjectPicker_Initialize
112 */
114 IDsObjectPicker * iface,
115 PDSOP_INIT_INFO pInitInfo)
116{
117 FIXME("stub!\n");
118 return S_OK;
119}
120
121
122/**********************************************************************
123 * OBJSEL_IDsObjectPicker_InvokeDialog
124 */
126 IDsObjectPicker * iface,
128 IDataObject** ppdoSelections)
129{
130 FIXME("stub!\n");
131 return S_FALSE;
132}
133
134
135/**********************************************************************
136 * IDsObjectPicker_Vtbl
137 */
138static IDsObjectPickerVtbl IDsObjectPicker_Vtbl =
139{
145};
146
147
148static HRESULT object_picker_create(void **ppvObj)
149{
152 sizeof(IDsObjectPickerImpl));
153 if (Instance != NULL)
154 {
155 Instance->IDsObjectPicker_iface.lpVtbl = &IDsObjectPicker_Vtbl;
156 OBJSEL_IDsObjectPicker_AddRef(&Instance->IDsObjectPicker_iface);
157
158 *ppvObj = Instance;
159 return S_OK;
160 }
161 else
162 return E_OUTOFMEMORY;
163}
164
165
166struct class_factory
167{
169 LONG ref;
170};
171
172
174{
176}
177
178
180{
181 TRACE("iid %s, out %p.\n", debugstr_guid(iid), out);
182
183 if (!out)
184 return E_POINTER;
185
187 {
188 *out = iface;
189 IClassFactory_AddRef(iface);
190 return S_OK;
191 }
192
193 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
194 return E_NOINTERFACE;
195}
196
197
199{
201
202 TRACE("\n");
203
205}
206
207
209{
211
212 TRACE("\n");
213
215}
216
217
219 IUnknown *outer, REFIID iid, void **out)
220{
221 TRACE("outer %p, iid %s, out %p.\n", outer, debugstr_guid(iid), out);
222
223 if (!out)
224 return E_POINTER;
225
226 if (outer)
228
229 if (IsEqualGUID(&IID_IDsObjectPicker, iid))
231
233}
234
235
237{
238 TRACE("lock %d.\n", lock);
239
240 if (lock)
241 IClassFactory_AddRef(iface);
242 else
243 IClassFactory_Release(iface);
244 return S_OK;
245}
246
247
248static IClassFactoryVtbl class_factory_vtbl =
249{
255};
256
257
259
260/***********************************************************************
261 * DllGetClassObject (OBJSEL.@)
262 */
264{
265 TRACE("clsid %s, iid %s, out %p.\n", debugstr_guid(clsid), debugstr_guid(iid), out);
266
267 *out = NULL;
268
269 if (IsEqualGUID(clsid, &CLSID_DsObjectPicker))
270 return IClassFactory_QueryInterface(&class_factory.IClassFactory_iface, iid, out);
271
272 FIXME("%s not available, returning CLASS_E_CLASSNOTAVAILABLE.\n", debugstr_guid(clsid));
274}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
const GUID IID_IClassFactory
static HWND hwndParent
Definition: cryptui.c:299
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define NULL
Definition: types.h:112
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
unsigned int BOOL
Definition: ntddk_ex.h:94
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
static IUnknown * outer
Definition: compobj.c:82
const CLSID * clsid
Definition: msctf.cpp:50
static VOID OBJSEL_IDsObjectPicker_Destroy(IDsObjectPickerImpl *This)
Definition: objsel.c:40
static HRESULT WINAPI OBJSEL_IDsObjectPicker_Initialize(IDsObjectPicker *iface, PDSOP_INIT_INFO pInitInfo)
Definition: objsel.c:113
static HRESULT WINAPI OBJSEL_IDsObjectPicker_QueryInterface(IDsObjectPicker *iface, REFIID riid, LPVOID *ppvObj)
Definition: objsel.c:88
HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out)
Definition: objsel.c:263
static ULONG WINAPI OBJSEL_IDsObjectPicker_Release(IDsObjectPicker *iface)
Definition: objsel.c:69
static IDsObjectPickerImpl * impl_from_IDsObjectPicker(IDsObjectPicker *iface)
Definition: objsel.c:48
static ULONG WINAPI class_factory_Release(IClassFactory *iface)
Definition: objsel.c:208
static ULONG WINAPI OBJSEL_IDsObjectPicker_AddRef(IDsObjectPicker *iface)
Definition: objsel.c:56
static HRESULT object_picker_create(void **ppvObj)
Definition: objsel.c:148
static IClassFactoryVtbl class_factory_vtbl
Definition: objsel.c:248
static HRESULT WINAPI class_factory_LockServer(IClassFactory *iface, BOOL lock)
Definition: objsel.c:236
static HRESULT WINAPI class_factory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID iid, void **out)
Definition: objsel.c:218
static IDsObjectPickerVtbl IDsObjectPicker_Vtbl
Definition: objsel.c:138
static HRESULT WINAPI OBJSEL_IDsObjectPicker_InvokeDialog(IDsObjectPicker *iface, HWND hwndParent, IDataObject **ppdoSelections)
Definition: objsel.c:125
static ULONG WINAPI class_factory_AddRef(IClassFactory *iface)
Definition: objsel.c:198
static struct class_factory * impl_from_IClassFactory(IClassFactory *iface)
Definition: objsel.c:173
static HRESULT WINAPI class_factory_QueryInterface(IClassFactory *iface, REFIID iid, void **out)
Definition: objsel.c:179
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
#define TRACE(s)
Definition: solgame.cpp:4
IDsObjectPicker IDsObjectPicker_iface
Definition: objsel.c:33
IClassFactory IClassFactory_iface
Definition: devenum_main.c:30
Definition: main.c:439
Definition: send.c:48
rwlock_t lock
Definition: tcpcore.h:0
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_WMI_INSTANCE_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_opt_ WDFWMIINSTANCE * Instance
Definition: wdfwmi.h:481
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
#define E_NOINTERFACE
Definition: winerror.h:3479
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771
#define E_POINTER
Definition: winerror.h:3480
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772