Commit 2111d70c authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

oledb32: Added IConnectionPointContainer stub.

parent 452a64e3
......@@ -33,6 +33,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(oledb);
typedef struct
{
IRowPosition IRowPosition_iface;
IConnectionPointContainer IConnectionPointContainer_iface;
LONG ref;
IRowset *rowset;
......@@ -43,6 +44,11 @@ static inline rowpos *impl_from_IRowPosition(IRowPosition *iface)
return CONTAINING_RECORD(iface, rowpos, IRowPosition_iface);
}
static inline rowpos *impl_from_IConnectionPointContainer(IConnectionPointContainer *iface)
{
return CONTAINING_RECORD(iface, rowpos, IConnectionPointContainer_iface);
}
static HRESULT WINAPI rowpos_QueryInterface(IRowPosition* iface, REFIID riid, void **obj)
{
rowpos *This = impl_from_IRowPosition(iface);
......@@ -56,6 +62,10 @@ static HRESULT WINAPI rowpos_QueryInterface(IRowPosition* iface, REFIID riid, vo
{
*obj = iface;
}
else if (IsEqualIID(riid, &IID_IConnectionPointContainer))
{
*obj = &This->IConnectionPointContainer_iface;
}
else
{
FIXME("interface %s not implemented\n", debugstr_guid(riid));
......@@ -143,6 +153,47 @@ static const struct IRowPositionVtbl rowpos_vtbl =
rowpos_SetRowPosition
};
static HRESULT WINAPI cpc_QueryInterface(IConnectionPointContainer *iface, REFIID riid, void **obj)
{
rowpos *This = impl_from_IConnectionPointContainer(iface);
return IRowPosition_QueryInterface(&This->IRowPosition_iface, riid, obj);
}
static ULONG WINAPI cpc_AddRef(IConnectionPointContainer *iface)
{
rowpos *This = impl_from_IConnectionPointContainer(iface);
return IRowPosition_AddRef(&This->IRowPosition_iface);
}
static ULONG WINAPI cpc_Release(IConnectionPointContainer *iface)
{
rowpos *This = impl_from_IConnectionPointContainer(iface);
return IRowPosition_Release(&This->IRowPosition_iface);
}
static HRESULT WINAPI cpc_EnumConnectionPoints(IConnectionPointContainer *iface, IEnumConnectionPoints **enum_points)
{
rowpos *This = impl_from_IConnectionPointContainer(iface);
FIXME("(%p)->(%p): stub\n", This, enum_points);
return E_NOTIMPL;
}
static HRESULT WINAPI cpc_FindConnectionPoint(IConnectionPointContainer *iface, REFIID riid, IConnectionPoint **point)
{
rowpos *This = impl_from_IConnectionPointContainer(iface);
FIXME("(%p)->(%s %p): stub\n", This, debugstr_guid(riid), point);
return E_NOTIMPL;
}
static const struct IConnectionPointContainerVtbl rowpos_cpc_vtbl =
{
cpc_QueryInterface,
cpc_AddRef,
cpc_Release,
cpc_EnumConnectionPoints,
cpc_FindConnectionPoint
};
HRESULT create_oledb_rowpos(IUnknown *outer, void **obj)
{
rowpos *This;
......@@ -157,6 +208,7 @@ HRESULT create_oledb_rowpos(IUnknown *outer, void **obj)
if(!This) return E_OUTOFMEMORY;
This->IRowPosition_iface.lpVtbl = &rowpos_vtbl;
This->IConnectionPointContainer_iface.lpVtbl = &rowpos_cpc_vtbl;
This->ref = 1;
This->rowset = NULL;
......
......@@ -17,6 +17,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdarg.h>
#include <stdio.h>
#define COBJMACROS
#define NONAMELESSUNION
......@@ -37,6 +38,21 @@ DEFINE_GUID(CSLID_MSDAER, 0xc8b522cf,0x5cf3,0x11ce,0xad,0xe5,0x00,0xaa,0x00,0x44
static WCHAR initstring_default[] = {'D','a','t','a',' ','S','o','u','r','c','e','=','d','u','m','m','y',';',0};
static const char *debugstr_guid(REFIID riid)
{
static char buf[50];
if(!riid)
return "(null)";
sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
riid->Data4[5], riid->Data4[6], riid->Data4[7]);
return buf;
}
static void test_GetDataSource(WCHAR *initstring)
{
IDataInitialize *datainit = NULL;
......@@ -188,12 +204,36 @@ static void test_initializationstring(void)
static void test_rowposition(void)
{
IEnumConnectionPoints *enum_points;
IConnectionPointContainer *cpc;
IConnectionPoint *cp;
IRowPosition *rowpos;
HRESULT hr;
IID iid;
hr = CoCreateInstance(&CLSID_OLEDB_ROWPOSITIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IRowPosition, (void**)&rowpos);
ok(hr == S_OK, "got %08x\n", hr);
hr = IRowPosition_QueryInterface(rowpos, &IID_IConnectionPointContainer, (void**)&cpc);
ok(hr == S_OK, "got 0x%08x\n", hr);
hr = IConnectionPointContainer_EnumConnectionPoints(cpc, &enum_points);
todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
if (hr == S_OK) {
hr = IEnumConnectionPoints_Next(enum_points, 1, &cp, NULL);
ok(hr == S_OK, "got 0x%08x\n", hr);
hr = IConnectionPoint_GetConnectionInterface(cp, &iid);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(IsEqualIID(&iid, &IID_IRowPositionChange), "got %s\n", debugstr_guid(&iid));
IConnectionPoint_Release(cp);
hr = IEnumConnectionPoints_Next(enum_points, 1, &cp, NULL);
ok(hr == S_FALSE, "got 0x%08x\n", hr);
IEnumConnectionPoints_Release(enum_points);
}
IConnectionPointContainer_Release(cpc);
IRowPosition_Release(rowpos);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment