msxml3: Move IDispatchEx support definitions to a separate header.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2021-08-16 11:52:19 +03:00 committed by Alexandre Julliard
parent 37bba6e647
commit e78fba0e15
3 changed files with 126 additions and 107 deletions

View file

@ -18,30 +18,16 @@
#define COBJMACROS
#include "config.h"
#include <stdarg.h>
#ifdef HAVE_LIBXML2
# include <libxml/parser.h>
# include <libxml/xmlerror.h>
#endif
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "winnls.h"
#include "ole2.h"
#include "msxml6.h"
#include "msxml6did.h"
#include "wininet.h"
#include "urlmon.h"
#include "winreg.h"
#include "shlwapi.h"
#include "msxml2.h"
#include "msxml2did.h"
#include "dispex.h"
#include "wine/debug.h"
#include "wine/unicode.h"
#include "wine/heap.h"
#include "msxml_private.h"
#include "msxml_dispex.h"
WINE_DEFAULT_DEBUG_CHANNEL(msxml);
@ -54,7 +40,6 @@ static CRITICAL_SECTION_DEBUG cs_dispex_static_data_dbg =
};
static CRITICAL_SECTION cs_dispex_static_data = { &cs_dispex_static_data_dbg, -1, 0, 0, 0, 0 };
enum lib_version_t
{
LibXml = 0,
@ -258,7 +243,7 @@ static int dispid_cmp(const void *p1, const void *p2)
static int func_name_cmp(const void *p1, const void *p2)
{
return strcmpiW((*(func_info_t* const*)p1)->name, (*(func_info_t* const*)p2)->name);
return lstrcmpiW((*(func_info_t* const*)p1)->name, (*(func_info_t* const*)p2)->name);
}
static dispex_data_t *preprocess_dispex_data(DispatchEx *This)
@ -439,9 +424,9 @@ static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DW
while(min <= max) {
n = (min+max)/2;
c = strcmpiW(data->name_table[n]->name, bstrName);
c = lstrcmpiW(data->name_table[n]->name, bstrName);
if(!c) {
if((grfdex & fdexNameCaseSensitive) && strcmpW(data->name_table[n]->name, bstrName))
if((grfdex & fdexNameCaseSensitive) && lstrcmpW(data->name_table[n]->name, bstrName))
break;
*pid = data->name_table[n]->id;

116
dlls/msxml3/msxml_dispex.h Normal file
View file

@ -0,0 +1,116 @@
/*
* Copyright 2005 Mike McCormack
*
* 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 __MSXML_DISPEX__
#define __MSXML_DISPEX__
#include "dispex.h"
#include "wine/heap.h"
#include "wine/list.h"
typedef enum
{
MSXML_DEFAULT = 0,
MSXML2 = 20,
MSXML26 = 26,
MSXML3 = 30,
MSXML4 = 40,
MSXML6 = 60
} MSXML_VERSION;
typedef enum tid_t
{
NULL_tid,
IXMLDOMAttribute_tid,
IXMLDOMCDATASection_tid,
IXMLDOMComment_tid,
IXMLDOMDocument_tid,
IXMLDOMDocument2_tid,
IXMLDOMDocument3_tid,
IXMLDOMDocumentFragment_tid,
IXMLDOMDocumentType_tid,
IXMLDOMElement_tid,
IXMLDOMEntityReference_tid,
IXMLDOMImplementation_tid,
IXMLDOMNamedNodeMap_tid,
IXMLDOMNode_tid,
IXMLDOMNodeList_tid,
IXMLDOMParseError2_tid,
IXMLDOMProcessingInstruction_tid,
IXMLDOMSchemaCollection_tid,
IXMLDOMSchemaCollection2_tid,
IXMLDOMSelection_tid,
IXMLDOMText_tid,
IXMLElement_tid,
IXMLDocument_tid,
IXMLHTTPRequest_tid,
IXSLProcessor_tid,
IXSLTemplate_tid,
IVBSAXAttributes_tid,
IVBSAXContentHandler_tid,
IVBSAXDeclHandler_tid,
IVBSAXDTDHandler_tid,
IVBSAXEntityResolver_tid,
IVBSAXErrorHandler_tid,
IVBSAXLexicalHandler_tid,
IVBSAXLocator_tid,
IVBSAXXMLFilter_tid,
IVBSAXXMLReader_tid,
IMXAttributes_tid,
IMXReaderControl_tid,
IMXWriter_tid,
IVBMXNamespaceManager_tid,
IServerXMLHTTPRequest_tid,
LAST_tid
} tid_t;
extern HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo) DECLSPEC_HIDDEN;
extern void release_typelib(void) DECLSPEC_HIDDEN;
typedef struct dispex_data_t dispex_data_t;
typedef struct
{
HRESULT (*get_dispid)(IUnknown*,BSTR,DWORD,DISPID*);
HRESULT (*invoke)(IUnknown*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*);
} dispex_static_data_vtbl_t;
typedef struct
{
const dispex_static_data_vtbl_t *vtbl;
const tid_t disp_tid;
dispex_data_t *data;
const tid_t* const iface_tids;
} dispex_static_data_t;
typedef struct
{
IDispatchEx IDispatchEx_iface;
IUnknown *outer;
dispex_static_data_t *data;
} DispatchEx;
void init_dispex(DispatchEx*,IUnknown*,dispex_static_data_t*) DECLSPEC_HIDDEN;
void release_dispex(DispatchEx*) DECLSPEC_HIDDEN;
BOOL dispex_query_interface(DispatchEx*,REFIID,void**) DECLSPEC_HIDDEN;
const IID *get_riid_from_tid(enum tid_t tid) DECLSPEC_HIDDEN;
#endif /* __MSXML_DISPEX__ */

View file

@ -27,67 +27,15 @@
#include "wine/heap.h"
#include "wine/list.h"
#include "msxml_dispex.h"
#ifndef __WINE_CONFIG_H
# error You must include config.h to use this header
#endif
typedef enum {
MSXML_DEFAULT = 0,
MSXML2 = 20,
MSXML26 = 26,
MSXML3 = 30,
MSXML4 = 40,
MSXML6 = 60
} MSXML_VERSION;
extern const CLSID * DOMDocument_version(MSXML_VERSION v) DECLSPEC_HIDDEN;
extern const CLSID * SchemaCache_version(MSXML_VERSION v) DECLSPEC_HIDDEN;
/* typelibs */
typedef enum tid_t {
NULL_tid,
IXMLDOMAttribute_tid,
IXMLDOMCDATASection_tid,
IXMLDOMComment_tid,
IXMLDOMDocument_tid,
IXMLDOMDocument2_tid,
IXMLDOMDocument3_tid,
IXMLDOMDocumentFragment_tid,
IXMLDOMDocumentType_tid,
IXMLDOMElement_tid,
IXMLDOMEntityReference_tid,
IXMLDOMImplementation_tid,
IXMLDOMNamedNodeMap_tid,
IXMLDOMNode_tid,
IXMLDOMNodeList_tid,
IXMLDOMParseError2_tid,
IXMLDOMProcessingInstruction_tid,
IXMLDOMSchemaCollection_tid,
IXMLDOMSchemaCollection2_tid,
IXMLDOMSelection_tid,
IXMLDOMText_tid,
IXMLElement_tid,
IXMLDocument_tid,
IXMLHTTPRequest_tid,
IXSLProcessor_tid,
IXSLTemplate_tid,
IVBSAXAttributes_tid,
IVBSAXContentHandler_tid,
IVBSAXDeclHandler_tid,
IVBSAXDTDHandler_tid,
IVBSAXEntityResolver_tid,
IVBSAXErrorHandler_tid,
IVBSAXLexicalHandler_tid,
IVBSAXLocator_tid,
IVBSAXXMLFilter_tid,
IVBSAXXMLReader_tid,
IMXAttributes_tid,
IMXReaderControl_tid,
IMXWriter_tid,
IVBMXNamespaceManager_tid,
IServerXMLHTTPRequest_tid,
LAST_tid
} tid_t;
/* The XDR datatypes (urn:schemas-microsoft-com:datatypes)
* These are actually valid for XSD schemas as well
@ -134,38 +82,8 @@ typedef enum _XDR_DT {
LAST_DT
} XDR_DT;
extern HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo) DECLSPEC_HIDDEN;
extern void release_typelib(void) DECLSPEC_HIDDEN;
typedef struct dispex_data_t dispex_data_t;
typedef struct {
HRESULT (*get_dispid)(IUnknown*,BSTR,DWORD,DISPID*);
HRESULT (*invoke)(IUnknown*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*);
} dispex_static_data_vtbl_t;
typedef struct {
const dispex_static_data_vtbl_t *vtbl;
const tid_t disp_tid;
dispex_data_t *data;
const tid_t* const iface_tids;
} dispex_static_data_t;
typedef struct {
IDispatchEx IDispatchEx_iface;
IUnknown *outer;
dispex_static_data_t *data;
} DispatchEx;
extern HINSTANCE MSXML_hInstance DECLSPEC_HIDDEN;
void init_dispex(DispatchEx*,IUnknown*,dispex_static_data_t*) DECLSPEC_HIDDEN;
void release_dispex(DispatchEx*) DECLSPEC_HIDDEN;
BOOL dispex_query_interface(DispatchEx*,REFIID,void**) DECLSPEC_HIDDEN;
const IID *get_riid_from_tid(enum tid_t tid) DECLSPEC_HIDDEN;
/* memory allocation functions */
static inline void* __WINE_ALLOC_SIZE(2) heap_realloc_zero(void *mem, size_t size)