Wine-devel
Threads by month
- ----- 2026 -----
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
December 2019
- 73 participants
- 634 discussions
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msado15/Makefile.in | 3 +-
dlls/msado15/main.c | 5 +
dlls/msado15/msado15_classes.idl | 8 +
dlls/msado15/msado15_private.h | 1 +
dlls/msado15/stream.c | 312 +++++++++++++++++++++++++++++++
5 files changed, 328 insertions(+), 1 deletion(-)
create mode 100644 dlls/msado15/stream.c
diff --git a/dlls/msado15/Makefile.in b/dlls/msado15/Makefile.in
index 5b255df323..604f9ff018 100644
--- a/dlls/msado15/Makefile.in
+++ b/dlls/msado15/Makefile.in
@@ -6,7 +6,8 @@ EXTRADLLFLAGS = -mno-cygwin
C_SRCS = \
connection.c \
main.c \
- recordset.c
+ recordset.c \
+ stream.c
IDL_SRCS = \
msado15_classes.idl \
diff --git a/dlls/msado15/main.c b/dlls/msado15/main.c
index 321ba40e3b..32ae252337 100644
--- a/dlls/msado15/main.c
+++ b/dlls/msado15/main.c
@@ -119,6 +119,7 @@ static const struct IClassFactoryVtbl msadocf_vtbl =
static struct msadocf connection_cf = { { &msadocf_vtbl }, Connection_create };
static struct msadocf recordset_cf = { { &msadocf_vtbl }, Recordset_create };
+static struct msadocf stream_cf = { { &msadocf_vtbl }, Stream_create };
/***********************************************************************
* DllGetClassObject
@@ -137,6 +138,10 @@ HRESULT WINAPI DllGetClassObject( REFCLSID clsid, REFIID iid, void **obj )
{
cf = &recordset_cf.IClassFactory_iface;
}
+ else if (IsEqualGUID( clsid, &CLSID_Stream ))
+ {
+ cf = &stream_cf.IClassFactory_iface;
+ }
if (!cf) return CLASS_E_CLASSNOTAVAILABLE;
return IClassFactory_QueryInterface( cf, iid, obj );
}
diff --git a/dlls/msado15/msado15_classes.idl b/dlls/msado15/msado15_classes.idl
index 56e86a0dc6..5ede180240 100644
--- a/dlls/msado15/msado15_classes.idl
+++ b/dlls/msado15/msado15_classes.idl
@@ -33,3 +33,11 @@ coclass Connection { interface _Connection; }
uuid(00000535-0000-0010-8000-00aa006d2ea4)
]
coclass Recordset { interface _Recordset; }
+
+[
+ threading(both),
+ progid("ADODB.Stream.6.0"),
+ vi_progid("ADODB.Stream"),
+ uuid(00000566-0000-0010-8000-00aa006d2ea4)
+]
+coclass Stream { interface _Stream; }
diff --git a/dlls/msado15/msado15_private.h b/dlls/msado15/msado15_private.h
index 1f8948522b..83c8b7c966 100644
--- a/dlls/msado15/msado15_private.h
+++ b/dlls/msado15/msado15_private.h
@@ -21,5 +21,6 @@
HRESULT Connection_create( void ** ) DECLSPEC_HIDDEN;
HRESULT Recordset_create( void ** ) DECLSPEC_HIDDEN;
+HRESULT Stream_create( void ** ) DECLSPEC_HIDDEN;
#endif /* _WINE_MSADO15_PRIVATE_H_ */
diff --git a/dlls/msado15/stream.c b/dlls/msado15/stream.c
new file mode 100644
index 0000000000..48a485d599
--- /dev/null
+++ b/dlls/msado15/stream.c
@@ -0,0 +1,312 @@
+/*
+ * Copyright 2019 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+#include "windef.h"
+#include "winbase.h"
+#define COBJMACROS
+#include "objbase.h"
+#include "msado15_backcompat.h"
+
+#include "wine/debug.h"
+#include "wine/heap.h"
+
+#include "msado15_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(msado15);
+
+struct stream
+{
+ _Stream Stream_iface;
+ LONG refs;
+};
+
+static inline struct stream *impl_from_Stream( _Stream *iface )
+{
+ return CONTAINING_RECORD( iface, struct stream, Stream_iface );
+}
+
+static ULONG WINAPI stream_AddRef( _Stream *iface )
+{
+ struct stream *stream = impl_from_Stream( iface );
+ return InterlockedIncrement( &stream->refs );
+}
+
+static ULONG WINAPI stream_Release( _Stream *iface )
+{
+ struct stream *stream = impl_from_Stream( iface );
+ LONG refs = InterlockedDecrement( &stream->refs );
+ if (!refs)
+ {
+ TRACE( "destroying %p\n", stream );
+ heap_free( stream );
+ }
+ return refs;
+}
+
+static HRESULT WINAPI stream_QueryInterface( _Stream *iface, REFIID riid, void **obj )
+{
+ TRACE( "%p, %s, %p\n", iface, debugstr_guid(riid), obj );
+
+ if (IsEqualGUID( riid, &IID__Stream ) || IsEqualGUID( riid, &IID_IDispatch ) ||
+ IsEqualGUID( riid, &IID_IUnknown ))
+ {
+ *obj = iface;
+ }
+ else
+ {
+ FIXME( "interface %s not implemented\n", debugstr_guid(riid) );
+ return E_NOINTERFACE;
+ }
+ stream_AddRef( iface );
+ return S_OK;
+}
+
+static HRESULT WINAPI stream_GetTypeInfoCount( _Stream *iface, UINT *count )
+{
+ FIXME( "%p, %p\n", iface, count );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_GetTypeInfo( _Stream *iface, UINT index, LCID lcid, ITypeInfo **info )
+{
+ FIXME( "%p, %u, %u, %p\n", iface, index, lcid, info );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_GetIDsOfNames( _Stream *iface, REFIID riid, LPOLESTR *names, UINT count,
+ LCID lcid, DISPID *dispid )
+{
+ FIXME( "%p, %s, %p, %u, %u, %p\n", iface, debugstr_guid(riid), names, count, lcid, dispid );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_Invoke( _Stream *iface, DISPID member, REFIID riid, LCID lcid, WORD flags,
+ DISPPARAMS *params, VARIANT *result, EXCEPINFO *excep_info, UINT *arg_err )
+{
+ FIXME( "%p, %d, %s, %d, %d, %p, %p, %p, %p\n", iface, member, debugstr_guid(riid), lcid, flags, params,
+ result, excep_info, arg_err );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_get_Size( _Stream *iface, LONG *size )
+{
+ FIXME( "%p, %p\n", iface, size );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_get_EOS( _Stream *iface, VARIANT_BOOL *eos )
+{
+ FIXME( "%p, %p\n", iface, eos );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_get_Position( _Stream *iface, LONG *pos )
+{
+ FIXME( "%p, %p\n", iface, pos );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_put_Position( _Stream *iface, LONG pos )
+{
+ FIXME( "%p, %d\n", iface, pos );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_get_Type( _Stream *iface, StreamTypeEnum *type )
+{
+ FIXME( "%p, %p\n", iface, type );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_put_Type( _Stream *iface, StreamTypeEnum type )
+{
+ FIXME( "%p, %u\n", iface, type );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_get_LineSeparator( _Stream *iface, LineSeparatorEnum *sep )
+{
+ FIXME( "%p, %p\n", iface, sep );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_put_LineSeparator( _Stream *iface, LineSeparatorEnum sep )
+{
+ FIXME( "%p, %d\n", iface, sep );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_get_State( _Stream *iface, ObjectStateEnum *state )
+{
+ FIXME( "%p, %p\n", iface, state );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_get_Mode( _Stream *iface, ConnectModeEnum *mode )
+{
+ FIXME( "%p, %p\n", iface, mode );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_put_Mode( _Stream *iface, ConnectModeEnum mode )
+{
+ FIXME( "%p, %u\n", iface, mode );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_get_Charset( _Stream *iface, BSTR *charset )
+{
+ FIXME( "%p, %p\n", iface, charset );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_put_Charset( _Stream *iface, BSTR charset )
+{
+ FIXME( "%p, %s\n", iface, debugstr_w(charset) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_Read( _Stream *iface, LONG size, VARIANT *val )
+{
+ FIXME( "%p, %d, %p\n", iface, size, val );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_Open( _Stream *iface, VARIANT src, ConnectModeEnum mode, StreamOpenOptionsEnum options,
+ BSTR username, BSTR password )
+{
+ FIXME( "%p, %s, %u, %d, %s, %p\n", iface, debugstr_variant(&src), mode, options, debugstr_w(username), password );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_Close( _Stream *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_SkipLine( _Stream *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_Write( _Stream *iface, VARIANT buf )
+{
+ FIXME( "%p, %s\n", iface, debugstr_variant(&buf) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_SetEOS( _Stream *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_CopyTo( _Stream *iface, _Stream *dst, LONG size )
+{
+ FIXME( "%p, %p, %d\n", iface, dst, size );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_Flush( _Stream *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_SaveToFile( _Stream *iface, BSTR filename, SaveOptionsEnum options )
+{
+ FIXME( "%p, %s, %u\n", iface, debugstr_w(filename), options );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_LoadFromFile( _Stream *iface, BSTR filename )
+{
+ FIXME( "%p, %s\n", iface, debugstr_w(filename) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_ReadText( _Stream *iface, LONG len, BSTR *ret )
+{
+ FIXME( "%p, %d, %p\n", iface, len, ret );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_WriteText( _Stream *iface, BSTR data, StreamWriteEnum options )
+{
+ FIXME( "%p, %p, %u\n", iface, debugstr_w(data), options );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI stream_Cancel( _Stream *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static const struct _StreamVtbl stream_vtbl =
+{
+ stream_QueryInterface,
+ stream_AddRef,
+ stream_Release,
+ stream_GetTypeInfoCount,
+ stream_GetTypeInfo,
+ stream_GetIDsOfNames,
+ stream_Invoke,
+ stream_get_Size,
+ stream_get_EOS,
+ stream_get_Position,
+ stream_put_Position,
+ stream_get_Type,
+ stream_put_Type,
+ stream_get_LineSeparator,
+ stream_put_LineSeparator,
+ stream_get_State,
+ stream_get_Mode,
+ stream_put_Mode,
+ stream_get_Charset,
+ stream_put_Charset,
+ stream_Read,
+ stream_Open,
+ stream_Close,
+ stream_SkipLine,
+ stream_Write,
+ stream_SetEOS,
+ stream_CopyTo,
+ stream_Flush,
+ stream_SaveToFile,
+ stream_LoadFromFile,
+ stream_ReadText,
+ stream_WriteText,
+ stream_Cancel
+};
+
+HRESULT Stream_create( void **obj )
+{
+ struct stream *stream;
+
+ if (!(stream = heap_alloc_zero( sizeof(*stream) ))) return E_OUTOFMEMORY;
+ stream->Stream_iface.lpVtbl = &stream_vtbl;
+ stream->refs = 1;
+
+ *obj = &stream->Stream_iface;
+ TRACE( "returning iface %p\n", *obj );
+ return S_OK;
+}
--
2.20.1
1
0
06 Dec '19
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msado15/Makefile.in | 3 +-
dlls/msado15/main.c | 5 +
dlls/msado15/msado15_classes.idl | 8 +
dlls/msado15/msado15_private.h | 1 +
dlls/msado15/recordset.c | 686 +++++++++++++++++++++++++++++++
5 files changed, 702 insertions(+), 1 deletion(-)
create mode 100644 dlls/msado15/recordset.c
diff --git a/dlls/msado15/Makefile.in b/dlls/msado15/Makefile.in
index b901944bc1..5b255df323 100644
--- a/dlls/msado15/Makefile.in
+++ b/dlls/msado15/Makefile.in
@@ -5,7 +5,8 @@ EXTRADLLFLAGS = -mno-cygwin
C_SRCS = \
connection.c \
- main.c
+ main.c \
+ recordset.c
IDL_SRCS = \
msado15_classes.idl \
diff --git a/dlls/msado15/main.c b/dlls/msado15/main.c
index d292826b1f..321ba40e3b 100644
--- a/dlls/msado15/main.c
+++ b/dlls/msado15/main.c
@@ -118,6 +118,7 @@ static const struct IClassFactoryVtbl msadocf_vtbl =
};
static struct msadocf connection_cf = { { &msadocf_vtbl }, Connection_create };
+static struct msadocf recordset_cf = { { &msadocf_vtbl }, Recordset_create };
/***********************************************************************
* DllGetClassObject
@@ -132,6 +133,10 @@ HRESULT WINAPI DllGetClassObject( REFCLSID clsid, REFIID iid, void **obj )
{
cf = &connection_cf.IClassFactory_iface;
}
+ else if (IsEqualGUID( clsid, &CLSID_Recordset ))
+ {
+ cf = &recordset_cf.IClassFactory_iface;
+ }
if (!cf) return CLASS_E_CLASSNOTAVAILABLE;
return IClassFactory_QueryInterface( cf, iid, obj );
}
diff --git a/dlls/msado15/msado15_classes.idl b/dlls/msado15/msado15_classes.idl
index f69fea0a1a..56e86a0dc6 100644
--- a/dlls/msado15/msado15_classes.idl
+++ b/dlls/msado15/msado15_classes.idl
@@ -25,3 +25,11 @@
uuid(00000514-0000-0010-8000-00aa006d2ea4)
]
coclass Connection { interface _Connection; }
+
+[
+ threading(both),
+ progid("ADODB.Recordset.6.0"),
+ vi_progid("ADODB.Recordset"),
+ uuid(00000535-0000-0010-8000-00aa006d2ea4)
+]
+coclass Recordset { interface _Recordset; }
diff --git a/dlls/msado15/msado15_private.h b/dlls/msado15/msado15_private.h
index 1d4c379443..1f8948522b 100644
--- a/dlls/msado15/msado15_private.h
+++ b/dlls/msado15/msado15_private.h
@@ -20,5 +20,6 @@
#define _WINE_MSADO15_PRIVATE_H_
HRESULT Connection_create( void ** ) DECLSPEC_HIDDEN;
+HRESULT Recordset_create( void ** ) DECLSPEC_HIDDEN;
#endif /* _WINE_MSADO15_PRIVATE_H_ */
diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c
new file mode 100644
index 0000000000..bf0ca6e90f
--- /dev/null
+++ b/dlls/msado15/recordset.c
@@ -0,0 +1,686 @@
+/*
+ * Copyright 2019 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+#include <assert.h>
+#include "windef.h"
+#include "winbase.h"
+#define COBJMACROS
+#include "objbase.h"
+#include "msado15_backcompat.h"
+
+#include "wine/debug.h"
+#include "wine/heap.h"
+
+#include "msado15_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(msado15);
+
+struct recordset
+{
+ _Recordset Recordset_iface;
+ LONG refs;
+};
+
+static inline struct recordset *impl_from_Recordset( _Recordset *iface )
+{
+ return CONTAINING_RECORD( iface, struct recordset, Recordset_iface );
+}
+
+static ULONG WINAPI recordset_AddRef( _Recordset *iface )
+{
+ struct recordset *recordset = impl_from_Recordset( iface );
+ LONG refs = InterlockedIncrement( &recordset->refs );
+ TRACE( "%p new refcount %d\n", recordset, refs );
+ return refs;
+}
+
+static ULONG WINAPI recordset_Release( _Recordset *iface )
+{
+ struct recordset *recordset = impl_from_Recordset( iface );
+ LONG refs = InterlockedDecrement( &recordset->refs );
+ TRACE( "%p new refcount %d\n", recordset, refs );
+ if (!refs)
+ {
+ TRACE( "destroying %p\n", recordset );
+ heap_free( recordset );
+ }
+ return refs;
+}
+
+static HRESULT WINAPI recordset_QueryInterface( _Recordset *iface, REFIID riid, void **obj )
+{
+ TRACE( "%p, %s, %p\n", iface, debugstr_guid(riid), obj );
+
+ if (IsEqualGUID( riid, &IID__Recordset ) || IsEqualGUID( riid, &IID_IDispatch ) ||
+ IsEqualGUID( riid, &IID_IUnknown ))
+ {
+ *obj = iface;
+ }
+ else
+ {
+ FIXME( "interface %s not implemented\n", debugstr_guid(riid) );
+ return E_NOINTERFACE;
+ }
+ recordset_AddRef( iface );
+ return S_OK;
+}
+
+static HRESULT WINAPI recordset_GetTypeInfoCount( _Recordset *iface, UINT *count )
+{
+ FIXME( "%p, %p\n", iface, count );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_GetTypeInfo( _Recordset *iface, UINT index, LCID lcid, ITypeInfo **info )
+{
+ FIXME( "%p, %u, %u, %p\n", iface, index, lcid, info );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_GetIDsOfNames( _Recordset *iface, REFIID riid, LPOLESTR *names, UINT count,
+ LCID lcid, DISPID *dispid )
+{
+ FIXME( "%p, %s, %p, %u, %u, %p\n", iface, debugstr_guid(riid), names, count, lcid, dispid );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_Invoke( _Recordset *iface, DISPID member, REFIID riid, LCID lcid, WORD flags,
+ DISPPARAMS *params, VARIANT *result, EXCEPINFO *excep_info, UINT *arg_err )
+{
+ FIXME( "%p, %d, %s, %d, %d, %p, %p, %p, %p\n", iface, member, debugstr_guid(riid), lcid, flags, params,
+ result, excep_info, arg_err );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_Properties( _Recordset *iface, Properties **obj )
+{
+ FIXME( "%p, %p\n", iface, obj );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_AbsolutePosition( _Recordset *iface, PositionEnum_Param *pos )
+{
+ FIXME( "%p, %p\n", iface, pos );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_AbsolutePosition( _Recordset *iface, PositionEnum_Param pos )
+{
+ FIXME( "%p, %d\n", iface, pos );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_putref_ActiveConnection( _Recordset *iface, IDispatch *connection )
+{
+ FIXME( "%p, %p\n", iface, connection );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_ActiveConnection( _Recordset *iface, VARIANT connection )
+{
+ FIXME( "%p, %s\n", iface, debugstr_variant(&connection) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_ActiveConnection( _Recordset *iface, VARIANT *connection )
+{
+ FIXME( "%p, %p\n", iface, connection );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_BOF( _Recordset *iface, VARIANT_BOOL *bof )
+{
+ FIXME( "%p, %p\n", iface, bof );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_Bookmark( _Recordset *iface, VARIANT *bookmark )
+{
+ FIXME( "%p, %p\n", iface, bookmark );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_Bookmark( _Recordset *iface, VARIANT bookmark )
+{
+ FIXME( "%p, %s\n", iface, debugstr_variant(&bookmark) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_CacheSize( _Recordset *iface, LONG *size )
+{
+ FIXME( "%p, %p\n", iface, size );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_CacheSize( _Recordset *iface, LONG size )
+{
+ FIXME( "%p, %d\n", iface, size );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_CursorType( _Recordset *iface, CursorTypeEnum *cursor_type )
+{
+ FIXME( "%p, %p\n", iface, cursor_type );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_CursorType( _Recordset *iface, CursorTypeEnum cursor_type )
+{
+ FIXME( "%p, %d\n", iface, cursor_type );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_EOF( _Recordset *iface, VARIANT_BOOL *eof )
+{
+ FIXME( "%p, %p\n", iface, eof );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_Fields( _Recordset *iface, Fields **obj )
+{
+ FIXME( "%p, %p\n", iface, obj );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_LockType( _Recordset *iface, LockTypeEnum *lock_type )
+{
+ FIXME( "%p, %p\n", iface, lock_type );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_LockType( _Recordset *iface, LockTypeEnum lock_type )
+{
+ FIXME( "%p, %d\n", iface, lock_type );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_MaxRecords( _Recordset *iface, LONG *max_records )
+{
+ FIXME( "%p, %p\n", iface, max_records );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_MaxRecords( _Recordset *iface, LONG max_records )
+{
+ FIXME( "%p, %d\n", iface, max_records );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_RecordCount( _Recordset *iface, LONG *count )
+{
+ FIXME( "%p, %p\n", iface, count );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_putref_Source( _Recordset *iface, IDispatch *source )
+{
+ FIXME( "%p, %p\n", iface, source );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_Source( _Recordset *iface, BSTR source )
+{
+ FIXME( "%p, %s\n", iface, debugstr_w(source) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_Source( _Recordset *iface, VARIANT *source )
+{
+ FIXME( "%p, %p\n", iface, source );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_AddNew( _Recordset *iface, VARIANT field_list, VARIANT values )
+{
+ FIXME( "%p, %s, %s\n", iface, debugstr_variant(&field_list), debugstr_variant(&values) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_CancelUpdate( _Recordset *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_Close( _Recordset *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_Delete( _Recordset *iface, AffectEnum affect_records )
+{
+ FIXME( "%p, %u\n", iface, affect_records );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_GetRows( _Recordset *iface, LONG rows, VARIANT start, VARIANT fields, VARIANT *var )
+{
+ FIXME( "%p, %d, %s, %s, %p\n", iface, rows, debugstr_variant(&start), debugstr_variant(&fields), var );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_Move( _Recordset *iface, LONG num_records, VARIANT start )
+{
+ FIXME( "%p, %d, %s\n", iface, num_records, debugstr_variant(&start) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_MoveNext( _Recordset *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_MovePrevious( _Recordset *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_MoveFirst( _Recordset *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_MoveLast( _Recordset *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_Open( _Recordset *iface, VARIANT source, VARIANT active_connection,
+ CursorTypeEnum cursor_type, LockTypeEnum lock_type, LONG options )
+{
+ FIXME( "%p, %s, %s, %d, %d, %d\n", iface, debugstr_variant(&source), debugstr_variant(&active_connection),
+ cursor_type, lock_type, options );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_Requery( _Recordset *iface, LONG options )
+{
+ FIXME( "%p, %d\n", iface, options );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset__xResync( _Recordset *iface, AffectEnum affect_records )
+{
+ FIXME( "%p, %u\n", iface, affect_records );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_Update( _Recordset *iface, VARIANT fields, VARIANT values )
+{
+ FIXME( "%p, %s, %s\n", iface, debugstr_variant(&fields), debugstr_variant(&values) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_AbsolutePage( _Recordset *iface, PositionEnum_Param *pos )
+{
+ FIXME( "%p, %p\n", iface, pos );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_AbsolutePage( _Recordset *iface, PositionEnum_Param pos )
+{
+ FIXME( "%p, %d\n", iface, pos );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_EditMode( _Recordset *iface, EditModeEnum *mode )
+{
+ FIXME( "%p, %p\n", iface, mode );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_Filter( _Recordset *iface, VARIANT *criteria )
+{
+ FIXME( "%p, %p\n", iface, criteria );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_Filter( _Recordset *iface, VARIANT criteria )
+{
+ FIXME( "%p, %s\n", iface, debugstr_variant(&criteria) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_PageCount( _Recordset *iface, LONG *count )
+{
+ FIXME( "%p, %p\n", iface, count );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_PageSize( _Recordset *iface, LONG *size )
+{
+ FIXME( "%p, %p\n", iface, size );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_PageSize( _Recordset *iface, LONG size )
+{
+ FIXME( "%p, %d\n", iface, size );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_Sort( _Recordset *iface, BSTR *criteria )
+{
+ FIXME( "%p, %p\n", iface, criteria );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_Sort( _Recordset *iface, BSTR criteria )
+{
+ FIXME( "%p, %s\n", iface, debugstr_w(criteria) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_Status( _Recordset *iface, LONG *status )
+{
+ FIXME( "%p, %p\n", iface, status );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_State( _Recordset *iface, LONG *state )
+{
+ FIXME( "%p, %p\n", iface, state );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset__xClone( _Recordset *iface, _Recordset **obj )
+{
+ FIXME( "%p, %p\n", iface, obj );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_UpdateBatch( _Recordset *iface, AffectEnum affect_records )
+{
+ FIXME( "%p, %u\n", iface, affect_records );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_CancelBatch( _Recordset *iface, AffectEnum affect_records )
+{
+ FIXME( "%p, %u\n", iface, affect_records );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_CursorLocation( _Recordset *iface, CursorLocationEnum *cursor_loc )
+{
+ FIXME( "%p, %p\n", iface, cursor_loc );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_CursorLocation( _Recordset *iface, CursorLocationEnum cursor_loc )
+{
+ FIXME( "%p, %u\n", iface, cursor_loc );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_NextRecordset( _Recordset *iface, VARIANT *records_affected, _Recordset **record_set )
+{
+ FIXME( "%p, %p, %p\n", iface, records_affected, record_set );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_Supports( _Recordset *iface, CursorOptionEnum cursor_options, VARIANT_BOOL *ret )
+{
+ FIXME( "%p, %08x, %p\n", iface, cursor_options, ret );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_Collect( _Recordset *iface, VARIANT index, VARIANT *var )
+{
+ FIXME( "%p, %s, %p\n", iface, debugstr_variant(&index), var );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_Collect( _Recordset *iface, VARIANT index, VARIANT var )
+{
+ FIXME( "%p, %s, %s\n", iface, debugstr_variant(&index), debugstr_variant(&var) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_MarshalOptions( _Recordset *iface, MarshalOptionsEnum *options )
+{
+ FIXME( "%p, %p\n", iface, options );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_MarshalOptions( _Recordset *iface, MarshalOptionsEnum options )
+{
+ FIXME( "%p, %u\n", iface, options );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_Find( _Recordset *iface, BSTR criteria, LONG skip_records,
+ SearchDirectionEnum search_direction, VARIANT start )
+{
+ FIXME( "%p, %s, %d, %d, %s\n", iface, debugstr_w(criteria), skip_records, search_direction,
+ debugstr_variant(&start) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_Cancel( _Recordset *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_DataSource( _Recordset *iface, IUnknown **data_source )
+{
+ FIXME( "%p, %p\n", iface, data_source );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_putref_DataSource( _Recordset *iface, IUnknown *data_source )
+{
+ FIXME( "%p, %p\n", iface, data_source );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset__xSave( _Recordset *iface, BSTR filename, PersistFormatEnum persist_format )
+{
+ FIXME( "%p, %s, %u\n", iface, debugstr_w(filename), persist_format );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_ActiveCommand( _Recordset *iface, IDispatch **cmd )
+{
+ FIXME( "%p, %p\n", iface, cmd );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_StayInSync( _Recordset *iface, VARIANT_BOOL stay_in_sync )
+{
+ FIXME( "%p, %d\n", iface, stay_in_sync );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_StayInSync( _Recordset *iface, VARIANT_BOOL *stay_in_sync )
+{
+ FIXME( "%p, %p\n", iface, stay_in_sync );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_GetString( _Recordset *iface, StringFormatEnum string_format, LONG num_rows,
+ BSTR column_delimeter, BSTR row_delimeter, BSTR null_expr,
+ BSTR *ret_string )
+{
+ FIXME( "%p, %u, %d, %s, %s, %s, %p\n", iface, string_format, num_rows, debugstr_w(column_delimeter),
+ debugstr_w(row_delimeter), debugstr_w(null_expr), ret_string );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_DataMember( _Recordset *iface, BSTR *data_member )
+{
+ FIXME( "%p, %p\n", iface, data_member );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_DataMember( _Recordset *iface, BSTR data_member )
+{
+ FIXME( "%p, %s\n", iface, debugstr_w(data_member) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_CompareBookmarks( _Recordset *iface, VARIANT bookmark1, VARIANT bookmark2, CompareEnum *compare )
+{
+ FIXME( "%p, %s, %s, %p\n", iface, debugstr_variant(&bookmark1), debugstr_variant(&bookmark2), compare );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_Clone( _Recordset *iface, LockTypeEnum lock_type, _Recordset **obj )
+{
+ FIXME( "%p, %d, %p\n", iface, lock_type, obj );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_Resync( _Recordset *iface, AffectEnum affect_records, ResyncEnum resync_values )
+{
+ FIXME( "%p, %u, %u\n", iface, affect_records, resync_values );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_Seek( _Recordset *iface, VARIANT key_values, SeekEnum seek_option )
+{
+ FIXME( "%p, %s, %u\n", iface, debugstr_variant(&key_values), seek_option );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_put_Index( _Recordset *iface, BSTR index )
+{
+ FIXME( "%p, %s\n", iface, debugstr_w(index) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_get_Index( _Recordset *iface, BSTR *index )
+{
+ FIXME( "%p, %p\n", iface, index );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI recordset_Save( _Recordset *iface, VARIANT destination, PersistFormatEnum persist_format )
+{
+ FIXME( "%p, %s, %u\n", iface, debugstr_variant(&destination), persist_format );
+ return E_NOTIMPL;
+}
+
+static const struct _RecordsetVtbl recordset_vtbl =
+{
+ recordset_QueryInterface,
+ recordset_AddRef,
+ recordset_Release,
+ recordset_GetTypeInfoCount,
+ recordset_GetTypeInfo,
+ recordset_GetIDsOfNames,
+ recordset_Invoke,
+ recordset_get_Properties,
+ recordset_get_AbsolutePosition,
+ recordset_put_AbsolutePosition,
+ recordset_putref_ActiveConnection,
+ recordset_put_ActiveConnection,
+ recordset_get_ActiveConnection,
+ recordset_get_BOF,
+ recordset_get_Bookmark,
+ recordset_put_Bookmark,
+ recordset_get_CacheSize,
+ recordset_put_CacheSize,
+ recordset_get_CursorType,
+ recordset_put_CursorType,
+ recordset_get_EOF,
+ recordset_get_Fields,
+ recordset_get_LockType,
+ recordset_put_LockType,
+ recordset_get_MaxRecords,
+ recordset_put_MaxRecords,
+ recordset_get_RecordCount,
+ recordset_putref_Source,
+ recordset_put_Source,
+ recordset_get_Source,
+ recordset_AddNew,
+ recordset_CancelUpdate,
+ recordset_Close,
+ recordset_Delete,
+ recordset_GetRows,
+ recordset_Move,
+ recordset_MoveNext,
+ recordset_MovePrevious,
+ recordset_MoveFirst,
+ recordset_MoveLast,
+ recordset_Open,
+ recordset_Requery,
+ recordset__xResync,
+ recordset_Update,
+ recordset_get_AbsolutePage,
+ recordset_put_AbsolutePage,
+ recordset_get_EditMode,
+ recordset_get_Filter,
+ recordset_put_Filter,
+ recordset_get_PageCount,
+ recordset_get_PageSize,
+ recordset_put_PageSize,
+ recordset_get_Sort,
+ recordset_put_Sort,
+ recordset_get_Status,
+ recordset_get_State,
+ recordset__xClone,
+ recordset_UpdateBatch,
+ recordset_CancelBatch,
+ recordset_get_CursorLocation,
+ recordset_put_CursorLocation,
+ recordset_NextRecordset,
+ recordset_Supports,
+ recordset_get_Collect,
+ recordset_put_Collect,
+ recordset_get_MarshalOptions,
+ recordset_put_MarshalOptions,
+ recordset_Find,
+ recordset_Cancel,
+ recordset_get_DataSource,
+ recordset_putref_DataSource,
+ recordset__xSave,
+ recordset_get_ActiveCommand,
+ recordset_put_StayInSync,
+ recordset_get_StayInSync,
+ recordset_GetString,
+ recordset_get_DataMember,
+ recordset_put_DataMember,
+ recordset_CompareBookmarks,
+ recordset_Clone,
+ recordset_Resync,
+ recordset_Seek,
+ recordset_put_Index,
+ recordset_get_Index,
+ recordset_Save
+};
+
+HRESULT Recordset_create( void **obj )
+{
+ struct recordset *recordset;
+
+ if (!(recordset = heap_alloc_zero( sizeof(*recordset) ))) return E_OUTOFMEMORY;
+ recordset->Recordset_iface.lpVtbl = &recordset_vtbl;
+ recordset->refs = 1;
+
+ *obj = &recordset->Recordset_iface;
+ TRACE( "returning iface %p\n", *obj );
+ return S_OK;
+}
--
2.20.1
1
0
06 Dec '19
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msado15/Makefile.in | 8 +-
dlls/msado15/connection.c | 344 +++++++++++++++++++++++++++++++
dlls/msado15/main.c | 106 ++++++++++
dlls/msado15/msado15.spec | 4 +-
dlls/msado15/msado15_classes.idl | 27 +++
dlls/msado15/msado15_private.h | 24 +++
6 files changed, 509 insertions(+), 4 deletions(-)
create mode 100644 dlls/msado15/connection.c
create mode 100644 dlls/msado15/msado15_classes.idl
create mode 100644 dlls/msado15/msado15_private.h
diff --git a/dlls/msado15/Makefile.in b/dlls/msado15/Makefile.in
index 779a18df14..b901944bc1 100644
--- a/dlls/msado15/Makefile.in
+++ b/dlls/msado15/Makefile.in
@@ -1,8 +1,12 @@
MODULE = msado15.dll
+IMPORTS = oleaut32
EXTRADLLFLAGS = -mno-cygwin
C_SRCS = \
- main.c \
+ connection.c \
+ main.c
-IDL_SRCS = msado15_tlb.idl
+IDL_SRCS = \
+ msado15_classes.idl \
+ msado15_tlb.idl
diff --git a/dlls/msado15/connection.c b/dlls/msado15/connection.c
new file mode 100644
index 0000000000..f33bc89a1a
--- /dev/null
+++ b/dlls/msado15/connection.c
@@ -0,0 +1,344 @@
+/*
+ * Copyright 2019 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+#include "windef.h"
+#include "winbase.h"
+#define COBJMACROS
+#include "objbase.h"
+#include "msado15_backcompat.h"
+
+#include "wine/debug.h"
+#include "wine/heap.h"
+
+#include "msado15_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(msado15);
+
+struct connection
+{
+ _Connection Connection_iface;
+ LONG refs;
+};
+
+static inline struct connection *impl_from_Connection( _Connection *iface )
+{
+ return CONTAINING_RECORD( iface, struct connection, Connection_iface );
+}
+
+static ULONG WINAPI connection_AddRef( _Connection *iface )
+{
+ struct connection *connection = impl_from_Connection( iface );
+ return InterlockedIncrement( &connection->refs );
+}
+
+static ULONG WINAPI connection_Release( _Connection *iface )
+{
+ struct connection *connection = impl_from_Connection( iface );
+ LONG refs = InterlockedDecrement( &connection->refs );
+ if (!refs)
+ {
+ TRACE( "destroying %p\n", connection );
+ heap_free( connection );
+ }
+ return refs;
+}
+
+static HRESULT WINAPI connection_QueryInterface( _Connection *iface, REFIID riid, void **obj )
+{
+ TRACE( "%p, %s, %p\n", iface, debugstr_guid(riid), obj );
+
+ if (IsEqualGUID( riid, &IID__Connection ) || IsEqualGUID( riid, &IID_IDispatch ) ||
+ IsEqualGUID( riid, &IID_IUnknown ))
+ {
+ *obj = iface;
+ }
+ else
+ {
+ FIXME( "interface %s not implemented\n", debugstr_guid(riid) );
+ return E_NOINTERFACE;
+ }
+ connection_AddRef( iface );
+ return S_OK;
+}
+
+static HRESULT WINAPI connection_GetTypeInfoCount( _Connection *iface, UINT *count )
+{
+ FIXME( "%p, %p\n", iface, count );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_GetTypeInfo( _Connection *iface, UINT index, LCID lcid, ITypeInfo **info )
+{
+ FIXME( "%p, %u, %u, %p\n", iface, index, lcid, info );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_GetIDsOfNames( _Connection *iface, REFIID riid, LPOLESTR *names, UINT count,
+ LCID lcid, DISPID *dispid )
+{
+ FIXME( "%p, %s, %p, %u, %u, %p\n", iface, debugstr_guid(riid), names, count, lcid, dispid );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_Invoke( _Connection *iface, DISPID member, REFIID riid, LCID lcid, WORD flags,
+ DISPPARAMS *params, VARIANT *result, EXCEPINFO *excep_info, UINT *arg_err )
+{
+ FIXME( "%p, %d, %s, %d, %d, %p, %p, %p, %p\n", iface, member, debugstr_guid(riid), lcid, flags, params,
+ result, excep_info, arg_err );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_get_Properties( _Connection *iface, Properties **obj )
+{
+ FIXME( "%p, %p\n", iface, obj );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_get_ConnectionString( _Connection *iface, BSTR *str )
+{
+ FIXME( "%p, %p\n", iface, str );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_put_ConnectionString( _Connection *iface, BSTR str )
+{
+ FIXME( "%p, %s\n", iface, debugstr_w(str) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_get_CommandTimeout( _Connection *iface, LONG *timeout )
+{
+ FIXME( "%p, %p\n", iface, timeout );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_put_CommandTimeout( _Connection *iface, LONG timeout )
+{
+ FIXME( "%p, %d\n", iface, timeout );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_get_ConnectionTimeout( _Connection *iface, LONG *timeout )
+{
+ FIXME( "%p, %p\n", iface, timeout );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_put_ConnectionTimeout( _Connection *iface, LONG timeout )
+{
+ FIXME( "%p, %d\n", iface, timeout );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_get_Version( _Connection *iface, BSTR *str )
+{
+ FIXME( "%p, %p\n", iface, str );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_Close( _Connection *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_Execute( _Connection *iface, BSTR command, VARIANT *records_affected,
+ LONG options, _Recordset **record_set )
+{
+ FIXME( "%p, %s, %p, %08x, %p\n", iface, debugstr_w(command), records_affected, options, record_set );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_BeginTrans( _Connection *iface, LONG *transaction_level )
+{
+ FIXME( "%p, %p\n", iface, transaction_level );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_CommitTrans( _Connection *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_RollbackTrans( _Connection *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_Open( _Connection *iface, BSTR connect_str, BSTR userid, BSTR password,
+ LONG options )
+{
+ FIXME( "%p, %s, %s, %p, %08x\n", iface, debugstr_w(connect_str), debugstr_w(userid),
+ debugstr_w(password), options );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_get_Errors( _Connection *iface, Errors **obj )
+{
+ FIXME( "%p, %p\n", iface, obj );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_get_DefaultDatabase( _Connection *iface, BSTR *str )
+{
+ FIXME( "%p, %p\n", iface, str );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_put_DefaultDatabase( _Connection *iface, BSTR str )
+{
+ FIXME( "%p, %s\n", iface, debugstr_w(str) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_get_IsolationLevel( _Connection *iface, IsolationLevelEnum *level )
+{
+ FIXME( "%p, %p\n", iface, level );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_put_IsolationLevel( _Connection *iface, IsolationLevelEnum level )
+{
+ FIXME( "%p, %d\n", iface, level );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_get_Attributes( _Connection *iface, LONG *attr )
+{
+ FIXME( "%p, %p\n", iface, attr );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_put_Attributes( _Connection *iface, LONG attr )
+{
+ FIXME( "%p, %d\n", iface, attr );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_get_CursorLocation( _Connection *iface, CursorLocationEnum *cursor_loc )
+{
+ FIXME( "%p, %p\n", iface, cursor_loc );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_put_CursorLocation( _Connection *iface, CursorLocationEnum cursor_loc )
+{
+ FIXME( "%p, %u\n", iface, cursor_loc );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_get_Mode( _Connection *iface, ConnectModeEnum *mode )
+{
+ FIXME( "%p, %p\n", iface, mode );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_put_Mode( _Connection *iface, ConnectModeEnum mode )
+{
+ FIXME( "%p, %u\n", iface, mode );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_get_Provider( _Connection *iface, BSTR *str )
+{
+ FIXME( "%p, %p\n", iface, str );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_put_Provider( _Connection *iface, BSTR str )
+{
+ FIXME( "%p, %s\n", iface, debugstr_w(str) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_get_State( _Connection *iface, LONG *state )
+{
+ FIXME( "%p, %p\n", iface, state );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_OpenSchema( _Connection *iface, SchemaEnum schema, VARIANT restrictions,
+ VARIANT schema_id, _Recordset **record_set )
+{
+ FIXME( "%p, %d, %s, %s, %p\n", iface, schema, debugstr_variant(&restrictions),
+ debugstr_variant(&schema_id), record_set );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI connection_Cancel( _Connection *iface )
+{
+ FIXME( "%p\n", iface );
+ return E_NOTIMPL;
+}
+
+static const struct _ConnectionVtbl connection_vtbl =
+{
+ connection_QueryInterface,
+ connection_AddRef,
+ connection_Release,
+ connection_GetTypeInfoCount,
+ connection_GetTypeInfo,
+ connection_GetIDsOfNames,
+ connection_Invoke,
+ connection_get_Properties,
+ connection_get_ConnectionString,
+ connection_put_ConnectionString,
+ connection_get_CommandTimeout,
+ connection_put_CommandTimeout,
+ connection_get_ConnectionTimeout,
+ connection_put_ConnectionTimeout,
+ connection_get_Version,
+ connection_Close,
+ connection_Execute,
+ connection_BeginTrans,
+ connection_CommitTrans,
+ connection_RollbackTrans,
+ connection_Open,
+ connection_get_Errors,
+ connection_get_DefaultDatabase,
+ connection_put_DefaultDatabase,
+ connection_get_IsolationLevel,
+ connection_put_IsolationLevel,
+ connection_get_Attributes,
+ connection_put_Attributes,
+ connection_get_CursorLocation,
+ connection_put_CursorLocation,
+ connection_get_Mode,
+ connection_put_Mode,
+ connection_get_Provider,
+ connection_put_Provider,
+ connection_get_State,
+ connection_OpenSchema,
+ connection_Cancel
+};
+
+HRESULT Connection_create( void **obj )
+{
+ struct connection *connection;
+
+ if (!(connection = heap_alloc( sizeof(*connection) ))) return E_OUTOFMEMORY;
+ connection->Connection_iface.lpVtbl = &connection_vtbl;
+ connection->refs = 1;
+
+ *obj = &connection->Connection_iface;
+ TRACE( "returning iface %p\n", *obj );
+ return S_OK;
+}
diff --git a/dlls/msado15/main.c b/dlls/msado15/main.c
index 0c5b2615d0..d292826b1f 100644
--- a/dlls/msado15/main.c
+++ b/dlls/msado15/main.c
@@ -19,10 +19,18 @@
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
+#include "initguid.h"
+#define COBJMACROS
#include "objbase.h"
#include "rpcproxy.h"
+#include "msado15_backcompat.h"
#include "wine/debug.h"
+#include "wine/heap.h"
+
+#include "msado15_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(msado15);
static HINSTANCE hinstance;
@@ -38,6 +46,104 @@ BOOL WINAPI DllMain( HINSTANCE dll, DWORD reason, LPVOID reserved )
return TRUE;
}
+typedef HRESULT (*fnCreateInstance)( void **obj );
+
+struct msadocf
+{
+ IClassFactory IClassFactory_iface;
+ fnCreateInstance pfnCreateInstance;
+};
+
+static inline struct msadocf *impl_from_IClassFactory( IClassFactory *iface )
+{
+ return CONTAINING_RECORD( iface, struct msadocf, IClassFactory_iface );
+}
+
+static HRESULT WINAPI msadocf_QueryInterface( IClassFactory *iface, REFIID riid, void **obj )
+{
+ if (IsEqualGUID( riid, &IID_IUnknown ) || IsEqualGUID( riid, &IID_IClassFactory ))
+ {
+ IClassFactory_AddRef( iface );
+ *obj = iface;
+ return S_OK;
+ }
+ FIXME( "interface %s not implemented\n", debugstr_guid(riid) );
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI msadocf_AddRef( IClassFactory *iface )
+{
+ return 2;
+}
+
+static ULONG WINAPI msadocf_Release( IClassFactory *iface )
+{
+ return 1;
+}
+
+static HRESULT WINAPI msadocf_CreateInstance( IClassFactory *iface, LPUNKNOWN outer, REFIID riid, void **obj )
+{
+ struct msadocf *cf = impl_from_IClassFactory( iface );
+ IUnknown *unknown;
+ HRESULT hr;
+
+ TRACE( "%p, %s, %p\n", outer, debugstr_guid(riid), obj );
+
+ *obj = NULL;
+ if (outer)
+ return CLASS_E_NOAGGREGATION;
+
+ hr = cf->pfnCreateInstance( (void **)&unknown );
+ if (FAILED(hr))
+ return hr;
+
+ hr = IUnknown_QueryInterface( unknown, riid, obj );
+ IUnknown_Release( unknown );
+ return hr;
+}
+
+static HRESULT WINAPI msadocf_LockServer( IClassFactory *iface, BOOL dolock )
+{
+ FIXME( "%p, %d\n", iface, dolock );
+ return S_OK;
+}
+
+static const struct IClassFactoryVtbl msadocf_vtbl =
+{
+ msadocf_QueryInterface,
+ msadocf_AddRef,
+ msadocf_Release,
+ msadocf_CreateInstance,
+ msadocf_LockServer
+};
+
+static struct msadocf connection_cf = { { &msadocf_vtbl }, Connection_create };
+
+/***********************************************************************
+ * DllGetClassObject
+ */
+HRESULT WINAPI DllGetClassObject( REFCLSID clsid, REFIID iid, void **obj )
+{
+ IClassFactory *cf = NULL;
+
+ TRACE( "%s, %s, %p\n", debugstr_guid(clsid), debugstr_guid(iid), obj );
+
+ if (IsEqualGUID( clsid, &CLSID_Connection ))
+ {
+ cf = &connection_cf.IClassFactory_iface;
+ }
+ if (!cf) return CLASS_E_CLASSNOTAVAILABLE;
+ return IClassFactory_QueryInterface( cf, iid, obj );
+}
+
+/******************************************************************
+ * DllCanUnloadNow
+ */
+HRESULT WINAPI DllCanUnloadNow(void)
+{
+ return S_FALSE;
+}
+
/***********************************************************************
* DllRegisterServer
*/
diff --git a/dlls/msado15/msado15.spec b/dlls/msado15/msado15.spec
index 6d0e061a53..b16365d0c9 100644
--- a/dlls/msado15/msado15.spec
+++ b/dlls/msado15/msado15.spec
@@ -1,4 +1,4 @@
-@ stub DllCanUnloadNow
-@ stub DllGetClassObject
+@ stdcall -private DllCanUnloadNow()
+@ stdcall -private DllGetClassObject(ptr ptr ptr)
@ stdcall -private DllRegisterServer()
@ stdcall -private DllUnregisterServer()
diff --git a/dlls/msado15/msado15_classes.idl b/dlls/msado15/msado15_classes.idl
new file mode 100644
index 0000000000..f69fea0a1a
--- /dev/null
+++ b/dlls/msado15/msado15_classes.idl
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2019 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#pragma makedep register
+
+[
+ threading(apartment),
+ progid("ADODB.Connection.6.0"),
+ vi_progid("ADODB.Connection"),
+ uuid(00000514-0000-0010-8000-00aa006d2ea4)
+]
+coclass Connection { interface _Connection; }
diff --git a/dlls/msado15/msado15_private.h b/dlls/msado15/msado15_private.h
new file mode 100644
index 0000000000..1d4c379443
--- /dev/null
+++ b/dlls/msado15/msado15_private.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _WINE_MSADO15_PRIVATE_H_
+#define _WINE_MSADO15_PRIVATE_H_
+
+HRESULT Connection_create( void ** ) DECLSPEC_HIDDEN;
+
+#endif /* _WINE_MSADO15_PRIVATE_H_ */
--
2.20.1
1
0
v2: Drop explicit calling convention.
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
configure.ac | 1 +
dlls/msado15/Makefile.in | 8 +
dlls/msado15/main.c | 55 +
dlls/msado15/msado15.spec | 4 +
dlls/msado15/msado15_tlb.idl | 21 +
include/Makefile.in | 1 +
include/msado15_backcompat.idl | 2104 ++++++++++++++++++++++++++++++++
7 files changed, 2194 insertions(+)
create mode 100644 dlls/msado15/Makefile.in
create mode 100644 dlls/msado15/main.c
create mode 100644 dlls/msado15/msado15.spec
create mode 100644 dlls/msado15/msado15_tlb.idl
create mode 100644 include/msado15_backcompat.idl
diff --git a/configure.ac b/configure.ac
index 7f2c3cda23..06ac9c6c71 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3438,6 +3438,7 @@ WINE_CONFIG_MAKEFILE(dlls/msacm.dll16,enable_win16)
WINE_CONFIG_MAKEFILE(dlls/msacm32.drv)
WINE_CONFIG_MAKEFILE(dlls/msacm32)
WINE_CONFIG_MAKEFILE(dlls/msacm32/tests)
+WINE_CONFIG_MAKEFILE(dlls/msado15)
WINE_CONFIG_MAKEFILE(dlls/msadp32.acm)
WINE_CONFIG_MAKEFILE(dlls/msasn1)
WINE_CONFIG_MAKEFILE(dlls/mscat32)
diff --git a/dlls/msado15/Makefile.in b/dlls/msado15/Makefile.in
new file mode 100644
index 0000000000..779a18df14
--- /dev/null
+++ b/dlls/msado15/Makefile.in
@@ -0,0 +1,8 @@
+MODULE = msado15.dll
+
+EXTRADLLFLAGS = -mno-cygwin
+
+C_SRCS = \
+ main.c \
+
+IDL_SRCS = msado15_tlb.idl
diff --git a/dlls/msado15/main.c b/dlls/msado15/main.c
new file mode 100644
index 0000000000..0c5b2615d0
--- /dev/null
+++ b/dlls/msado15/main.c
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2019 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+#include "windef.h"
+#include "winbase.h"
+#include "objbase.h"
+#include "rpcproxy.h"
+
+#include "wine/debug.h"
+
+static HINSTANCE hinstance;
+
+BOOL WINAPI DllMain( HINSTANCE dll, DWORD reason, LPVOID reserved )
+{
+ switch (reason)
+ {
+ case DLL_PROCESS_ATTACH:
+ hinstance = dll;
+ DisableThreadLibraryCalls( dll );
+ break;
+ }
+ return TRUE;
+}
+
+/***********************************************************************
+ * DllRegisterServer
+ */
+HRESULT WINAPI DllRegisterServer( void )
+{
+ return __wine_register_resources( hinstance );
+}
+
+/***********************************************************************
+ * DllUnregisterServer
+ */
+HRESULT WINAPI DllUnregisterServer( void )
+{
+ return __wine_unregister_resources( hinstance );
+}
diff --git a/dlls/msado15/msado15.spec b/dlls/msado15/msado15.spec
new file mode 100644
index 0000000000..6d0e061a53
--- /dev/null
+++ b/dlls/msado15/msado15.spec
@@ -0,0 +1,4 @@
+@ stub DllCanUnloadNow
+@ stub DllGetClassObject
+@ stdcall -private DllRegisterServer()
+@ stdcall -private DllUnregisterServer()
diff --git a/dlls/msado15/msado15_tlb.idl b/dlls/msado15/msado15_tlb.idl
new file mode 100644
index 0000000000..f3a77df3ac
--- /dev/null
+++ b/dlls/msado15/msado15_tlb.idl
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2019 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#pragma makedep regtypelib
+
+#include "msado15_backcompat.idl"
diff --git a/include/Makefile.in b/include/Makefile.in
index 421e3d6c59..2e9a921df7 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -394,6 +394,7 @@ SOURCES = \
msacm.h \
msacmdlg.h \
msacmdrv.h \
+ msado15_backcompat.idl \
msasn1.h \
mscat.h \
mscoree.idl \
diff --git a/include/msado15_backcompat.idl b/include/msado15_backcompat.idl
new file mode 100644
index 0000000000..a1d5e28038
--- /dev/null
+++ b/include/msado15_backcompat.idl
@@ -0,0 +1,2104 @@
+/*
+ * Copyright 2019 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+import "oaidl.idl";
+
+interface _ADO;
+interface _Collection;
+interface _Command;
+interface _Connection;
+interface _DynaCollection;
+interface _Parameter;
+interface _Record;
+interface _Recordset;
+interface _Stream;
+interface ADODebugging;
+interface ADOConnectionConstruction;
+interface ADOCommandConstruction;
+interface ADORecordsetConstruction;
+interface Command15;
+interface Command25;
+interface Error;
+interface Errors;
+interface Field;
+interface Field15;
+interface Field20;
+interface Fields;
+interface Fields15;
+interface Fields20;
+interface Parameters;
+interface Properties;
+interface Property;
+interface Recordset15;
+interface Recordset20;
+interface Recordset21;
+dispinterface ConnectionEvents;
+dispinterface RecordsetEvents;
+
+typedef [uuid(0000052A-0000-0010-8000-00AA006D2EA4)] enum ErrorValueEnum
+{
+ adErrInvalidArgument = 3001,
+ adErrOpeningFile = 3002,
+ adErrReadFile = 3003,
+ adErrWriteFile = 3004,
+ adErrNoCurrentRecord = 3021,
+ adErrIllegalOperation = 3219,
+ adErrCantChangeProvider = 3220,
+ adErrInTransaction = 3246,
+ adErrFeatureNotAvailable = 3251,
+ adErrItemNotFound = 3265,
+ adErrObjectInCollection = 3367,
+ adErrObjectNotSet = 3420,
+ adErrDataConversion = 3421,
+ adErrObjectClosed = 3704,
+ adErrObjectOpen = 3705,
+ adErrProviderNotFound = 3706,
+ adErrBoundToCommand = 3707,
+ adErrInvalidParamInfo = 3708,
+ adErrInvalidConnection = 3709,
+ adErrNotReentrant = 3710,
+ adErrStillExecuting = 3711,
+ adErrOperationCancelled = 3712,
+ adErrStillConnecting = 3713,
+ adErrInvalidTransaction = 3714,
+ adErrNotExecuting = 3715,
+ adErrUnsafeOperation = 3716,
+ adWrnSecurityDialog = 3717,
+ adWrnSecurityDialogHeader = 3718,
+ adErrIntegrityViolation = 3719,
+ adErrPermissionDenied = 3720,
+ adErrDataOverflow = 3721,
+ adErrSchemaViolation = 3722,
+ adErrSignMismatch = 3723,
+ adErrCantConvertvalue = 3724,
+ adErrCantCreate = 3725,
+ adErrColumnNotOnThisRow = 3726,
+ adErrURLDoesNotExist = 3727,
+ adErrTreePermissionDenied = 3728,
+ adErrInvalidURL = 3729,
+ adErrResourceLocked = 3730,
+ adErrResourceExists = 3731,
+ adErrCannotComplete = 3732,
+ adErrVolumeNotFound = 3733,
+ adErrOutOfSpace = 3734,
+ adErrResourceOutOfScope = 3735,
+ adErrUnavailable = 3736,
+ adErrURLNamedRowDoesNotExist = 3737,
+ adErrDelResOutOfScope = 3738,
+ adErrPropInvalidColumn = 3739,
+ adErrPropInvalidOption = 3740,
+ adErrPropInvalidValue = 3741,
+ adErrPropConflicting = 3742,
+ adErrPropNotAllSettable = 3743,
+ adErrPropNotSet = 3744,
+ adErrPropNotSettable = 3745,
+ adErrPropNotSupported = 3746,
+ adErrCatalogNotSet = 3747,
+ adErrCantChangeConnection = 3748,
+ adErrFieldsUpdateFailed = 3749,
+ adErrDenyNotSupported = 3750,
+ adErrDenyTypeNotSupported = 3751,
+ adErrProviderNotSpecified = 3753,
+ adErrConnectionStringTooLong = 3754
+} ErrorValueEnum;
+
+typedef [uuid(00000528-0000-0010-8000-00aa006d2ea4)] enum PositionEnum
+{
+ adPosUnknown = -1,
+ adPosBOF = -2,
+ adPosEOF = -3
+} PositionEnum;
+
+typedef [uuid(a56187c5-d690-4037-ae32-a00edc376ac3), public] PositionEnum PositionEnum_Param;
+
+typedef [uuid(0000051f-0000-0010-8000-00aa006d2ea4)] enum DataTypeEnum
+{
+ adEmpty = 0,
+ adTinyInt = 16,
+ adSmallInt = 2,
+ adInteger = 3,
+ adBigInt = 20,
+ adUnsignedTinyInt = 17,
+ adUnsignedSmallInt = 18,
+ adUnsignedInt = 19,
+ adUnsignedBigInt = 21,
+ adSingle = 4,
+ adDouble = 5,
+ adCurrency = 6,
+ adDecimal = 14,
+ adNumeric = 131,
+ adBoolean = 11,
+ adError = 10,
+ adUserDefined = 132,
+ adVariant = 12,
+ adIDispatch = 9,
+ adIUnknown = 13,
+ adGUID = 72,
+ adDate = 7,
+ adDBDate = 133,
+ adDBTime = 134,
+ adDBTimeStamp = 135,
+ adBSTR = 8,
+ adChar = 129,
+ adVarChar = 200,
+ adLongVarChar = 201,
+ adWChar = 130,
+ adVarWChar = 202,
+ adLongVarWChar = 203,
+ adBinary = 128,
+ adVarBinary = 204,
+ adLongVarBinary = 205,
+ adChapter = 136,
+ adFileTime = 64,
+ adPropVariant = 138,
+ adVarNumeric = 139,
+ adArray = 0x2000
+} DataTypeEnum;
+
+typedef [uuid(00000548-0000-0010-8000-00aa006d2ea4)] enum PersistFormatEnum
+{
+ adPersistADTG = 0,
+ adPersistXML = 1
+} PersistFormatEnum;
+
+typedef [uuid(00000552-0000-0010-8000-00aa006d2ea4)] enum SeekEnum
+{
+ adSeekFirstEQ = 1,
+ adSeekLastEQ = 2,
+ adSeekAfterEQ = 4,
+ adSeekAfter = 8,
+ adSeekBeforeEQ = 16,
+ adSeekBefore = 32
+} SeekEnum;
+
+typedef [uuid(0000051b-0000-0010-8000-00aa006d2ea4)] enum CursorTypeEnum
+{
+ adOpenUnspecified = -1,
+ adOpenForwardOnly = 0,
+ adOpenKeyset = 1,
+ adOpenDynamic = 2,
+ adOpenStatic = 3
+} CursorTypeEnum;
+
+typedef [uuid(00000525-0000-0010-8000-00aa006d2ea4)] enum FieldAttributeEnum
+{
+ adFldUnspecified = -1,
+ adFldMayDefer = 0x00000002,
+ adFldUpdatable = 0x00000004,
+ adFldUnknownUpdatable = 0x00000008,
+ adFldFixed = 0x00000010,
+ adFldIsNullable = 0x00000020,
+ adFldMayBeNull = 0x00000040,
+ adFldLong = 0x00000080,
+ adFldRowID = 0x00000100,
+ adFldRowVersion = 0x00000200,
+ adFldCacheDeferred = 0x00001000,
+ adFldIsChapter = 0x00002000,
+ adFldNegativeScale = 0x00004000,
+ adFldKeyColumn = 0x00008000,
+ adFldIsRowURL = 0x00010000,
+ adFldIsDefaultStream = 0x00020000,
+ adFldIsCollection = 0x00040000
+} FieldAttributeEnum;
+
+typedef [uuid(00000544-0000-0010-8000-00aa006d2ea4)] enum ResyncEnum
+{
+ adResyncUnderlyingValues = 1,
+ adResyncAllValues = 2
+} ResyncEnum;
+
+typedef [uuid(0000051d-0000-0010-8000-00aa006d2ea4)] enum LockTypeEnum
+{
+ adLockUnspecified = -1,
+ adLockReadOnly = 1,
+ adLockPessimistic = 2,
+ adLockOptimistic = 3,
+ adLockBatchOptimistic = 4
+} LockTypeEnum;
+
+typedef [uuid(00000543-0000-0010-8000-00aa006d2ea4)] enum AffectEnum
+{
+ adAffectCurrent = 1,
+ adAffectGroup = 2,
+ adAffectAll = 3,
+ adAffectAllChapters = 4
+} AffectEnum;
+
+typedef [uuid(00000526-0000-0010-8000-00aa006d2ea4)] enum EditModeEnum
+{
+ adEditNone = 0,
+ adEditInProgress = 1,
+ adEditAdd = 2,
+ adEditDelete = 4
+} EditModeEnum;
+
+typedef [uuid(0000052f-0000-0010-8000-00aa006d2ea4)] enum CursorLocationEnum
+{
+ adUseNone = 1,
+ adUseServer = 2,
+ adUseClient = 3,
+ adUseClientBatch = 3
+} CursorLocationEnum;
+
+typedef [uuid(0000051c-0000-0010-8000-00aa006d2ea4)] enum CursorOptionEnum
+{
+ adHoldRecords = 256,
+ adMovePrevious = 512,
+ adBookmark = 8192,
+ adApproxPosition = 16384,
+ adUpdateBatch = 65536,
+ adResync = 131072,
+ adNotify = 262144,
+ adFind = 524288,
+ adSeek = 4194304,
+ adIndex = 8388608,
+ adAddNew = 16778240,
+ adDelete = 16779264,
+ adUpdate = 16809984
+} CursorOptionEnum;
+
+typedef [uuid(00000540-0000-0010-8000-00aa006d2ea4)] enum MarshalOptionsEnum
+{
+ adMarshalAll = 0,
+ adMarshalModifiedOnly = 1
+} MarshalOptionsEnum;
+
+typedef [uuid(00000547-0000-0010-8000-00aa006d2ea4)] enum SearchDirectionEnum
+{
+ adSearchForward = 1,
+ adSearchBackward = -1
+} SearchDirectionEnum;
+
+typedef [uuid(00000549-0000-0010-8000-00aa006d2ea4)] enum StringFormatEnum
+{
+ adClipString = 2
+} StringFormatEnum;
+
+typedef [uuid(00000545-0000-0010-8000-00aa006d2ea4)] enum CompareEnum
+{
+ adCompareLessThan = 0,
+ adCompareEqual = 1,
+ adCompareGreaterThan = 2,
+ adCompareNotEqual = 3,
+ adCompareNotComparable = 4
+} CompareEnum;
+
+typedef [uuid(00000523-0000-0010-8000-00aa006d2ea4)] enum IsolationLevelEnum
+{
+ adXactUnspecified = -1,
+ adXactChaos = 16,
+ adXactReadUncommitted = 256,
+ adXactBrowse = 256,
+ adXactCursorStability = 4096,
+ adXactReadCommitted = 4096,
+ adXactRepeatableRead = 65536,
+ adXactSerializable = 1048576,
+ adXactIsolated = 1048576
+} IsolationLevelEnum;
+
+typedef [uuid(00000521-0000-0010-8000-00aa006d2ea4)] enum ConnectModeEnum
+{
+ adModeUnknown = 0,
+ adModeRead = 1,
+ adModeWrite = 2,
+ adModeReadWrite = 3,
+ adModeShareDenyRead = 4,
+ adModeShareDenyWrite = 8,
+ adModeShareExclusive = 12,
+ adModeShareDenyNone = 16,
+ adModeRecursive = 4194304
+} ConnectModeEnum;
+
+typedef [uuid(00000533-0000-0010-8000-00aa006d2ea4)] enum SchemaEnum
+{
+ adSchemaProviderSpecific = -1,
+ adSchemaAsserts = 0,
+ adSchemaCatalogs = 1,
+ adSchemaCharacterSets = 2,
+ adSchemaCollations = 3,
+ adSchemaColumns = 4,
+ adSchemaCheckConstraints = 5,
+ adSchemaConstraintColumnUsage = 6,
+ adSchemaConstraintTableUsage = 7,
+ adSchemaKeyColumnUsage = 8,
+ adSchemaReferentialContraints = 9,
+ adSchemaReferentialConstraints = 9,
+ adSchemaTableConstraints = 10,
+ adSchemaColumnsDomainUsage = 11,
+ adSchemaIndexes = 12,
+ adSchemaColumnPrivileges = 13,
+ adSchemaTablePrivileges = 14,
+ adSchemaUsagePrivileges = 15,
+ adSchemaProcedures = 16,
+ adSchemaSchemata = 17,
+ adSchemaSQLLanguages = 18,
+ adSchemaStatistics = 19,
+ adSchemaTables = 20,
+ adSchemaTranslations = 21,
+ adSchemaProviderTypes = 22,
+ adSchemaViews = 23,
+ adSchemaViewColumnUsage = 24,
+ adSchemaViewTableUsage = 25,
+ adSchemaProcedureParameters = 26,
+ adSchemaForeignKeys = 27,
+ adSchemaPrimaryKeys = 28,
+ adSchemaProcedureColumns = 29,
+ adSchemaDBInfoKeywords = 30,
+ adSchemaDBInfoLiterals = 31,
+ adSchemaCubes = 32,
+ adSchemaDimensions = 33,
+ adSchemaHierarchies = 34,
+ adSchemaLevels = 35,
+ adSchemaMeasures = 36,
+ adSchemaProperties = 37,
+ adSchemaMembers = 38,
+ adSchemaTrustees = 39,
+ adSchemaFunctions = 40,
+ adSchemaActions = 41,
+ adSchemaCommands = 42,
+ adSchemaSets = 43
+} SchemaEnum;
+
+typedef [uuid(00000530-0000-0010-8000-00aa006d2ea4)] enum EventStatusEnum
+{
+ adStatusOK = 1,
+ adStatusErrorsOccurred = 2,
+ adStatusCantDeny = 3,
+ adStatusCancel = 4,
+ adStatusUnwantedEvent = 5
+} EventStatusEnum;
+
+typedef [uuid(0000052c-0000-0010-8000-00aa006d2ea4)] enum ParameterDirectionEnum
+{
+ adParamUnknown = 0,
+ adParamInput = 1,
+ adParamOutput = 2,
+ adParamInputOutput = 3,
+ adParamReturnValue = 4
+} ParameterDirectionEnum;
+
+typedef [uuid(0000052e-0000-0010-8000-00aa006d2ea4)] enum CommandTypeEnum
+{
+ adCmdUnspecified = -1,
+ adCmdUnknown = 8,
+ adCmdText = 1,
+ adCmdTable = 2,
+ adCmdStoredProc = 4,
+ adCmdFile = 256,
+ adCmdTableDirect = 512
+} CommandTypeEnum;
+
+typedef [uuid(00000532-0000-0010-8000-00aa006d2ea4)] enum ObjectStateEnum
+{
+ adStateClosed = 0,
+ adStateOpen = 1,
+ adStateConnecting = 2,
+ adStateExecuting = 4,
+ adStateFetching = 8
+} ObjectStateEnum;
+
+typedef [uuid(00000573-0000-0010-8000-00aa006d2ea4)] enum MoveRecordOptionsEnum
+{
+ adMoveUnspecified = -1,
+ adMoveOverWrite = 1,
+ adMoveDontUpdateLinks = 2,
+ adMoveAllowEmulation = 4
+} MoveRecordOptionsEnum;
+
+typedef [uuid(00000574-0000-0010-8000-00aa006d2ea4)] enum CopyRecordOptionsEnum
+{
+ adCopyUnspecified = -1,
+ adCopyOverWrite = 1,
+ adCopyAllowEmulation = 4,
+ adCopyNonRecursive = 2
+} CopyRecordOptionsEnum;
+
+typedef [uuid(00000570-0000-0010-8000-00aa006d2ea4)] enum RecordCreateOptionsEnum
+{
+ adCreateCollection = 0x00002000,
+ adCreateStructDoc = 0x80000000,
+ adCreateNonCollection = 0x00000000,
+ adOpenIfExists = 0x02000000,
+ adCreateOverwrite = 0x04000000,
+ adFailIfNotExists = -1
+} RecordCreateOptionsEnum;
+
+typedef [uuid(00000571-0000-0010-8000-00aa006d2ea4)] enum RecordOpenOptionsEnum
+{
+ adOpenRecordUnspecified = -1,
+ adOpenOutput = 0x00800000,
+ adOpenAsync = 0x00001000,
+ adDelayFetchStream = 0x00004000,
+ adDelayFetchFields = 0x00008000,
+ adOpenExecuteCommand = 0x00010000
+} RecordOpenOptionsEnum;
+
+typedef [uuid(0000057d-0000-0010-8000-00aa006d2ea4)] enum RecordTypeEnum
+{
+ adSimpleRecord = 0,
+ adCollectionRecord = 1,
+ adStructDoc = 2
+} RecordTypeEnum;
+
+typedef [uuid(00000576-0000-0010-8000-00aa006d2ea4)] enum StreamTypeEnum
+{
+ adTypeBinary = 1,
+ adTypeText = 2
+} StreamTypeEnum;
+
+typedef [uuid(00000577-0000-0010-8000-00aa006d2ea4)] enum LineSeparatorEnum
+{
+ adLF = 10,
+ adCR = 13,
+ adCRLF = -1
+} LineSeparatorEnum;
+
+typedef enum
+{
+ adReadAll = -1,
+ adReadLine = -2
+} StreamReadEnum;
+
+typedef [uuid(0000057c-0000-0010-8000-00aa006d2ea4)] enum SaveOptionsEnum
+{
+ adSaveCreateNotExist = 1,
+ adSaveCreateOverWrite = 2
+} SaveOptionsEnum;
+
+typedef [uuid(0000057a-0000-0010-8000-00aa006d2ea4)] enum StreamOpenOptionsEnum
+{
+ adOpenStreamUnspecified = -1,
+ adOpenStreamAsync = 1,
+ adOpenStreamFromRecord = 4
+} StreamOpenOptionsEnum;
+
+typedef [uuid(0000057b-0000-0010-8000-00aa006d2ea4)] enum StreamWriteEnum
+{
+ adWriteChar = 0,
+ adWriteLine = 1
+} StreamWriteEnum;
+
+typedef [uuid(00000531-0000-0010-8000-00aa006d2ea4)] enum EventReasonEnum
+{
+ adRsnAddNew = 1,
+ adRsnDelete = 2,
+ adRsnUpdate = 3,
+ adRsnUndoUpdate = 4,
+ adRsnUndoAddNew = 5,
+ adRsnUndoDelete = 6,
+ adRsnRequery = 7,
+ adRsnResynch = 8,
+ adRsnClose = 9,
+ adRsnMove = 10,
+ adRsnFirstChange = 11,
+ adRsnMoveFirst = 12,
+ adRsnMoveNext = 13,
+ adRsnMovePrevious = 14,
+ adRsnMoveLast = 15
+} EventReasonEnum;
+
+[
+ uuid(00000503-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface Property : IDispatch
+{
+ [id(00000000), propget]
+ HRESULT Value(
+ [out, retval] VARIANT *val);
+
+ [id(00000000), propput]
+ HRESULT Value(
+ [in] VARIANT val);
+
+ [id(0x60020002), propget]
+ HRESULT Name(
+ [out, retval] BSTR *str);
+
+ [id(0x60020003), propget]
+ HRESULT Type(
+ [out, retval] DataTypeEnum *type);
+
+ [id(0x60020004), propget]
+ HRESULT Attributes(
+ [out, retval] LONG *attributes);
+
+ [id(0x60020004), propput]
+ HRESULT Attributes(
+ [in] LONG attributes);
+};
+
+[
+ uuid(00000512-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface _Collection : IDispatch
+{
+ [id(0x60020000), propget]
+ HRESULT Count(
+ [out, retval] LONG *count);
+
+ [id(0xfffffffc), restricted]
+ HRESULT _NewEnum(
+ [out, retval] IUnknown **object);
+
+ [id(0x60020002)]
+ HRESULT Refresh();
+};
+
+[
+ uuid(00000504-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface Properties : _Collection
+{
+ [id(00000000), propget]
+ HRESULT Item(
+ [in] VARIANT index,
+ [out, retval] Property **object);
+};
+
+[
+ uuid(00000534-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface _ADO : IDispatch
+{
+ [id(0x000001f4), propget]
+ HRESULT Properties(
+ [out, retval] Properties **object);
+};
+
+[
+ uuid(0000054c-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation,
+ hidden
+]
+interface Field20 : _ADO
+{
+ [id(0x00000455), propget]
+ HRESULT ActualSize(
+ [out, retval] LONG *size);
+
+ [id(0x0000040c), propget]
+ HRESULT Attributes(
+ [out, retval] LONG *attrs);
+
+ [id(0x0000044f), propget]
+ HRESULT DefinedSize(
+ [out, retval] LONG *size);
+
+ [id(0x0000044c), propget]
+ HRESULT Name(
+ [out, retval] BSTR *str);
+
+ [id(0x0000044e), propget]
+ HRESULT Type(
+ [out, retval] DataTypeEnum *type);
+
+ [id(00000000), propget]
+ HRESULT Value(
+ [out, retval] VARIANT *val);
+
+ [id(00000000), propput]
+ HRESULT Value(
+ [in] VARIANT val);
+
+ [id(0x60030007), propget]
+ HRESULT Precision(
+ [out, retval] unsigned char *precision);
+
+ [id(0x60030008), propget]
+ HRESULT NumericScale(
+ [out, retval] unsigned char *scale);
+
+ [id(0x00000453)]
+ HRESULT AppendChunk(
+ [in] VARIANT data);
+
+ [id(0x00000454)]
+ HRESULT GetChunk(
+ [in] LONG length,
+ [out, retval] VARIANT *var);
+
+ [id(0x00000450), propget]
+ HRESULT OriginalValue(
+ [out, retval] VARIANT *val);
+
+ [id(0x00000451), propget]
+ HRESULT UnderlyingValue(
+ [out, retval] VARIANT *val);
+
+ [id(0x6003000d), propget]
+ HRESULT DataFormat(
+ [out, retval] IUnknown **format);
+
+ [id(0x6003000d), propputref]
+ HRESULT DataFormat(
+ [in] IUnknown *format);
+
+ [id(0x60030007), propput]
+ HRESULT Precision(
+ [in] unsigned char precision);
+
+ [id(0x60030008), propput]
+ HRESULT NumericScale(
+ [in] unsigned char scale);
+
+ [id(0x0000044e), propput]
+ HRESULT Type(
+ [in] DataTypeEnum type);
+
+ [id(0x0000044f), propput]
+ HRESULT DefinedSize(
+ [in] LONG size);
+
+ [id(0x0000040c), propput]
+ HRESULT Attributes(
+ [in] LONG attrs);
+};
+
+[
+ uuid(00000569-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface Field : Field20
+{
+ [id(0x0000045c), propget]
+ HRESULT Status(
+ [out, retval] LONG *status);
+};
+
+[
+ uuid(00000506-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface Fields15 : _Collection
+{
+ [id(00000000), propget]
+ HRESULT Item(
+ [in] VARIANT index,
+ [out, retval] Field **object);
+};
+
+[
+ uuid(0000054d-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface Fields20 : Fields15
+{
+ [id(0x60030001)]
+ HRESULT _Append(
+ [in] BSTR name,
+ [in] DataTypeEnum type,
+ [in, defaultvalue(0)] LONG size,
+ [in, defaultvalue(adFldUnspecified)] FieldAttributeEnum attr);
+
+ [id(0x60030002)]
+ HRESULT Delete(
+ [in] VARIANT index);
+};
+
+[
+ uuid(00000564-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface Fields : Fields20
+{
+ [id(0x60040001)]
+ HRESULT Append(
+ [in] BSTR name,
+ [in] DataTypeEnum type,
+ [in, defaultvalue(0)] LONG size,
+ [in, defaultvalue(adFldUnspecified)] FieldAttributeEnum attr,
+ [in, optional] VARIANT value);
+
+ [id(0x60040002)]
+ HRESULT Update();
+
+ [id(0x60040003)]
+ HRESULT Resync(
+ [in, defaultvalue(adResyncAllValues)] ResyncEnum resync_values);
+
+ [id(0x60040004)]
+ HRESULT CancelUpdate();
+};
+
+[
+ uuid(0000050e-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface Recordset15 : _ADO
+{
+ [id(0x000003e8), propget]
+ HRESULT AbsolutePosition(
+ [out, retval] PositionEnum_Param *position);
+
+ [id(0x000003e8), propput]
+ HRESULT AbsolutePosition(
+ [in] PositionEnum_Param position);
+
+ [id(0x000003e9), propputref]
+ HRESULT ActiveConnection(
+ [in] IDispatch *connection);
+
+ [id(0x000003e9), propput]
+ HRESULT ActiveConnection(
+ [in] VARIANT connection);
+
+ [id(0x000003e9), propget]
+ HRESULT ActiveConnection(
+ [out, retval] VARIANT *connection);
+
+ [id(0x000003ea), propget]
+ HRESULT BOF(
+ [out, retval] VARIANT_BOOL *bof);
+
+ [id(0x000003eb), propget]
+ HRESULT Bookmark(
+ [out, retval] VARIANT *bookmark);
+
+ [id(0x000003eb), propput]
+ HRESULT Bookmark(
+ [in] VARIANT bookmark);
+
+ [id(0x000003ec), propget]
+ HRESULT CacheSize(
+ [out, retval] LONG *size);
+
+ [id(0x000003ec), propput]
+ HRESULT CacheSize(
+ [in] LONG size);
+
+ [id(0x000003ed), propget]
+ HRESULT CursorType(
+ [out, retval] CursorTypeEnum *cursor_type);
+
+ [id(0x000003ed), propput]
+ HRESULT CursorType(
+ [in] CursorTypeEnum cursor_type);
+
+ [id(0x000003ee), propget]
+ HRESULT EOF(
+ [out, retval] VARIANT_BOOL *eof);
+
+ [id(00000000), propget]
+ HRESULT Fields(
+ [out, retval] Fields **object);
+
+ [id(0x000003f0), propget]
+ HRESULT LockType(
+ [out, retval] LockTypeEnum *lock_type);
+
+ [id(0x000003f0), propput]
+ HRESULT LockType(
+ [in] LockTypeEnum lock_type);
+
+ [id(0x000003f1), propget]
+ HRESULT MaxRecords(
+ [out, retval] LONG *max_records);
+
+ [id(0x000003f1), propput]
+ HRESULT MaxRecords(
+ [in] LONG max_records);
+
+ [id(0x000003f2), propget]
+ HRESULT RecordCount(
+ [out, retval] LONG *count);
+
+ [id(0x000003f3), propputref]
+ HRESULT Source(
+ [in] IDispatch *source);
+
+ [id(0x000003f3), propput]
+ HRESULT Source(
+ [in] BSTR source);
+
+ [id(0x000003f3), propget]
+ HRESULT Source(
+ [out, retval] VARIANT *source);
+
+ [id(0x000003f4)]
+ HRESULT AddNew(
+ [in, optional] VARIANT field_list,
+ [in, optional] VARIANT values);
+
+ [id(0x000003f5)]
+ HRESULT CancelUpdate();
+
+ [id(0x000003f6)]
+ HRESULT Close();
+
+ [id(0x000003f7)]
+ HRESULT Delete(
+ [in, defaultvalue(adAffectCurrent)] AffectEnum affect_records);
+
+ [id(0x000003f8)]
+ HRESULT GetRows(
+ [in, defaultvalue(-1)] LONG rows,
+ [in, optional] VARIANT start,
+ [in, optional] VARIANT fields,
+ [out, retval] VARIANT *var);
+
+ [id(0x000003f9)]
+ HRESULT Move(
+ [in] LONG num_records,
+ [in, optional] VARIANT start);
+
+ [id(0x000003fa)]
+ HRESULT MoveNext();
+
+ [id(0x000003fb)]
+ HRESULT MovePrevious();
+
+ [id(0x000003fc)]
+ HRESULT MoveFirst();
+
+ [id(0x000003fd)]
+ HRESULT MoveLast();
+
+ [id(0x000003fe)]
+ HRESULT Open(
+ [in, optional] VARIANT source,
+ [in, optional] VARIANT active_connection,
+ [in, defaultvalue(adOpenUnspecified)] CursorTypeEnum cursor_type,
+ [in, defaultvalue(adLockUnspecified)] LockTypeEnum lock_type,
+ [in, defaultvalue(-1)] LONG options);
+
+ [id(0x000003ff)]
+ HRESULT Requery(
+ [in, defaultvalue(-1)] LONG options);
+
+ [id(0x60030022), hidden]
+ HRESULT _xResync(
+ [in, defaultvalue(adAffectAll)] AffectEnum affect_records);
+
+ [id(0x00000401)]
+ HRESULT Update(
+ [in, optional] VARIANT fields,
+ [in, optional] VARIANT values);
+
+ [id(0x00000417), propget]
+ HRESULT AbsolutePage(
+ [out, retval] PositionEnum_Param *position);
+
+ [id(0x00000417), propput]
+ HRESULT AbsolutePage(
+ [in] PositionEnum_Param position);
+
+ [id(0x00000402), propget]
+ HRESULT EditMode(
+ [out, retval] EditModeEnum *mode);
+
+ [id(0x00000406), propget]
+ HRESULT Filter(
+ [out, retval] VARIANT *criteria);
+
+ [id(0x00000406), propput]
+ HRESULT Filter(
+ [in] VARIANT criteria);
+
+ [id(0x0000041a), propget]
+ HRESULT PageCount(
+ [out, retval] LONG *count);
+
+ [id(0x00000418), propget]
+ HRESULT PageSize(
+ [out, retval] LONG *size);
+
+ [id(0x00000418), propput]
+ HRESULT PageSize(
+ [in] LONG size);
+
+ [id(0x00000407), propget]
+ HRESULT Sort(
+ [out, retval] BSTR *criteria);
+
+ [id(0x00000407), propput]
+ HRESULT Sort(
+ [in] BSTR criteria);
+
+ [id(0x00000405), propget]
+ HRESULT Status(
+ [out, retval] LONG *status);
+
+ [id(0x0000041e), propget]
+ HRESULT State(
+ [out, retval] LONG *state);
+
+ [id(0x60030030), hidden]
+ HRESULT _xClone(
+ [out, retval] _Recordset **object);
+
+ [id(0x0000040b)]
+ HRESULT UpdateBatch(
+ [in, defaultvalue(adAffectAll)] AffectEnum affect_records);
+
+ [id(0x00000419)]
+ HRESULT CancelBatch(
+ [in, defaultvalue(adAffectAll)] AffectEnum affect_records);
+
+ [id(0x0000041b), propget]
+ HRESULT CursorLocation(
+ [out, retval] CursorLocationEnum *cursor_loc);
+
+ [id(0x0000041b), propput]
+ HRESULT CursorLocation(
+ [in] CursorLocationEnum cursor_loc);
+
+ [id(0x0000041c)]
+ HRESULT NextRecordset(
+ [out, optional] VARIANT *records_affected,
+ [out, retval] _Recordset **record_set);
+
+ [id(0x0000040c)]
+ HRESULT Supports(
+ [in] CursorOptionEnum cursor_options,
+ [out, retval] VARIANT_BOOL *ret);
+
+ [id(0xfffffff8), propget, hidden]
+ HRESULT Collect(
+ [in] VARIANT index,
+ [out, retval] VARIANT *var);
+
+ [id(0xfffffff8), propput, hidden]
+ HRESULT Collect(
+ [in] VARIANT index,
+ [in] VARIANT var);
+
+ [id(0x0000041d), propget]
+ HRESULT MarshalOptions(
+ [out, retval] MarshalOptionsEnum *options);
+
+ [id(0x0000041d), propput]
+ HRESULT MarshalOptions(
+ [in] MarshalOptionsEnum options);
+
+ [id(0x00000422)]
+ HRESULT Find(
+ [in] BSTR criteria,
+ [in, defaultvalue(0)] LONG skip_records,
+ [in, defaultvalue(adSearchForward)] SearchDirectionEnum search_direction,
+ [in, optional] VARIANT start);
+};
+
+[
+ uuid(0000054f-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface Recordset20 : Recordset15
+{
+ [id(0x0000041f)]
+ HRESULT Cancel();
+
+ [id(0x00000420), propget]
+ HRESULT DataSource(
+ [out, retval] IUnknown **data_source);
+
+ [id(0x00000420), propputref]
+ HRESULT DataSource(
+ [in] IUnknown *data_source);
+
+ [hidden]
+ HRESULT _xSave(
+ [in, optional] BSTR filename,
+ [in, defaultvalue(adPersistADTG)] PersistFormatEnum persist_format);
+
+ [id(0x00000425), propget]
+ HRESULT ActiveCommand(
+ [out, retval] IDispatch **cmd);
+
+ [id(0x00000427), propput]
+ HRESULT StayInSync(
+ [in] VARIANT_BOOL stay_in_sync);
+
+ [id(0x00000427), propget]
+ HRESULT StayInSync(
+ [out, retval] VARIANT_BOOL *stay_in_sync);
+
+ [id(0x00000426)]
+ HRESULT GetString(
+ [in, defaultvalue(adClipString)] StringFormatEnum string_format,
+ [in, defaultvalue(-1)] LONG num_rows,
+ [in, optional] BSTR column_delimeter,
+ [in, optional] BSTR row_delimeter,
+ [in, optional] BSTR null_expr,
+ [out, retval] BSTR *ret_string);
+
+ [id(0x00000428), propget]
+ HRESULT DataMember(
+ [out, retval] BSTR *data_member);
+
+ [id(0x00000428), propput]
+ HRESULT DataMember(
+ [in] BSTR data_member);
+
+ [id(0x00000429)]
+ HRESULT CompareBookmarks(
+ [in] VARIANT bookmark1,
+ [in] VARIANT bookmark2,
+ [out, retval] CompareEnum *compare);
+
+ [id(0x0000040a)]
+ HRESULT Clone(
+ [in, defaultvalue(adLockUnspecified)] LockTypeEnum lock_type,
+ [out, retval] _Recordset **object);
+
+ [id(0x00000400)]
+ HRESULT Resync(
+ [in, defaultvalue(adAffectAll)] AffectEnum affect_records,
+ [in, defaultvalue(adResyncAllValues)] ResyncEnum resync_values);
+};
+
+[
+ uuid(00000555-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface Recordset21 : Recordset20
+{
+ [id(0x0000042a)]
+ HRESULT Seek(
+ [in] VARIANT key_values,
+ [in, defaultvalue(adSeekFirstEQ)] SeekEnum seek_option);
+
+ [id(0x0000042b), propput]
+ HRESULT Index(
+ [in] BSTR index);
+
+ [id(0x0000042b), propget]
+ HRESULT Index(
+ [out, retval] BSTR *index);
+};
+
+[
+ uuid(00000556-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface _Recordset : Recordset21
+{
+ [id(0x00000421)]
+ HRESULT Save(
+ [in, optional] VARIANT destination,
+ [in, defaultvalue(adPersistADTG)] PersistFormatEnum persist_format);
+};
+
+[
+ uuid(00000500-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface Error : IDispatch
+{
+ [id(0x60020000), propget]
+ HRESULT Number(
+ [out, retval] LONG *number);
+
+ [id(0x60020001), propget]
+ HRESULT Source(
+ [out, retval] BSTR *str);
+
+ [id(00000000), propget]
+ HRESULT Description(
+ [out, retval] BSTR *str);
+
+ [id(0x60020003), propget]
+ HRESULT HelpFile(
+ [out, retval] BSTR *str);
+
+ [id(0x60020004), propget]
+ HRESULT HelpContext(
+ [out, retval] LONG *ctx);
+
+ [id(0x60020005), propget]
+ HRESULT SQLState(
+ [out, retval] BSTR *str);
+
+ [id(0x60020006), propget]
+ HRESULT NativeError(
+ [out, retval] LONG *error);
+};
+
+[
+ uuid(00000501-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface Errors : _Collection
+{
+ [id(00000000), propget]
+ HRESULT Item(
+ [in] VARIANT index,
+ [out, retval] Error **object);
+
+ [id(0x60030001)]
+ HRESULT Clear();
+};
+
+[
+ uuid(00000515-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ oleautomation
+]
+interface Connection15 : _ADO
+{
+ [id(00000000), propget]
+ HRESULT ConnectionString(
+ [out, retval] BSTR *str);
+
+ [id(00000000), propput]
+ HRESULT ConnectionString(
+ [in] BSTR str);
+
+ [id(0x00000002), propget]
+ HRESULT CommandTimeout(
+ [out, retval] LONG *timeout);
+
+ [id(0x00000002), propput]
+ HRESULT CommandTimeout(
+ [in] LONG timeout);
+
+ [id(0x00000003), propget]
+ HRESULT ConnectionTimeout(
+ [out, retval] LONG *timeout);
+
+ [id(0x00000003), propput]
+ HRESULT ConnectionTimeout(
+ [in] LONG timeout);
+
+ [id(0x00000004), propget]
+ HRESULT Version(
+ [out, retval] BSTR *str);
+
+ [id(0x00000005)]
+ HRESULT Close();
+
+ [id(0x00000006)]
+ HRESULT Execute(
+ [in] BSTR command,
+ [out, optional] VARIANT *records_affected,
+ [in, defaultvalue(-1)] LONG options,
+ [out, retval] _Recordset **record_set);
+
+ [id(0x00000007)]
+ HRESULT BeginTrans(
+ [out, retval] LONG *transaction_level);
+
+ [id(0x00000008)]
+ HRESULT CommitTrans();
+
+ [id(0x00000009)]
+ HRESULT RollbackTrans();
+
+ [id(0x0000000a)]
+ HRESULT Open(
+ [in, defaultvalue("")] BSTR connection_str,
+ [in, defaultvalue("")] BSTR user_id,
+ [in, defaultvalue("")] BSTR password,
+ [in, defaultvalue(-1)] LONG options);
+
+ [id(0x0000000b), propget]
+ HRESULT Errors(
+ [out, retval] Errors **object);
+
+ [id(0x0000000c), propget]
+ HRESULT DefaultDatabase(
+ [out, retval] BSTR *str);
+
+ [id(0x0000000c), propput]
+ HRESULT DefaultDatabase(
+ [in] BSTR str);
+
+ [id(0x0000000d), propget]
+ HRESULT IsolationLevel(
+ [out, retval] IsolationLevelEnum *level);
+
+ [id(0x0000000d), propput]
+ HRESULT IsolationLevel(
+ [in] IsolationLevelEnum level);
+
+ [id(0x0000000e), propget]
+ HRESULT Attributes(
+ [out, retval] LONG *attr);
+
+ [id(0x0000000e), propput]
+ HRESULT Attributes(
+ [in] LONG attr);
+
+ [id(0x0000000f), propget]
+ HRESULT CursorLocation(
+ [out, retval] CursorLocationEnum *cursor_loc);
+
+ [id(0x0000000f), propput]
+ HRESULT CursorLocation(
+ [in] CursorLocationEnum cursor_loc);
+
+ [id(0x00000010), propget]
+ HRESULT Mode(
+ [out, retval] ConnectModeEnum *mode);
+
+ [id(0x00000010), propput]
+ HRESULT Mode(
+ [in] ConnectModeEnum mode);
+
+ [id(0x00000011), propget]
+ HRESULT Provider(
+ [out, retval] BSTR *str);
+
+ [id(0x00000011), propput]
+ HRESULT Provider(
+ [in] BSTR str);
+
+ [id(0x00000012), propget]
+ HRESULT State(
+ [out, retval] LONG *state);
+
+ [id(0x00000013)]
+ HRESULT OpenSchema(
+ [in] SchemaEnum schema,
+ [in, optional] VARIANT restrictions,
+ [in, optional] VARIANT schema_id,
+ [out, retval] _Recordset **record_set);
+};
+
+[
+ uuid(00000550-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ oleautomation
+]
+interface _Connection : Connection15
+{
+ [id(0x00000015)]
+ HRESULT Cancel();
+};
+
+[
+ uuid(0000050c-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface _Parameter : _ADO
+{
+ [id(0x60030000), propget]
+ HRESULT Name(
+ [out, retval] BSTR *str);
+
+ [id(0x60030000), propput]
+ HRESULT Name(
+ [in] BSTR str);
+
+ [id(00000000), propget]
+ HRESULT Value(
+ [out, retval] VARIANT *val);
+
+ [id(00000000), propput]
+ HRESULT Value(
+ [in] VARIANT val);
+
+ [id(0x60030004), propget]
+ HRESULT Type(
+ [out, retval] DataTypeEnum *data_type);
+
+ [id(0x60030004), propput]
+ HRESULT Type(
+ [in] DataTypeEnum data_type);
+
+ [id(0x60030006), propput]
+ HRESULT Direction(
+ [in] ParameterDirectionEnum direction);
+
+ [id(0x60030006), propget]
+ HRESULT Direction(
+ [out, retval] ParameterDirectionEnum *direction);
+
+ [id(0x60030008), propput]
+ HRESULT Precision(
+ [in] unsigned char precision);
+
+ [id(0x60030008), propget]
+ HRESULT Precision(
+ [out, retval] unsigned char *precision);
+
+ [id(0x6003000a), propput]
+ HRESULT NumericScale(
+ [in] unsigned char scale);
+
+ [id(0x6003000a), propget]
+ HRESULT NumericScale(
+ [out, retval] unsigned char *scale);
+
+ [id(0x6003000c), propput]
+ HRESULT Size(
+ [in] LONG size);
+
+ [id(0x6003000c), propget]
+ HRESULT Size(
+ [out, retval] LONG *size);
+
+ [id(0x6003000e)]
+ HRESULT AppendChunk(
+ [in] VARIANT val);
+
+ [id(0x6003000f), propget]
+ HRESULT Attributes(
+ [out, retval] LONG *attrs);
+
+ [id(0x6003000f), propput]
+ HRESULT Attributes(
+ [in] LONG attrs);
+};
+
+[
+ uuid(00000513-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface _DynaCollection : _Collection
+{
+ [id(0x60030000)]
+ HRESULT Append(
+ [in] IDispatch *object);
+
+ [id(0x60030001)]
+ HRESULT Delete(
+ [in] VARIANT index);
+};
+
+[
+ uuid(0000050d-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface Parameters : _DynaCollection
+{
+ [id(00000000), propget]
+ HRESULT Item(
+ [in] VARIANT index,
+ [out, retval] _Parameter **object);
+};
+
+[
+ uuid(00000508-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface Command15 : _ADO
+{
+ [id(0x60030000), propget]
+ HRESULT ActiveConnection(
+ [out, retval] _Connection **object);
+
+ [id(0x60030000), propputref]
+ HRESULT ActiveConnection(
+ [in] _Connection *object);
+
+ [id(0x60030000), propput]
+ HRESULT ActiveConnection(
+ [in] VARIANT object);
+
+ [id(0x60030003), propget]
+ HRESULT CommandText(
+ [out, retval] BSTR *str);
+
+ [id(0x60030003), propput]
+ HRESULT CommandText(
+ [in] BSTR str);
+
+ [id(0x60030005), propget]
+ HRESULT CommandTimeout(
+ [out, retval] LONG *timeout);
+
+ [id(0x60030005), propput]
+ HRESULT CommandTimeout(
+ [in] LONG timeout);
+
+ [id(0x60030007), propget]
+ HRESULT Prepared(
+ [out, retval] VARIANT_BOOL *prepared);
+
+ [id(0x60030007), propput]
+ HRESULT Prepared(
+ [in] VARIANT_BOOL prepared);
+
+ [id(0x60030009)]
+ HRESULT Execute(
+ [out, optional] VARIANT *records_affected,
+ [in, optional] VARIANT *parameters,
+ [in, defaultvalue(-1)] LONG options,
+ [out, retval] _Recordset **record_set);
+
+ [id(0x6003000a)]
+ HRESULT CreateParameter(
+ [in, defaultvalue("")] BSTR name,
+ [in, defaultvalue(adEmpty)] DataTypeEnum type,
+ [in, defaultvalue(adParamInput)] ParameterDirectionEnum direction,
+ [in, defaultvalue(0)] LONG size,
+ [in, optional] VARIANT value,
+ [out, retval] _Parameter **parameter);
+
+ [id(00000000), propget]
+ HRESULT Parameters(
+ [out, retval] Parameters **object);
+
+ [id(0x6003000c), propput]
+ HRESULT CommandType(
+ [in] CommandTypeEnum cmd_type);
+
+ [id(0x6003000c), propget]
+ HRESULT CommandType(
+ [out, retval] CommandTypeEnum *cmd_type);
+
+ [id(0x6003000e), propget]
+ HRESULT Name(
+ [out, retval] BSTR *name);
+
+ [id(0x6003000e), propput]
+ HRESULT Name(
+ [in] BSTR name);
+};
+
+[
+ uuid(0000054e-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface Command25 : Command15
+{
+ [id(0x60030010), propget]
+ HRESULT State(
+ [out, retval] LONG *state);
+
+ [id(0x60030011)]
+ HRESULT Cancel();
+};
+
+[
+ uuid(b08400bd-f9d1-4d02-b856-71d5dba123e9),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface _Command : Command25
+{
+ [id(0x60030012), propputref]
+ HRESULT CommandStream(
+ [in] IUnknown *stream);
+
+ [id(0x60030012), propget]
+ HRESULT CommandStream(
+ [out, retval] VARIANT *stream);
+
+ [id(0x60030013), propput]
+ HRESULT Dialect(
+ [in] BSTR dialect);
+
+ [id(0x60030013), propget]
+ HRESULT Dialect(
+ [out, retval] BSTR *dialect);
+
+ [id(0x60030014), propput]
+ HRESULT NamedParameters(
+ [in] VARIANT_BOOL named_parameters);
+
+ [id(0x60030014), propget]
+ HRESULT NamedParameters(
+ [out, retval] VARIANT_BOOL *named_parameters);
+};
+
+[
+ uuid(00000400-0000-0010-8000-00aa006d2ea4)
+]
+dispinterface ConnectionEvents
+{
+ properties:
+ methods:
+ [id(00000000)]
+ HRESULT InfoMessage(
+ [in] Error *error,
+ [in, out] EventStatusEnum *status,
+ [in] _Connection *Connection);
+
+ [id(0x00000001)]
+ HRESULT BeginTransComplete(
+ [in] LONG TransactionLevel,
+ [in] Error *error,
+ [in, out] EventStatusEnum *status,
+ [in] _Connection *connection);
+
+ [id(0x00000003)]
+ HRESULT CommitTransComplete(
+ [in] Error *error,
+ [in, out] EventStatusEnum *status,
+ [in] _Connection *connection);
+
+ [id(0x00000002)]
+ HRESULT RollbackTransComplete(
+ [in] Error *error,
+ [in, out] EventStatusEnum *status,
+ [in] _Connection *connection);
+
+ [id(0x00000004)]
+ HRESULT WillExecute(
+ [in, out] BSTR *source,
+ [in, out] CursorTypeEnum *cursor_type,
+ [in, out] LockTypeEnum *lock_type,
+ [in, out] LONG *options,
+ [in, out] EventStatusEnum *status,
+ [in] _Command *command,
+ [in] _Recordset *record_set,
+ [in] _Connection *connection);
+
+ [id(0x00000005)]
+ HRESULT ExecuteComplete(
+ [in] LONG records_affected,
+ [in] Error *error,
+ [in, out] EventStatusEnum *status,
+ [in] _Command *command,
+ [in] _Recordset *record_set,
+ [in] _Connection *connection);
+
+ [id(0x00000006)]
+ HRESULT WillConnect(
+ [in, out] BSTR *string,
+ [in, out] BSTR *userid,
+ [in, out] BSTR *password,
+ [in, out] LONG *options,
+ [in, out] EventStatusEnum *status,
+ [in] _Connection *connection);
+
+ [id(0x00000007)]
+ HRESULT ConnectComplete(
+ [in] Error *error,
+ [in, out] EventStatusEnum *status,
+ [in] _Connection *connection);
+
+ [id(0x00000008)]
+ HRESULT Disconnect(
+ [in, out] EventStatusEnum *status,
+ [in] _Connection *connection);
+};
+
+[
+ uuid(00000562-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface _Record : _ADO
+{
+ [id(1), propget]
+ HRESULT ActiveConnection(
+ [out, retval] VARIANT *connection);
+
+ [id(1), propput]
+ HRESULT ActiveConnection(
+ [in] BSTR connection);
+
+ [id(1), propputref]
+ HRESULT ActiveConnection(
+ [in] _Connection *connection);
+
+ [id(2), propget]
+ HRESULT State(
+ [out, retval] ObjectStateEnum *state);
+
+ [id(3), propget]
+ HRESULT Source(
+ [out, retval] VARIANT *source);
+
+ [id(3), propput]
+ HRESULT Source(
+ [in] BSTR source);
+
+ [id(3), propputref]
+ HRESULT Source(
+ [in] IDispatch *source);
+
+ [id(4), propget]
+ HRESULT Mode(
+ [out, retval] ConnectModeEnum *mode);
+
+ [id(4), propput]
+ HRESULT Mode(
+ [in] ConnectModeEnum mode);
+
+ [id(5), propget]
+ HRESULT ParentURL(
+ [out, retval] BSTR *parent_URL);
+
+ [id(6)]
+ HRESULT MoveRecord(
+ [in, defaultvalue("")] BSTR source,
+ [in, defaultvalue("")] BSTR Destination,
+ [in, optional] BSTR UserName,
+ [in, optional] BSTR Password,
+ [in, defaultvalue(adMoveUnspecified)] MoveRecordOptionsEnum Options,
+ [in, optional] VARIANT_BOOL Async,
+ [out, retval] BSTR *pbstrNewURL);
+
+ [id(7)]
+ HRESULT CopyRecord(
+ [in, defaultvalue("")] BSTR source,
+ [in, defaultvalue("")] BSTR destination,
+ [in, optional] BSTR username,
+ [in, optional] BSTR password,
+ [in, defaultvalue(adCopyUnspecified)] CopyRecordOptionsEnum options,
+ [in, optional] VARIANT_BOOL async,
+ [out, retval] BSTR *new_URL);
+
+ [id(8)]
+ HRESULT DeleteRecord(
+ [in] BSTR source,
+ [in, optional] VARIANT_BOOL async);
+
+ [id(9)]
+ HRESULT Open(
+ [in, optional] VARIANT source,
+ [in, optional] VARIANT active_connection,
+ [in, optional] ConnectModeEnum mode,
+ [in, defaultvalue(adFailIfNotExists)] RecordCreateOptionsEnum create_options,
+ [in, defaultvalue(adOpenRecordUnspecified)] RecordOpenOptionsEnum options,
+ [in, optional] BSTR username,
+ [in, optional] BSTR password);
+
+ [id(10)]
+ HRESULT Close();
+
+ [id(0), propget]
+ HRESULT Fields(
+ [out, retval] Fields **fields);
+
+ [id(11), propget]
+ HRESULT RecordType(
+ [out, retval] RecordTypeEnum *type);
+
+ [id(12)]
+ HRESULT GetChildren(
+ [out, retval] _Recordset **record_set);
+
+ [id(13)]
+ HRESULT Cancel();
+};
+
+[
+ uuid(00000565-0000-0010-8000-00aa006d2ea4),
+ odl,
+ dual,
+ nonextensible,
+ oleautomation
+]
+interface _Stream : IDispatch
+{
+ [id(1), propget]
+ HRESULT Size(
+ [out, retval] LONG *size);
+
+ [id(2), propget]
+ HRESULT EOS(
+ [out, retval] VARIANT_BOOL *eos);
+
+ [id(3), propget]
+ HRESULT Position(
+ [out, retval] LONG *position);
+
+ [id(3), propput]
+ HRESULT Position(
+ [in] LONG position);
+
+ [id(4), propget]
+ HRESULT Type(
+ [out, retval] StreamTypeEnum *type);
+
+ [id(4), propput]
+ HRESULT Type(
+ [in] StreamTypeEnum type);
+
+ [id(5), propget]
+ HRESULT LineSeparator(
+ [out, retval] LineSeparatorEnum *separator);
+
+ [id(5), propput]
+ HRESULT LineSeparator(
+ [in] LineSeparatorEnum separator);
+
+ [id(6), propget]
+ HRESULT State(
+ [out, retval] ObjectStateEnum *state);
+
+ [id(7), propget]
+ HRESULT Mode(
+ [out, retval] ConnectModeEnum *mode);
+
+ [id(7), propput]
+ HRESULT Mode(
+ [in] ConnectModeEnum mode);
+
+ [id(8), propget]
+ HRESULT Charset(
+ [out, retval] BSTR *charset);
+
+ [id(8), propput]
+ HRESULT Charset(
+ [in] BSTR charset);
+
+ [id(9)]
+ HRESULT Read(
+ [in, defaultvalue(adReadAll)] LONG num_bytes,
+ [out, retval] VARIANT *val);
+
+ [id(10)]
+ HRESULT Open(
+ [in, optional] VARIANT source,
+ [in, defaultvalue(adModeUnknown)] ConnectModeEnum mode,
+ [in, defaultvalue(adOpenStreamUnspecified)] StreamOpenOptionsEnum options,
+ [in, optional] BSTR username,
+ [in, optional] BSTR password);
+
+ [id(11)]
+ HRESULT Close(void);
+
+ [id(12)]
+ HRESULT SkipLine(void);
+
+ [id(13)]
+ HRESULT Write(
+ [in] VARIANT buffer);
+
+ [id(14)]
+ HRESULT SetEOS(void);
+
+ [id(15)]
+ HRESULT CopyTo(
+ [in] _Stream *dest,
+ [in, defaultvalue(-1)] LONG size);
+
+ [id(16)]
+ HRESULT Flush(void);
+
+ [id(17)]
+ HRESULT SaveToFile(
+ [in] BSTR FileName,
+ [in, defaultvalue(adSaveCreateNotExist)] SaveOptionsEnum options);
+
+ [id(18)]
+ HRESULT LoadFromFile(
+ [in] BSTR filename);
+
+ [id(19)]
+ HRESULT ReadText(
+ [in, defaultvalue(adReadAll)] LONG size,
+ [out, retval] BSTR *str);
+
+ [id(20)]
+ HRESULT WriteText(
+ [in] BSTR data,
+ [in, defaultvalue(adWriteChar)] StreamWriteEnum options);
+
+ [id(21)]
+ HRESULT Cancel(void);
+};
+
+[
+ uuid(00000266-0000-0010-8000-00aa006d2ea4)
+]
+dispinterface RecordsetEvents
+{
+ properties:
+ methods:
+ [id(0x00000009)]
+ HRESULT WillChangeField(
+ [in] LONG count,
+ [in] VARIANT fields,
+ [in, out] EventStatusEnum *status,
+ [in] _Recordset *record_set);
+
+ [id(0x0000000a)]
+ HRESULT FieldChangeComplete(
+ [in] LONG count,
+ [in] VARIANT fields,
+ [in] Error *error,
+ [in, out] EventStatusEnum *status,
+ [in] _Recordset *record_set);
+
+ [id(0x0000000b)]
+ HRESULT WillChangeRecord(
+ [in] EventReasonEnum reason,
+ [in] LONG count,
+ [in, out] EventStatusEnum *status,
+ [in] _Recordset *record_set);
+
+ [id(0x0000000c)]
+ HRESULT RecordChangeComplete(
+ [in] EventReasonEnum reason,
+ [in] LONG count,
+ [in] Error *error,
+ [in, out] EventStatusEnum *status,
+ [in] _Recordset *record_set);
+
+ [id(0x0000000d)]
+ HRESULT WillChangeRecordset(
+ [in] EventReasonEnum reason,
+ [in, out] EventStatusEnum *status,
+ [in] _Recordset *record_set);
+
+ [id(0x0000000e)]
+ HRESULT RecordsetChangeComplete(
+ [in] EventReasonEnum reason,
+ [in] Error *error,
+ [in, out] EventStatusEnum *status,
+ [in] _Recordset *record_set);
+
+ [id(0x0000000f)]
+ HRESULT WillMove(
+ [in] EventReasonEnum reason,
+ [in, out] EventStatusEnum *status,
+ [in] _Recordset *record_set);
+
+ [id(0x00000010)]
+ HRESULT MoveComplete(
+ [in] EventReasonEnum reason,
+ [in] Error *error,
+ [in, out] EventStatusEnum *status,
+ [in] _Recordset *record_set);
+
+ [id(0x00000011)]
+ HRESULT EndOfRecordset(
+ [in, out] VARIANT_BOOL *more_data,
+ [in, out] EventStatusEnum *status,
+ [in] _Recordset *record_set);
+
+ [id(0x00000012)]
+ HRESULT FetchProgress(
+ [in] LONG progress,
+ [in] LONG max_progress,
+ [in, out] EventStatusEnum *status,
+ [in] _Recordset *record_set);
+
+ [id(0x00000013)]
+ HRESULT FetchComplete(
+ [in] Error *error,
+ [in, out] EventStatusEnum *status,
+ [in] _Recordset *record_set);
+};
+
+[
+ uuid(00000538-0000-0010-8000-00aa006d2ea4),
+ odl,
+ hidden
+]
+interface ADODebugging : IUnknown
+{
+ HRESULT IsGlobalDebugMode(
+ VARIANT_BOOL *debugging_on);
+
+ HRESULT SetGlobalDebugMode(
+ IUnknown *debugger,
+ VARIANT_BOOL debugging_on);
+};
+
+[
+ uuid(00000516-0000-0010-8000-00aa006d2ea4),
+ odl,
+ restricted
+]
+interface ADOConnectionConstruction15 : IUnknown
+{
+ [propget]
+ HRESULT DSO(
+ [out, retval] IUnknown **dso);
+
+ [propget]
+ HRESULT Session(
+ [out, retval] IUnknown **session);
+
+ HRESULT WrapDSOandSession(
+ [in] IUnknown *dso,
+ [in] IUnknown *session);
+};
+
+[
+ uuid(00000551-0000-0010-8000-00aa006d2ea4),
+ odl,
+ restricted
+]
+interface ADOConnectionConstruction : ADOConnectionConstruction15
+{
+};
+
+[
+ uuid(00000517-0000-0010-8000-00aa006d2ea4),
+ odl,
+ restricted
+]
+interface ADOCommandConstruction : IUnknown
+{
+ [propget]
+ HRESULT OLEDBCommand(
+ [out, retval] IUnknown **command);
+
+ [propput]
+ HRESULT OLEDBCommand(
+ [in] IUnknown *command);
+};
+
+[
+ uuid(00000283-0000-0010-8000-00aa006d2ea4),
+ odl,
+ restricted
+]
+interface ADORecordsetConstruction : IDispatch
+{
+ [propget]
+ HRESULT Rowset(
+ [out, retval] IUnknown **row_set);
+
+ [propput]
+ HRESULT Rowset(
+ [in] IUnknown *row_set);
+
+ [propget]
+ HRESULT Chapter(
+ [out, retval] LONG *chapter);
+
+ [propput]
+ HRESULT Chapter(
+ [in] LONG chapter);
+
+ [propget]
+ HRESULT RowPosition(
+ [out, retval] IUnknown **row_pos);
+
+ [propput]
+ HRESULT RowPosition(
+ [in] IUnknown *row_pos);
+};
+
+[
+ uuid(2a75196c-d9eb-4129-b803-931327f72d5c),
+ version(2.8)
+]
+library ADODB
+{
+ importlib("stdole2.tlb");
+
+ [
+ uuid(00000514-0000-0010-8000-00aa006d2ea4),
+ ]
+ coclass Connection
+ {
+ [default] interface _Connection;
+ [default, source] dispinterface ConnectionEvents;
+ };
+
+ [
+ uuid(00000507-0000-0010-8000-00aa006d2ea4),
+ ]
+ coclass Command
+ {
+ [default] interface _Command;
+ };
+
+ [
+ uuid(00000535-0000-0010-8000-00aa006d2ea4),
+ ]
+ coclass Recordset
+ {
+ [default] interface _Recordset;
+ [default, source] dispinterface RecordsetEvents;
+ };
+
+ [
+ uuid(0000050b-0000-0010-8000-00aa006d2ea4),
+ ]
+ coclass Parameter
+ {
+ [default] interface _Parameter;
+ };
+
+ [
+ uuid(00000560-0000-0010-8000-00aa006d2ea4),
+ ]
+ coclass Record
+ {
+ [default] interface _Record;
+ };
+
+ [
+ uuid(00000566-0000-0010-8000-00aa006d2ea4),
+ ]
+ coclass Stream
+ {
+ [default] interface _Stream;
+ };
+}
--
2.20.1
1
0
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
---
dlls/msvcrt/mathf.c | 4 ++++
1 file changed, 4 insertions(+)
1
0
06 Dec '19
We want to be specific about used function and not want optimizations to
interfere.
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
---
tools/makedep.c | 1 +
1 file changed, 1 insertion(+)
1
0
06 Dec '19
From: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
---
dlls/vbscript/tests/vbscript.c | 271 +++++++++++++++++++++++++++++++++
1 file changed, 271 insertions(+)
1
0
From: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
---
dlls/vbscript/vbdisp.c | 60 ++++++++++++++++++++++++++++++++++++++++--
1 file changed, 58 insertions(+), 2 deletions(-)
1
0
06 Dec '19
From: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
---
dlls/vbscript/vbdisp.c | 45 +++++++++++++++++++++++++++++++++--
dlls/vbscript/vbscript.h | 1 +
dlls/vbscript/vbscript_main.c | 25 +++++++++++++++++++
3 files changed, 69 insertions(+), 2 deletions(-)
1
0
From: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
---
dlls/vbscript/vbdisp.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
1
0