diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c index ca2040cc19b..06d49b0d767 100644 --- a/dlls/oledb32/convert.c +++ b/dlls/oledb32/convert.c @@ -37,6 +37,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(oledb); typedef struct { const struct IDataConvertVtbl *lpVtbl; + const struct IDCInfoVtbl *lpDCInfoVtbl; LONG ref; } convert; @@ -46,6 +47,11 @@ static inline convert *impl_from_IDataConvert(IDataConvert *iface) return (convert *)((char*)iface - FIELD_OFFSET(convert, lpVtbl)); } +static inline convert *impl_from_IDCInfo(IDCInfo *iface) +{ + return (convert *)((char*)iface - FIELD_OFFSET(convert, lpDCInfoVtbl)); +} + static HRESULT WINAPI convert_QueryInterface(IDataConvert* iface, REFIID riid, void **obj) @@ -60,6 +66,10 @@ static HRESULT WINAPI convert_QueryInterface(IDataConvert* iface, { *obj = iface; } + else if(IsEqualIID(riid, &IID_IDCInfo)) + { + *obj = &This->lpDCInfoVtbl; + } else { FIXME("interface %s not implemented\n", debugstr_guid(riid)); @@ -131,7 +141,6 @@ static HRESULT WINAPI convert_GetConversionSize(IDataConvert* iface, FIXME("(%p)->(%d, %d, %p, %p, %p): stub\n", This, wSrcType, wDstType, pcbSrcLength, pcbDstLength, pSrc); return E_NOTIMPL; - } static const struct IDataConvertVtbl convert_vtbl = @@ -144,6 +153,56 @@ static const struct IDataConvertVtbl convert_vtbl = convert_GetConversionSize }; +static HRESULT WINAPI dcinfo_QueryInterface(IDCInfo* iface, REFIID riid, void **obj) +{ + convert *This = impl_from_IDCInfo(iface); + + return IDataConvert_QueryInterface((IDataConvert *)This, riid, obj); +} + +static ULONG WINAPI dcinfo_AddRef(IDCInfo* iface) +{ + convert *This = impl_from_IDCInfo(iface); + + return IDataConvert_AddRef((IDataConvert *)This); +} + +static ULONG WINAPI dcinfo_Release(IDCInfo* iface) +{ + convert *This = impl_from_IDCInfo(iface); + + return IDataConvert_Release((IDataConvert *)This); +} + +static HRESULT WINAPI dcinfo_GetInfo(IDCInfo *iface, ULONG num, DCINFOTYPE types[], DCINFO **info) +{ + convert *This = impl_from_IDCInfo(iface); + + FIXME("(%p)->(%d, %p, %p): stub\n", This, num, types, info); + + *info = NULL; + + return E_NOTIMPL; +} + +static HRESULT WINAPI dcinfo_SetInfo(IDCInfo* iface, ULONG num, DCINFO info[]) +{ + convert *This = impl_from_IDCInfo(iface); + + FIXME("(%p)->(%d, %p): stub\n", This, num, info); + + return E_NOTIMPL; +} + +static const struct IDCInfoVtbl dcinfo_vtbl = +{ + dcinfo_QueryInterface, + dcinfo_AddRef, + dcinfo_Release, + dcinfo_GetInfo, + dcinfo_SetInfo +}; + HRESULT create_oledb_convert(IUnknown *outer, void **obj) { convert *This; @@ -158,6 +217,7 @@ HRESULT create_oledb_convert(IUnknown *outer, void **obj) if(!This) return E_OUTOFMEMORY; This->lpVtbl = &convert_vtbl; + This->lpDCInfoVtbl = &dcinfo_vtbl; This->ref = 1; *obj = &This->lpVtbl;