wined3d: Avoid superfluous wglSwapIntervalEXT() calls.
[wine.git] / dlls / oledb32 / dslocator.c
blobd397e47aa50f5a6156425cdd77847dfda673df74
1 /* Data Links
3 * Copyright 2013 Alistair Leslie-Hughes
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #include <stdarg.h>
20 #include <string.h>
22 #define COBJMACROS
24 #include "windef.h"
25 #include "winbase.h"
26 #include "objbase.h"
27 #include "oleauto.h"
28 #include "winerror.h"
29 #include "oledb.h"
30 #include "oledberr.h"
31 #include "msdasc.h"
33 #include "oledb_private.h"
35 #include "wine/debug.h"
36 #include "wine/heap.h"
38 WINE_DEFAULT_DEBUG_CHANNEL(oledb);
41 typedef struct DSLocatorImpl
43 IDataSourceLocator IDataSourceLocator_iface;
44 IDataInitialize IDataInitialize_iface;
45 LONG ref;
47 HWND hwnd;
48 } DSLocatorImpl;
50 static inline DSLocatorImpl *impl_from_IDataSourceLocator( IDataSourceLocator *iface )
52 return CONTAINING_RECORD(iface, DSLocatorImpl, IDataSourceLocator_iface);
55 static inline DSLocatorImpl *impl_from_IDataInitialize(IDataInitialize *iface)
57 return CONTAINING_RECORD(iface, DSLocatorImpl, IDataInitialize_iface);
60 static HRESULT WINAPI dslocator_QueryInterface(IDataSourceLocator *iface, REFIID riid, void **ppvoid)
62 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
63 TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid),ppvoid);
65 *ppvoid = NULL;
67 if (IsEqualIID(riid, &IID_IUnknown) ||
68 IsEqualIID(riid, &IID_IDispatch) ||
69 IsEqualIID(riid, &IID_IDataSourceLocator))
71 *ppvoid = &This->IDataSourceLocator_iface;
73 else if (IsEqualIID(riid, &IID_IDataInitialize))
75 *ppvoid = &This->IDataInitialize_iface;
77 else if (IsEqualIID(riid, &IID_IRunnableObject))
79 TRACE("IID_IRunnableObject returning NULL\n");
80 return E_NOINTERFACE;
82 else if (IsEqualIID(riid, &IID_IProvideClassInfo))
84 TRACE("IID_IProvideClassInfo returning NULL\n");
85 return E_NOINTERFACE;
87 else if (IsEqualIID(riid, &IID_IMarshal))
89 TRACE("IID_IMarshal returning NULL\n");
90 return E_NOINTERFACE;
92 else if (IsEqualIID(riid, &IID_IRpcOptions))
94 TRACE("IID_IRpcOptions returning NULL\n");
95 return E_NOINTERFACE;
98 if(*ppvoid)
100 IUnknown_AddRef( (IUnknown*)*ppvoid );
101 return S_OK;
104 FIXME("interface %s not implemented\n", debugstr_guid(riid));
105 return E_NOINTERFACE;
108 static ULONG WINAPI dslocator_AddRef(IDataSourceLocator *iface)
110 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
111 TRACE("(%p)->%u\n",This,This->ref);
112 return InterlockedIncrement(&This->ref);
115 static ULONG WINAPI dslocator_Release(IDataSourceLocator *iface)
117 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
118 ULONG ref = InterlockedDecrement(&This->ref);
120 TRACE("(%p)->%u\n",This,ref+1);
122 if (!ref)
124 heap_free(This);
127 return ref;
130 static HRESULT WINAPI dslocator_GetTypeInfoCount(IDataSourceLocator *iface, UINT *pctinfo)
132 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
134 FIXME("(%p)->()\n", This);
136 return E_NOTIMPL;
139 static HRESULT WINAPI dslocator_GetTypeInfo(IDataSourceLocator *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
141 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
143 FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
145 return E_NOTIMPL;
148 static HRESULT WINAPI dslocator_GetIDsOfNames(IDataSourceLocator *iface, REFIID riid, LPOLESTR *rgszNames,
149 UINT cNames, LCID lcid, DISPID *rgDispId)
151 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
153 FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
155 return E_NOTIMPL;
158 static HRESULT WINAPI dslocator_Invoke(IDataSourceLocator *iface, DISPID dispIdMember, REFIID riid,
159 LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
161 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
163 FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
164 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
166 return E_NOTIMPL;
169 static HRESULT WINAPI dslocator_get_hWnd(IDataSourceLocator *iface, COMPATIBLE_LONG *phwndParent)
171 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
173 TRACE("(%p)->(%p)\n",This, phwndParent);
175 *phwndParent = (COMPATIBLE_LONG)This->hwnd;
177 return S_OK;
180 static HRESULT WINAPI dslocator_put_hWnd(IDataSourceLocator *iface, COMPATIBLE_LONG hwndParent)
182 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
184 TRACE("(%p)->(%p)\n",This, (HWND)hwndParent);
186 This->hwnd = (HWND)hwndParent;
188 return S_OK;
191 static HRESULT WINAPI dslocator_PromptNew(IDataSourceLocator *iface, IDispatch **ppADOConnection)
193 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
195 FIXME("(%p)->(%p)\n",This, ppADOConnection);
197 return E_NOTIMPL;
200 static HRESULT WINAPI dslocator_PromptEdit(IDataSourceLocator *iface, IDispatch **ppADOConnection, VARIANT_BOOL *success)
202 DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
204 FIXME("(%p)->(%p %p)\n",This, ppADOConnection, success);
206 return E_NOTIMPL;
209 static const IDataSourceLocatorVtbl DSLocatorVtbl =
211 dslocator_QueryInterface,
212 dslocator_AddRef,
213 dslocator_Release,
214 dslocator_GetTypeInfoCount,
215 dslocator_GetTypeInfo,
216 dslocator_GetIDsOfNames,
217 dslocator_Invoke,
218 dslocator_get_hWnd,
219 dslocator_put_hWnd,
220 dslocator_PromptNew,
221 dslocator_PromptEdit
224 static HRESULT WINAPI datainitialize_QueryInterface(IDataInitialize *iface, REFIID riid, void **obj)
226 DSLocatorImpl *This = impl_from_IDataInitialize(iface);
227 return IDataSourceLocator_QueryInterface(&This->IDataSourceLocator_iface, riid, obj);
230 static ULONG WINAPI datainitialize_AddRef(IDataInitialize *iface)
232 DSLocatorImpl *This = impl_from_IDataInitialize(iface);
233 return IDataSourceLocator_AddRef(&This->IDataSourceLocator_iface);
236 static ULONG WINAPI datainitialize_Release(IDataInitialize *iface)
238 DSLocatorImpl *This = impl_from_IDataInitialize(iface);
239 return IDataSourceLocator_Release(&This->IDataSourceLocator_iface);
242 static HRESULT WINAPI datainitialize_GetDataSource(IDataInitialize *iface,
243 IUnknown *outer, DWORD context, LPWSTR initstring, REFIID riid, IUnknown **datasource)
245 TRACE("(%p)->(%p %#x %s %s %p)\n", iface, outer, context, debugstr_w(initstring), debugstr_guid(riid),
246 datasource);
248 return get_data_source(outer, context, initstring, riid, datasource);
251 static HRESULT WINAPI datainitialize_GetInitializationString(IDataInitialize *iface, IUnknown *datasource,
252 boolean include_password, LPWSTR *initstring)
254 FIXME("(%p)->(%d %p): stub\n", iface, include_password, initstring);
255 return E_NOTIMPL;
258 static HRESULT WINAPI datainitialize_CreateDBInstance(IDataInitialize *iface, REFCLSID prov, IUnknown *outer,
259 DWORD clsctx, LPWSTR reserved, REFIID riid, IUnknown **datasource)
261 FIXME("(%p)->(%s %p %#x %p %s %p): stub\n", iface, debugstr_guid(prov), outer, clsctx, reserved,
262 debugstr_guid(riid), datasource);
263 return E_NOTIMPL;
266 static HRESULT WINAPI datainitialize_CreateDBInstanceEx(IDataInitialize *iface, REFCLSID prov, IUnknown *outer,
267 DWORD clsctx, LPWSTR reserved, COSERVERINFO *server_info, DWORD cmq, MULTI_QI *results)
269 FIXME("(%p)->(%s %p %#x %p %p %u %p): stub\n", iface, debugstr_guid(prov), outer, clsctx, reserved,
270 server_info, cmq, results);
271 return E_NOTIMPL;
274 static HRESULT WINAPI datainitialize_LoadStringFromStorage(IDataInitialize *iface, LPWSTR filename, LPWSTR *initstring)
276 FIXME("(%p)->(%s %p): stub\n", iface, debugstr_w(filename), initstring);
277 return E_NOTIMPL;
280 static HRESULT WINAPI datainitialize_WriteStringToStorage(IDataInitialize *iface, LPWSTR filename, LPWSTR initstring,
281 DWORD disposition)
283 FIXME("(%p)->(%s %s %#x): stub\n", iface, debugstr_w(filename), debugstr_w(initstring), disposition);
284 return E_NOTIMPL;
287 static const IDataInitializeVtbl ds_datainitialize_vtbl =
289 datainitialize_QueryInterface,
290 datainitialize_AddRef,
291 datainitialize_Release,
292 datainitialize_GetDataSource,
293 datainitialize_GetInitializationString,
294 datainitialize_CreateDBInstance,
295 datainitialize_CreateDBInstanceEx,
296 datainitialize_LoadStringFromStorage,
297 datainitialize_WriteStringToStorage,
300 HRESULT create_dslocator(IUnknown *outer, void **obj)
302 DSLocatorImpl *This;
304 TRACE("(%p, %p)\n", outer, obj);
306 *obj = NULL;
308 if(outer) return CLASS_E_NOAGGREGATION;
310 This = heap_alloc(sizeof(*This));
311 if(!This) return E_OUTOFMEMORY;
313 This->IDataSourceLocator_iface.lpVtbl = &DSLocatorVtbl;
314 This->IDataInitialize_iface.lpVtbl = &ds_datainitialize_vtbl;
315 This->ref = 1;
316 This->hwnd = 0;
318 *obj = &This->IDataSourceLocator_iface;
320 return S_OK;