oledb32: Added a stub IDataInitialize for DataLinks object.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
7380a7c2e2
commit
c2a6738f9a
|
@ -40,6 +40,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(oledb);
|
||||||
typedef struct DSLocatorImpl
|
typedef struct DSLocatorImpl
|
||||||
{
|
{
|
||||||
IDataSourceLocator IDataSourceLocator_iface;
|
IDataSourceLocator IDataSourceLocator_iface;
|
||||||
|
IDataInitialize IDataInitialize_iface;
|
||||||
LONG ref;
|
LONG ref;
|
||||||
|
|
||||||
HWND hwnd;
|
HWND hwnd;
|
||||||
|
@ -50,6 +51,10 @@ static inline DSLocatorImpl *impl_from_IDataSourceLocator( IDataSourceLocator *i
|
||||||
return CONTAINING_RECORD(iface, DSLocatorImpl, IDataSourceLocator_iface);
|
return CONTAINING_RECORD(iface, DSLocatorImpl, IDataSourceLocator_iface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline DSLocatorImpl *impl_from_IDataInitialize(IDataInitialize *iface)
|
||||||
|
{
|
||||||
|
return CONTAINING_RECORD(iface, DSLocatorImpl, IDataInitialize_iface);
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI dslocator_QueryInterface(IDataSourceLocator *iface, REFIID riid, void **ppvoid)
|
static HRESULT WINAPI dslocator_QueryInterface(IDataSourceLocator *iface, REFIID riid, void **ppvoid)
|
||||||
{
|
{
|
||||||
|
@ -64,6 +69,10 @@ static HRESULT WINAPI dslocator_QueryInterface(IDataSourceLocator *iface, REFIID
|
||||||
{
|
{
|
||||||
*ppvoid = &This->IDataSourceLocator_iface;
|
*ppvoid = &This->IDataSourceLocator_iface;
|
||||||
}
|
}
|
||||||
|
else if (IsEqualIID(riid, &IID_IDataInitialize))
|
||||||
|
{
|
||||||
|
*ppvoid = &This->IDataInitialize_iface;
|
||||||
|
}
|
||||||
|
|
||||||
if(*ppvoid)
|
if(*ppvoid)
|
||||||
{
|
{
|
||||||
|
@ -191,6 +200,81 @@ static const IDataSourceLocatorVtbl DSLocatorVtbl =
|
||||||
dslocator_PromptEdit
|
dslocator_PromptEdit
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static HRESULT WINAPI datainitialize_QueryInterface(IDataInitialize *iface, REFIID riid, void **obj)
|
||||||
|
{
|
||||||
|
DSLocatorImpl *This = impl_from_IDataInitialize(iface);
|
||||||
|
return IDataSourceLocator_QueryInterface(&This->IDataSourceLocator_iface, riid, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI datainitialize_AddRef(IDataInitialize *iface)
|
||||||
|
{
|
||||||
|
DSLocatorImpl *This = impl_from_IDataInitialize(iface);
|
||||||
|
return IDataSourceLocator_AddRef(&This->IDataSourceLocator_iface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI datainitialize_Release(IDataInitialize *iface)
|
||||||
|
{
|
||||||
|
DSLocatorImpl *This = impl_from_IDataInitialize(iface);
|
||||||
|
return IDataSourceLocator_Release(&This->IDataSourceLocator_iface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI datainitialize_GetDataSource(IDataInitialize *iface,
|
||||||
|
IUnknown *outer, DWORD context, LPWSTR initstring, REFIID riid, IUnknown **datasource)
|
||||||
|
{
|
||||||
|
FIXME("(%p)->(%p %#x %s %s %p): stub\n", iface, outer, context, debugstr_w(initstring), debugstr_guid(riid),
|
||||||
|
datasource);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI datainitialize_GetInitializationString(IDataInitialize *iface, IUnknown *datasource,
|
||||||
|
boolean include_password, LPWSTR *initstring)
|
||||||
|
{
|
||||||
|
FIXME("(%p)->(%d %p): stub\n", iface, include_password, initstring);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI datainitialize_CreateDBInstance(IDataInitialize *iface, REFCLSID prov, IUnknown *outer,
|
||||||
|
DWORD clsctx, LPWSTR reserved, REFIID riid, IUnknown **datasource)
|
||||||
|
{
|
||||||
|
FIXME("(%p)->(%s %p %#x %p %s %p): stub\n", iface, debugstr_guid(prov), outer, clsctx, reserved,
|
||||||
|
debugstr_guid(riid), datasource);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI datainitialize_CreateDBInstanceEx(IDataInitialize *iface, REFCLSID prov, IUnknown *outer,
|
||||||
|
DWORD clsctx, LPWSTR reserved, COSERVERINFO *server_info, DWORD cmq, MULTI_QI *results)
|
||||||
|
{
|
||||||
|
FIXME("(%p)->(%s %p %#x %p %p %u %p): stub\n", iface, debugstr_guid(prov), outer, clsctx, reserved,
|
||||||
|
server_info, cmq, results);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI datainitialize_LoadStringFromStorage(IDataInitialize *iface, LPWSTR filename, LPWSTR *initstring)
|
||||||
|
{
|
||||||
|
FIXME("(%p)->(%s %p): stub\n", iface, debugstr_w(filename), initstring);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI datainitialize_WriteStringToStorage(IDataInitialize *iface, LPWSTR filename, LPWSTR initstring,
|
||||||
|
DWORD disposition)
|
||||||
|
{
|
||||||
|
FIXME("(%p)->(%s %s %#x): stub\n", iface, debugstr_w(filename), debugstr_w(initstring), disposition);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const IDataInitializeVtbl ds_datainitialize_vtbl =
|
||||||
|
{
|
||||||
|
datainitialize_QueryInterface,
|
||||||
|
datainitialize_AddRef,
|
||||||
|
datainitialize_Release,
|
||||||
|
datainitialize_GetDataSource,
|
||||||
|
datainitialize_GetInitializationString,
|
||||||
|
datainitialize_CreateDBInstance,
|
||||||
|
datainitialize_CreateDBInstanceEx,
|
||||||
|
datainitialize_LoadStringFromStorage,
|
||||||
|
datainitialize_WriteStringToStorage,
|
||||||
|
};
|
||||||
|
|
||||||
HRESULT create_dslocator(IUnknown *outer, void **obj)
|
HRESULT create_dslocator(IUnknown *outer, void **obj)
|
||||||
{
|
{
|
||||||
DSLocatorImpl *This;
|
DSLocatorImpl *This;
|
||||||
|
@ -205,6 +289,7 @@ HRESULT create_dslocator(IUnknown *outer, void **obj)
|
||||||
if(!This) return E_OUTOFMEMORY;
|
if(!This) return E_OUTOFMEMORY;
|
||||||
|
|
||||||
This->IDataSourceLocator_iface.lpVtbl = &DSLocatorVtbl;
|
This->IDataSourceLocator_iface.lpVtbl = &DSLocatorVtbl;
|
||||||
|
This->IDataInitialize_iface.lpVtbl = &ds_datainitialize_vtbl;
|
||||||
This->ref = 1;
|
This->ref = 1;
|
||||||
This->hwnd = 0;
|
This->hwnd = 0;
|
||||||
|
|
||||||
|
|
|
@ -855,6 +855,7 @@ static void test_dslocator(void)
|
||||||
ok(hr == S_OK, "got %08x\n", hr);
|
ok(hr == S_OK, "got %08x\n", hr);
|
||||||
if(SUCCEEDED(hr))
|
if(SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
|
IDataInitialize *datainit, *datainit2;
|
||||||
COMPATIBLE_LONG hwnd = 0;
|
COMPATIBLE_LONG hwnd = 0;
|
||||||
|
|
||||||
if (0) /* Crashes under Window 7 */
|
if (0) /* Crashes under Window 7 */
|
||||||
|
@ -887,6 +888,16 @@ static void test_dslocator(void)
|
||||||
ok(hr == S_OK, "got %08x\n", hr);
|
ok(hr == S_OK, "got %08x\n", hr);
|
||||||
ok(hwnd == 0, "got %p\n", (HWND)hwnd);
|
ok(hwnd == 0, "got %p\n", (HWND)hwnd);
|
||||||
|
|
||||||
|
hr = IDataSourceLocator_QueryInterface(dslocator, &IID_IDataInitialize, (void **)&datainit);
|
||||||
|
ok(hr == S_OK, "got %08x\n", hr);
|
||||||
|
|
||||||
|
hr = IDataSourceLocator_QueryInterface(dslocator, &IID_IDataInitialize, (void **)&datainit2);
|
||||||
|
ok(hr == S_OK, "got %08x\n", hr);
|
||||||
|
ok(datainit == datainit2, "Got %p, previous %p\n", datainit, datainit2);
|
||||||
|
|
||||||
|
IDataInitialize_Release(datainit2);
|
||||||
|
IDataInitialize_Release(datainit);
|
||||||
|
|
||||||
IDataSourceLocator_Release(dslocator);
|
IDataSourceLocator_Release(dslocator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue