/*** Autogenerated by WIDL 11.0 from ../wine-11.0/include/msopc.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __msopc_h__
#define __msopc_h__

/* Forward declarations */

#ifndef __IOpcPart_FWD_DEFINED__
#define __IOpcPart_FWD_DEFINED__
typedef interface IOpcPart IOpcPart;
#ifdef __cplusplus
interface IOpcPart;
#endif /* __cplusplus */
#endif

#ifndef __IOpcPartEnumerator_FWD_DEFINED__
#define __IOpcPartEnumerator_FWD_DEFINED__
typedef interface IOpcPartEnumerator IOpcPartEnumerator;
#ifdef __cplusplus
interface IOpcPartEnumerator;
#endif /* __cplusplus */
#endif

#ifndef __IOpcRelationshipEnumerator_FWD_DEFINED__
#define __IOpcRelationshipEnumerator_FWD_DEFINED__
typedef interface IOpcRelationshipEnumerator IOpcRelationshipEnumerator;
#ifdef __cplusplus
interface IOpcRelationshipEnumerator;
#endif /* __cplusplus */
#endif

#ifndef __IOpcPartSet_FWD_DEFINED__
#define __IOpcPartSet_FWD_DEFINED__
typedef interface IOpcPartSet IOpcPartSet;
#ifdef __cplusplus
interface IOpcPartSet;
#endif /* __cplusplus */
#endif

#ifndef __IOpcRelationship_FWD_DEFINED__
#define __IOpcRelationship_FWD_DEFINED__
typedef interface IOpcRelationship IOpcRelationship;
#ifdef __cplusplus
interface IOpcRelationship;
#endif /* __cplusplus */
#endif

#ifndef __IOpcRelationshipSet_FWD_DEFINED__
#define __IOpcRelationshipSet_FWD_DEFINED__
typedef interface IOpcRelationshipSet IOpcRelationshipSet;
#ifdef __cplusplus
interface IOpcRelationshipSet;
#endif /* __cplusplus */
#endif

#ifndef __IOpcPackage_FWD_DEFINED__
#define __IOpcPackage_FWD_DEFINED__
typedef interface IOpcPackage IOpcPackage;
#ifdef __cplusplus
interface IOpcPackage;
#endif /* __cplusplus */
#endif

#ifndef __IOpcUri_FWD_DEFINED__
#define __IOpcUri_FWD_DEFINED__
typedef interface IOpcUri IOpcUri;
#ifdef __cplusplus
interface IOpcUri;
#endif /* __cplusplus */
#endif

#ifndef __IOpcPartUri_FWD_DEFINED__
#define __IOpcPartUri_FWD_DEFINED__
typedef interface IOpcPartUri IOpcPartUri;
#ifdef __cplusplus
interface IOpcPartUri;
#endif /* __cplusplus */
#endif

#ifndef __IOpcFactory_FWD_DEFINED__
#define __IOpcFactory_FWD_DEFINED__
typedef interface IOpcFactory IOpcFactory;
#ifdef __cplusplus
interface IOpcFactory;
#endif /* __cplusplus */
#endif

#ifndef __OpcFactory_FWD_DEFINED__
#define __OpcFactory_FWD_DEFINED__
#ifdef __cplusplus
typedef class OpcFactory OpcFactory;
#else
typedef struct OpcFactory OpcFactory;
#endif /* defined __cplusplus */
#endif /* defined __OpcFactory_FWD_DEFINED__ */

/* Headers for imported files */

#include <unknwn.h>
#include <ocidl.h>
#include <unknwn.h>
#include <ocidl.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef enum __WIDL_msopc_generated_name_0000001E {
    OPC_STREAM_IO_READ = 1,
    OPC_STREAM_IO_WRITE = 2
} OPC_STREAM_IO_MODE;
typedef enum __WIDL_msopc_generated_name_0000001F {
    OPC_COMPRESSION_NONE = -1,
    OPC_COMPRESSION_NORMAL = 0,
    OPC_COMPRESSION_MAXIMUM = 1,
    OPC_COMPRESSION_FAST = 2,
    OPC_COMPRESSION_SUPERFAST = 3
} OPC_COMPRESSION_OPTIONS;
typedef enum __WIDL_msopc_generated_name_00000020 {
    OPC_URI_TARGET_MODE_INTERNAL = 0,
    OPC_URI_TARGET_MODE_EXTERNAL = 1
} OPC_URI_TARGET_MODE;
#define OPC_E_NONCONFORMING_URI MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x1)
#define OPC_E_RELATIONSHIP_URI_REQUIRED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x3)
#define OPC_E_DUPLICATE_PART MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0xb)
#define OPC_E_INVALID_RELATIONSHIP_TARGET MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x12)
#define OPC_E_DUPLICATE_RELATIONSHIP MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x13)
#define OPC_E_NO_SUCH_PART MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x18)
#define OPC_E_NO_SUCH_RELATIONSHIP MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x48)
#define OPC_E_ENUM_COLLECTION_CHANGED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x50)
#define OPC_E_ENUM_CANNOT_MOVE_NEXT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x51)
#define OPC_E_ENUM_CANNOT_MOVE_PREVIOUS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x52)
#define OPC_E_ENUM_INVALID_POSITION MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x53)
#define OPC_E_ZIP_COMPRESSION_FAILED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x1003)
#ifndef __IOpcPartUri_FWD_DEFINED__
#define __IOpcPartUri_FWD_DEFINED__
typedef interface IOpcPartUri IOpcPartUri;
#ifdef __cplusplus
interface IOpcPartUri;
#endif /* __cplusplus */
#endif

#ifndef __IOpcUri_FWD_DEFINED__
#define __IOpcUri_FWD_DEFINED__
typedef interface IOpcUri IOpcUri;
#ifdef __cplusplus
interface IOpcUri;
#endif /* __cplusplus */
#endif

#ifndef __IOpcRelationship_FWD_DEFINED__
#define __IOpcRelationship_FWD_DEFINED__
typedef interface IOpcRelationship IOpcRelationship;
#ifdef __cplusplus
interface IOpcRelationship;
#endif /* __cplusplus */
#endif

#ifndef __IOpcRelationshipSet_FWD_DEFINED__
#define __IOpcRelationshipSet_FWD_DEFINED__
typedef interface IOpcRelationshipSet IOpcRelationshipSet;
#ifdef __cplusplus
interface IOpcRelationshipSet;
#endif /* __cplusplus */
#endif

typedef enum __WIDL_msopc_generated_name_00000021 {
    OPC_READ_DEFAULT = 0,
    OPC_VALIDATE_ON_LOAD = 1,
    OPC_CACHE_ON_ACCESS = 2
} OPC_READ_FLAGS;
typedef enum __WIDL_msopc_generated_name_00000022 {
    OPC_WRITE_DEFAULT = 0,
    OPC_WRITE_FORCE_ZIP32 = 1
} OPC_WRITE_FLAGS;
/*****************************************************************************
 * IOpcPart interface
 */
#ifndef __IOpcPart_INTERFACE_DEFINED__
#define __IOpcPart_INTERFACE_DEFINED__

DEFINE_GUID(IID_IOpcPart, 0x42195949, 0x3b79, 0x4fc8, 0x89,0xc6, 0xfc,0x7f,0xb9,0x79,0xee,0x71);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("42195949-3b79-4fc8-89c6-fc7fb979ee71")
IOpcPart : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetRelationshipSet(
        IOpcRelationshipSet **relationship_set) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetContentStream(
        IStream **stream) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetName(
        IOpcPartUri **name) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetContentType(
        LPWSTR *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCompressionOptions(
        OPC_COMPRESSION_OPTIONS *options) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IOpcPart, 0x42195949, 0x3b79, 0x4fc8, 0x89,0xc6, 0xfc,0x7f,0xb9,0x79,0xee,0x71)
#endif
#else
typedef struct IOpcPartVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IOpcPart *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IOpcPart *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IOpcPart *This);

    /*** IOpcPart methods ***/
    HRESULT (STDMETHODCALLTYPE *GetRelationshipSet)(
        IOpcPart *This,
        IOpcRelationshipSet **relationship_set);

    HRESULT (STDMETHODCALLTYPE *GetContentStream)(
        IOpcPart *This,
        IStream **stream);

    HRESULT (STDMETHODCALLTYPE *GetName)(
        IOpcPart *This,
        IOpcPartUri **name);

    HRESULT (STDMETHODCALLTYPE *GetContentType)(
        IOpcPart *This,
        LPWSTR *type);

    HRESULT (STDMETHODCALLTYPE *GetCompressionOptions)(
        IOpcPart *This,
        OPC_COMPRESSION_OPTIONS *options);

    END_INTERFACE
} IOpcPartVtbl;

interface IOpcPart {
    CONST_VTBL IOpcPartVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IOpcPart_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IOpcPart_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IOpcPart_Release(This) (This)->lpVtbl->Release(This)
/*** IOpcPart methods ***/
#define IOpcPart_GetRelationshipSet(This,relationship_set) (This)->lpVtbl->GetRelationshipSet(This,relationship_set)
#define IOpcPart_GetContentStream(This,stream) (This)->lpVtbl->GetContentStream(This,stream)
#define IOpcPart_GetName(This,name) (This)->lpVtbl->GetName(This,name)
#define IOpcPart_GetContentType(This,type) (This)->lpVtbl->GetContentType(This,type)
#define IOpcPart_GetCompressionOptions(This,options) (This)->lpVtbl->GetCompressionOptions(This,options)
#else
/*** IUnknown methods ***/
static inline HRESULT IOpcPart_QueryInterface(IOpcPart* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IOpcPart_AddRef(IOpcPart* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IOpcPart_Release(IOpcPart* This) {
    return This->lpVtbl->Release(This);
}
/*** IOpcPart methods ***/
static inline HRESULT IOpcPart_GetRelationshipSet(IOpcPart* This,IOpcRelationshipSet **relationship_set) {
    return This->lpVtbl->GetRelationshipSet(This,relationship_set);
}
static inline HRESULT IOpcPart_GetContentStream(IOpcPart* This,IStream **stream) {
    return This->lpVtbl->GetContentStream(This,stream);
}
static inline HRESULT IOpcPart_GetName(IOpcPart* This,IOpcPartUri **name) {
    return This->lpVtbl->GetName(This,name);
}
static inline HRESULT IOpcPart_GetContentType(IOpcPart* This,LPWSTR *type) {
    return This->lpVtbl->GetContentType(This,type);
}
static inline HRESULT IOpcPart_GetCompressionOptions(IOpcPart* This,OPC_COMPRESSION_OPTIONS *options) {
    return This->lpVtbl->GetCompressionOptions(This,options);
}
#endif
#endif

#endif


#endif  /* __IOpcPart_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IOpcPartEnumerator interface
 */
#ifndef __IOpcPartEnumerator_INTERFACE_DEFINED__
#define __IOpcPartEnumerator_INTERFACE_DEFINED__

DEFINE_GUID(IID_IOpcPartEnumerator, 0x42195949, 0x3b79, 0x4fc8, 0x89,0xc6, 0xfc,0x7f,0xb9,0x79,0xee,0x75);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("42195949-3b79-4fc8-89c6-fc7fb979ee75")
IOpcPartEnumerator : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE MoveNext(
        BOOL *has_next) = 0;

    virtual HRESULT STDMETHODCALLTYPE MovePrevious(
        BOOL *has_previous) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrent(
        IOpcPart **part) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IOpcPartEnumerator **enumerator) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IOpcPartEnumerator, 0x42195949, 0x3b79, 0x4fc8, 0x89,0xc6, 0xfc,0x7f,0xb9,0x79,0xee,0x75)
#endif
#else
typedef struct IOpcPartEnumeratorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IOpcPartEnumerator *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IOpcPartEnumerator *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IOpcPartEnumerator *This);

    /*** IOpcPartEnumerator methods ***/
    HRESULT (STDMETHODCALLTYPE *MoveNext)(
        IOpcPartEnumerator *This,
        BOOL *has_next);

    HRESULT (STDMETHODCALLTYPE *MovePrevious)(
        IOpcPartEnumerator *This,
        BOOL *has_previous);

    HRESULT (STDMETHODCALLTYPE *GetCurrent)(
        IOpcPartEnumerator *This,
        IOpcPart **part);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IOpcPartEnumerator *This,
        IOpcPartEnumerator **enumerator);

    END_INTERFACE
} IOpcPartEnumeratorVtbl;

interface IOpcPartEnumerator {
    CONST_VTBL IOpcPartEnumeratorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IOpcPartEnumerator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IOpcPartEnumerator_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IOpcPartEnumerator_Release(This) (This)->lpVtbl->Release(This)
/*** IOpcPartEnumerator methods ***/
#define IOpcPartEnumerator_MoveNext(This,has_next) (This)->lpVtbl->MoveNext(This,has_next)
#define IOpcPartEnumerator_MovePrevious(This,has_previous) (This)->lpVtbl->MovePrevious(This,has_previous)
#define IOpcPartEnumerator_GetCurrent(This,part) (This)->lpVtbl->GetCurrent(This,part)
#define IOpcPartEnumerator_Clone(This,enumerator) (This)->lpVtbl->Clone(This,enumerator)
#else
/*** IUnknown methods ***/
static inline HRESULT IOpcPartEnumerator_QueryInterface(IOpcPartEnumerator* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IOpcPartEnumerator_AddRef(IOpcPartEnumerator* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IOpcPartEnumerator_Release(IOpcPartEnumerator* This) {
    return This->lpVtbl->Release(This);
}
/*** IOpcPartEnumerator methods ***/
static inline HRESULT IOpcPartEnumerator_MoveNext(IOpcPartEnumerator* This,BOOL *has_next) {
    return This->lpVtbl->MoveNext(This,has_next);
}
static inline HRESULT IOpcPartEnumerator_MovePrevious(IOpcPartEnumerator* This,BOOL *has_previous) {
    return This->lpVtbl->MovePrevious(This,has_previous);
}
static inline HRESULT IOpcPartEnumerator_GetCurrent(IOpcPartEnumerator* This,IOpcPart **part) {
    return This->lpVtbl->GetCurrent(This,part);
}
static inline HRESULT IOpcPartEnumerator_Clone(IOpcPartEnumerator* This,IOpcPartEnumerator **enumerator) {
    return This->lpVtbl->Clone(This,enumerator);
}
#endif
#endif

#endif


#endif  /* __IOpcPartEnumerator_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IOpcRelationshipEnumerator interface
 */
#ifndef __IOpcRelationshipEnumerator_INTERFACE_DEFINED__
#define __IOpcRelationshipEnumerator_INTERFACE_DEFINED__

DEFINE_GUID(IID_IOpcRelationshipEnumerator, 0x42195949, 0x3b79, 0x4fc8, 0x89,0xc6, 0xfc,0x7f,0xb9,0x79,0xee,0x76);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("42195949-3b79-4fc8-89c6-fc7fb979ee76")
IOpcRelationshipEnumerator : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE MoveNext(
        BOOL *has_next) = 0;

    virtual HRESULT STDMETHODCALLTYPE MovePrevious(
        BOOL *has_previous) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrent(
        IOpcRelationship **relationship) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IOpcRelationshipEnumerator **enumerator) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IOpcRelationshipEnumerator, 0x42195949, 0x3b79, 0x4fc8, 0x89,0xc6, 0xfc,0x7f,0xb9,0x79,0xee,0x76)
#endif
#else
typedef struct IOpcRelationshipEnumeratorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IOpcRelationshipEnumerator *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IOpcRelationshipEnumerator *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IOpcRelationshipEnumerator *This);

    /*** IOpcRelationshipEnumerator methods ***/
    HRESULT (STDMETHODCALLTYPE *MoveNext)(
        IOpcRelationshipEnumerator *This,
        BOOL *has_next);

    HRESULT (STDMETHODCALLTYPE *MovePrevious)(
        IOpcRelationshipEnumerator *This,
        BOOL *has_previous);

    HRESULT (STDMETHODCALLTYPE *GetCurrent)(
        IOpcRelationshipEnumerator *This,
        IOpcRelationship **relationship);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IOpcRelationshipEnumerator *This,
        IOpcRelationshipEnumerator **enumerator);

    END_INTERFACE
} IOpcRelationshipEnumeratorVtbl;

interface IOpcRelationshipEnumerator {
    CONST_VTBL IOpcRelationshipEnumeratorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IOpcRelationshipEnumerator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IOpcRelationshipEnumerator_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IOpcRelationshipEnumerator_Release(This) (This)->lpVtbl->Release(This)
/*** IOpcRelationshipEnumerator methods ***/
#define IOpcRelationshipEnumerator_MoveNext(This,has_next) (This)->lpVtbl->MoveNext(This,has_next)
#define IOpcRelationshipEnumerator_MovePrevious(This,has_previous) (This)->lpVtbl->MovePrevious(This,has_previous)
#define IOpcRelationshipEnumerator_GetCurrent(This,relationship) (This)->lpVtbl->GetCurrent(This,relationship)
#define IOpcRelationshipEnumerator_Clone(This,enumerator) (This)->lpVtbl->Clone(This,enumerator)
#else
/*** IUnknown methods ***/
static inline HRESULT IOpcRelationshipEnumerator_QueryInterface(IOpcRelationshipEnumerator* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IOpcRelationshipEnumerator_AddRef(IOpcRelationshipEnumerator* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IOpcRelationshipEnumerator_Release(IOpcRelationshipEnumerator* This) {
    return This->lpVtbl->Release(This);
}
/*** IOpcRelationshipEnumerator methods ***/
static inline HRESULT IOpcRelationshipEnumerator_MoveNext(IOpcRelationshipEnumerator* This,BOOL *has_next) {
    return This->lpVtbl->MoveNext(This,has_next);
}
static inline HRESULT IOpcRelationshipEnumerator_MovePrevious(IOpcRelationshipEnumerator* This,BOOL *has_previous) {
    return This->lpVtbl->MovePrevious(This,has_previous);
}
static inline HRESULT IOpcRelationshipEnumerator_GetCurrent(IOpcRelationshipEnumerator* This,IOpcRelationship **relationship) {
    return This->lpVtbl->GetCurrent(This,relationship);
}
static inline HRESULT IOpcRelationshipEnumerator_Clone(IOpcRelationshipEnumerator* This,IOpcRelationshipEnumerator **enumerator) {
    return This->lpVtbl->Clone(This,enumerator);
}
#endif
#endif

#endif


#endif  /* __IOpcRelationshipEnumerator_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IOpcPartSet interface
 */
#ifndef __IOpcPartSet_INTERFACE_DEFINED__
#define __IOpcPartSet_INTERFACE_DEFINED__

DEFINE_GUID(IID_IOpcPartSet, 0x42195949, 0x3b79, 0x4fc8, 0x89,0xc6, 0xfc,0x7f,0xb9,0x79,0xee,0x73);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("42195949-3b79-4fc8-89c6-fc7fb979ee73")
IOpcPartSet : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetPart(
        IOpcPartUri *name,
        IOpcPart **part) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreatePart(
        IOpcPartUri *name,
        LPCWSTR content_type,
        OPC_COMPRESSION_OPTIONS compression_options,
        IOpcPart **part) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeletePart(
        IOpcPartUri *name) = 0;

    virtual HRESULT STDMETHODCALLTYPE PartExists(
        IOpcPartUri *name,
        BOOL *exists) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetEnumerator(
        IOpcPartEnumerator **enumerator) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IOpcPartSet, 0x42195949, 0x3b79, 0x4fc8, 0x89,0xc6, 0xfc,0x7f,0xb9,0x79,0xee,0x73)
#endif
#else
typedef struct IOpcPartSetVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IOpcPartSet *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IOpcPartSet *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IOpcPartSet *This);

    /*** IOpcPartSet methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPart)(
        IOpcPartSet *This,
        IOpcPartUri *name,
        IOpcPart **part);

    HRESULT (STDMETHODCALLTYPE *CreatePart)(
        IOpcPartSet *This,
        IOpcPartUri *name,
        LPCWSTR content_type,
        OPC_COMPRESSION_OPTIONS compression_options,
        IOpcPart **part);

    HRESULT (STDMETHODCALLTYPE *DeletePart)(
        IOpcPartSet *This,
        IOpcPartUri *name);

    HRESULT (STDMETHODCALLTYPE *PartExists)(
        IOpcPartSet *This,
        IOpcPartUri *name,
        BOOL *exists);

    HRESULT (STDMETHODCALLTYPE *GetEnumerator)(
        IOpcPartSet *This,
        IOpcPartEnumerator **enumerator);

    END_INTERFACE
} IOpcPartSetVtbl;

interface IOpcPartSet {
    CONST_VTBL IOpcPartSetVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IOpcPartSet_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IOpcPartSet_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IOpcPartSet_Release(This) (This)->lpVtbl->Release(This)
/*** IOpcPartSet methods ***/
#define IOpcPartSet_GetPart(This,name,part) (This)->lpVtbl->GetPart(This,name,part)
#define IOpcPartSet_CreatePart(This,name,content_type,compression_options,part) (This)->lpVtbl->CreatePart(This,name,content_type,compression_options,part)
#define IOpcPartSet_DeletePart(This,name) (This)->lpVtbl->DeletePart(This,name)
#define IOpcPartSet_PartExists(This,name,exists) (This)->lpVtbl->PartExists(This,name,exists)
#define IOpcPartSet_GetEnumerator(This,enumerator) (This)->lpVtbl->GetEnumerator(This,enumerator)
#else
/*** IUnknown methods ***/
static inline HRESULT IOpcPartSet_QueryInterface(IOpcPartSet* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IOpcPartSet_AddRef(IOpcPartSet* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IOpcPartSet_Release(IOpcPartSet* This) {
    return This->lpVtbl->Release(This);
}
/*** IOpcPartSet methods ***/
static inline HRESULT IOpcPartSet_GetPart(IOpcPartSet* This,IOpcPartUri *name,IOpcPart **part) {
    return This->lpVtbl->GetPart(This,name,part);
}
static inline HRESULT IOpcPartSet_CreatePart(IOpcPartSet* This,IOpcPartUri *name,LPCWSTR content_type,OPC_COMPRESSION_OPTIONS compression_options,IOpcPart **part) {
    return This->lpVtbl->CreatePart(This,name,content_type,compression_options,part);
}
static inline HRESULT IOpcPartSet_DeletePart(IOpcPartSet* This,IOpcPartUri *name) {
    return This->lpVtbl->DeletePart(This,name);
}
static inline HRESULT IOpcPartSet_PartExists(IOpcPartSet* This,IOpcPartUri *name,BOOL *exists) {
    return This->lpVtbl->PartExists(This,name,exists);
}
static inline HRESULT IOpcPartSet_GetEnumerator(IOpcPartSet* This,IOpcPartEnumerator **enumerator) {
    return This->lpVtbl->GetEnumerator(This,enumerator);
}
#endif
#endif

#endif


#endif  /* __IOpcPartSet_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IOpcRelationship interface
 */
#ifndef __IOpcRelationship_INTERFACE_DEFINED__
#define __IOpcRelationship_INTERFACE_DEFINED__

DEFINE_GUID(IID_IOpcRelationship, 0x42195949, 0x3b79, 0x4fc8, 0x89,0xc6, 0xfc,0x7f,0xb9,0x79,0xee,0x72);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("42195949-3b79-4fc8-89c6-fc7fb979ee72")
IOpcRelationship : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetId(
        LPWSTR *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRelationshipType(
        LPWSTR *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSourceUri(
        IOpcUri **uri) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTargetUri(
        IUri **target) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTargetMode(
        OPC_URI_TARGET_MODE *target_mode) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IOpcRelationship, 0x42195949, 0x3b79, 0x4fc8, 0x89,0xc6, 0xfc,0x7f,0xb9,0x79,0xee,0x72)
#endif
#else
typedef struct IOpcRelationshipVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IOpcRelationship *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IOpcRelationship *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IOpcRelationship *This);

    /*** IOpcRelationship methods ***/
    HRESULT (STDMETHODCALLTYPE *GetId)(
        IOpcRelationship *This,
        LPWSTR *id);

    HRESULT (STDMETHODCALLTYPE *GetRelationshipType)(
        IOpcRelationship *This,
        LPWSTR *type);

    HRESULT (STDMETHODCALLTYPE *GetSourceUri)(
        IOpcRelationship *This,
        IOpcUri **uri);

    HRESULT (STDMETHODCALLTYPE *GetTargetUri)(
        IOpcRelationship *This,
        IUri **target);

    HRESULT (STDMETHODCALLTYPE *GetTargetMode)(
        IOpcRelationship *This,
        OPC_URI_TARGET_MODE *target_mode);

    END_INTERFACE
} IOpcRelationshipVtbl;

interface IOpcRelationship {
    CONST_VTBL IOpcRelationshipVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IOpcRelationship_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IOpcRelationship_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IOpcRelationship_Release(This) (This)->lpVtbl->Release(This)
/*** IOpcRelationship methods ***/
#define IOpcRelationship_GetId(This,id) (This)->lpVtbl->GetId(This,id)
#define IOpcRelationship_GetRelationshipType(This,type) (This)->lpVtbl->GetRelationshipType(This,type)
#define IOpcRelationship_GetSourceUri(This,uri) (This)->lpVtbl->GetSourceUri(This,uri)
#define IOpcRelationship_GetTargetUri(This,target) (This)->lpVtbl->GetTargetUri(This,target)
#define IOpcRelationship_GetTargetMode(This,target_mode) (This)->lpVtbl->GetTargetMode(This,target_mode)
#else
/*** IUnknown methods ***/
static inline HRESULT IOpcRelationship_QueryInterface(IOpcRelationship* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IOpcRelationship_AddRef(IOpcRelationship* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IOpcRelationship_Release(IOpcRelationship* This) {
    return This->lpVtbl->Release(This);
}
/*** IOpcRelationship methods ***/
static inline HRESULT IOpcRelationship_GetId(IOpcRelationship* This,LPWSTR *id) {
    return This->lpVtbl->GetId(This,id);
}
static inline HRESULT IOpcRelationship_GetRelationshipType(IOpcRelationship* This,LPWSTR *type) {
    return This->lpVtbl->GetRelationshipType(This,type);
}
static inline HRESULT IOpcRelationship_GetSourceUri(IOpcRelationship* This,IOpcUri **uri) {
    return This->lpVtbl->GetSourceUri(This,uri);
}
static inline HRESULT IOpcRelationship_GetTargetUri(IOpcRelationship* This,IUri **target) {
    return This->lpVtbl->GetTargetUri(This,target);
}
static inline HRESULT IOpcRelationship_GetTargetMode(IOpcRelationship* This,OPC_URI_TARGET_MODE *target_mode) {
    return This->lpVtbl->GetTargetMode(This,target_mode);
}
#endif
#endif

#endif


#endif  /* __IOpcRelationship_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IOpcRelationshipSet interface
 */
#ifndef __IOpcRelationshipSet_INTERFACE_DEFINED__
#define __IOpcRelationshipSet_INTERFACE_DEFINED__

DEFINE_GUID(IID_IOpcRelationshipSet, 0x42195949, 0x3b79, 0x4fc8, 0x89,0xc6, 0xfc,0x7f,0xb9,0x79,0xee,0x74);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("42195949-3b79-4fc8-89c6-fc7fb979ee74")
IOpcRelationshipSet : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetRelationship(
        LPCWSTR id,
        IOpcRelationship **relationship) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateRelationship(
        LPCWSTR id,
        LPCWSTR type,
        IUri *target_uri,
        OPC_URI_TARGET_MODE target_mode,
        IOpcRelationship **relationship) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteRelationship(
        LPCWSTR id) = 0;

    virtual HRESULT STDMETHODCALLTYPE RelationshipExists(
        LPCWSTR id,
        BOOL *exists) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetEnumerator(
        IOpcRelationshipEnumerator **enumerator) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetEnumeratorForType(
        LPCWSTR type,
        IOpcRelationshipEnumerator **enumerator) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRelationshipsContentStream(
        IStream **stream) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IOpcRelationshipSet, 0x42195949, 0x3b79, 0x4fc8, 0x89,0xc6, 0xfc,0x7f,0xb9,0x79,0xee,0x74)
#endif
#else
typedef struct IOpcRelationshipSetVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IOpcRelationshipSet *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IOpcRelationshipSet *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IOpcRelationshipSet *This);

    /*** IOpcRelationshipSet methods ***/
    HRESULT (STDMETHODCALLTYPE *GetRelationship)(
        IOpcRelationshipSet *This,
        LPCWSTR id,
        IOpcRelationship **relationship);

    HRESULT (STDMETHODCALLTYPE *CreateRelationship)(
        IOpcRelationshipSet *This,
        LPCWSTR id,
        LPCWSTR type,
        IUri *target_uri,
        OPC_URI_TARGET_MODE target_mode,
        IOpcRelationship **relationship);

    HRESULT (STDMETHODCALLTYPE *DeleteRelationship)(
        IOpcRelationshipSet *This,
        LPCWSTR id);

    HRESULT (STDMETHODCALLTYPE *RelationshipExists)(
        IOpcRelationshipSet *This,
        LPCWSTR id,
        BOOL *exists);

    HRESULT (STDMETHODCALLTYPE *GetEnumerator)(
        IOpcRelationshipSet *This,
        IOpcRelationshipEnumerator **enumerator);

    HRESULT (STDMETHODCALLTYPE *GetEnumeratorForType)(
        IOpcRelationshipSet *This,
        LPCWSTR type,
        IOpcRelationshipEnumerator **enumerator);

    HRESULT (STDMETHODCALLTYPE *GetRelationshipsContentStream)(
        IOpcRelationshipSet *This,
        IStream **stream);

    END_INTERFACE
} IOpcRelationshipSetVtbl;

interface IOpcRelationshipSet {
    CONST_VTBL IOpcRelationshipSetVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IOpcRelationshipSet_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IOpcRelationshipSet_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IOpcRelationshipSet_Release(This) (This)->lpVtbl->Release(This)
/*** IOpcRelationshipSet methods ***/
#define IOpcRelationshipSet_GetRelationship(This,id,relationship) (This)->lpVtbl->GetRelationship(This,id,relationship)
#define IOpcRelationshipSet_CreateRelationship(This,id,type,target_uri,target_mode,relationship) (This)->lpVtbl->CreateRelationship(This,id,type,target_uri,target_mode,relationship)
#define IOpcRelationshipSet_DeleteRelationship(This,id) (This)->lpVtbl->DeleteRelationship(This,id)
#define IOpcRelationshipSet_RelationshipExists(This,id,exists) (This)->lpVtbl->RelationshipExists(This,id,exists)
#define IOpcRelationshipSet_GetEnumerator(This,enumerator) (This)->lpVtbl->GetEnumerator(This,enumerator)
#define IOpcRelationshipSet_GetEnumeratorForType(This,type,enumerator) (This)->lpVtbl->GetEnumeratorForType(This,type,enumerator)
#define IOpcRelationshipSet_GetRelationshipsContentStream(This,stream) (This)->lpVtbl->GetRelationshipsContentStream(This,stream)
#else
/*** IUnknown methods ***/
static inline HRESULT IOpcRelationshipSet_QueryInterface(IOpcRelationshipSet* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IOpcRelationshipSet_AddRef(IOpcRelationshipSet* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IOpcRelationshipSet_Release(IOpcRelationshipSet* This) {
    return This->lpVtbl->Release(This);
}
/*** IOpcRelationshipSet methods ***/
static inline HRESULT IOpcRelationshipSet_GetRelationship(IOpcRelationshipSet* This,LPCWSTR id,IOpcRelationship **relationship) {
    return This->lpVtbl->GetRelationship(This,id,relationship);
}
static inline HRESULT IOpcRelationshipSet_CreateRelationship(IOpcRelationshipSet* This,LPCWSTR id,LPCWSTR type,IUri *target_uri,OPC_URI_TARGET_MODE target_mode,IOpcRelationship **relationship) {
    return This->lpVtbl->CreateRelationship(This,id,type,target_uri,target_mode,relationship);
}
static inline HRESULT IOpcRelationshipSet_DeleteRelationship(IOpcRelationshipSet* This,LPCWSTR id) {
    return This->lpVtbl->DeleteRelationship(This,id);
}
static inline HRESULT IOpcRelationshipSet_RelationshipExists(IOpcRelationshipSet* This,LPCWSTR id,BOOL *exists) {
    return This->lpVtbl->RelationshipExists(This,id,exists);
}
static inline HRESULT IOpcRelationshipSet_GetEnumerator(IOpcRelationshipSet* This,IOpcRelationshipEnumerator **enumerator) {
    return This->lpVtbl->GetEnumerator(This,enumerator);
}
static inline HRESULT IOpcRelationshipSet_GetEnumeratorForType(IOpcRelationshipSet* This,LPCWSTR type,IOpcRelationshipEnumerator **enumerator) {
    return This->lpVtbl->GetEnumeratorForType(This,type,enumerator);
}
static inline HRESULT IOpcRelationshipSet_GetRelationshipsContentStream(IOpcRelationshipSet* This,IStream **stream) {
    return This->lpVtbl->GetRelationshipsContentStream(This,stream);
}
#endif
#endif

#endif


#endif  /* __IOpcRelationshipSet_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IOpcPackage interface
 */
#ifndef __IOpcPackage_INTERFACE_DEFINED__
#define __IOpcPackage_INTERFACE_DEFINED__

DEFINE_GUID(IID_IOpcPackage, 0x42195949, 0x3b79, 0x4fc8, 0x89,0xc6, 0xfc,0x7f,0xb9,0x79,0xee,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("42195949-3b79-4fc8-89c6-fc7fb979ee70")
IOpcPackage : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetPartSet(
        IOpcPartSet **part_set) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRelationshipSet(
        IOpcRelationshipSet **relationship_set) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IOpcPackage, 0x42195949, 0x3b79, 0x4fc8, 0x89,0xc6, 0xfc,0x7f,0xb9,0x79,0xee,0x70)
#endif
#else
typedef struct IOpcPackageVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IOpcPackage *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IOpcPackage *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IOpcPackage *This);

    /*** IOpcPackage methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPartSet)(
        IOpcPackage *This,
        IOpcPartSet **part_set);

    HRESULT (STDMETHODCALLTYPE *GetRelationshipSet)(
        IOpcPackage *This,
        IOpcRelationshipSet **relationship_set);

    END_INTERFACE
} IOpcPackageVtbl;

interface IOpcPackage {
    CONST_VTBL IOpcPackageVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IOpcPackage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IOpcPackage_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IOpcPackage_Release(This) (This)->lpVtbl->Release(This)
/*** IOpcPackage methods ***/
#define IOpcPackage_GetPartSet(This,part_set) (This)->lpVtbl->GetPartSet(This,part_set)
#define IOpcPackage_GetRelationshipSet(This,relationship_set) (This)->lpVtbl->GetRelationshipSet(This,relationship_set)
#else
/*** IUnknown methods ***/
static inline HRESULT IOpcPackage_QueryInterface(IOpcPackage* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IOpcPackage_AddRef(IOpcPackage* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IOpcPackage_Release(IOpcPackage* This) {
    return This->lpVtbl->Release(This);
}
/*** IOpcPackage methods ***/
static inline HRESULT IOpcPackage_GetPartSet(IOpcPackage* This,IOpcPartSet **part_set) {
    return This->lpVtbl->GetPartSet(This,part_set);
}
static inline HRESULT IOpcPackage_GetRelationshipSet(IOpcPackage* This,IOpcRelationshipSet **relationship_set) {
    return This->lpVtbl->GetRelationshipSet(This,relationship_set);
}
#endif
#endif

#endif


#endif  /* __IOpcPackage_INTERFACE_DEFINED__ */

#ifndef __IOpcPartUri_FWD_DEFINED__
#define __IOpcPartUri_FWD_DEFINED__
typedef interface IOpcPartUri IOpcPartUri;
#ifdef __cplusplus
interface IOpcPartUri;
#endif /* __cplusplus */
#endif

/*****************************************************************************
 * IOpcUri interface
 */
#ifndef __IOpcUri_INTERFACE_DEFINED__
#define __IOpcUri_INTERFACE_DEFINED__

DEFINE_GUID(IID_IOpcUri, 0xbc9c1b9b, 0xd62c, 0x49eb, 0xae,0xf0, 0x3b,0x4e,0x0b,0x28,0xeb,0xed);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bc9c1b9b-d62c-49eb-aef0-3b4e0b28ebed")
IOpcUri : public IUri
{
    virtual HRESULT STDMETHODCALLTYPE GetRelationshipsPartUri(
        IOpcPartUri **part_uri) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRelativeUri(
        IOpcPartUri *part_uri,
        IUri **relative_uri) = 0;

    virtual HRESULT STDMETHODCALLTYPE CombinePartUri(
        IUri *relative_uri,
        IOpcPartUri **combined) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IOpcUri, 0xbc9c1b9b, 0xd62c, 0x49eb, 0xae,0xf0, 0x3b,0x4e,0x0b,0x28,0xeb,0xed)
#endif
#else
typedef struct IOpcUriVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IOpcUri *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IOpcUri *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IOpcUri *This);

    /*** IUri methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPropertyBSTR)(
        IOpcUri *This,
        Uri_PROPERTY uriProp,
        BSTR *pbstrProperty,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetPropertyLength)(
        IOpcUri *This,
        Uri_PROPERTY uriProp,
        DWORD *pcchProperty,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetPropertyDWORD)(
        IOpcUri *This,
        Uri_PROPERTY uriProp,
        DWORD *pdwProperty,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *HasProperty)(
        IOpcUri *This,
        Uri_PROPERTY uriProp,
        BOOL *pfHasProperty);

    HRESULT (STDMETHODCALLTYPE *GetAbsoluteUri)(
        IOpcUri *This,
        BSTR *pbstrAbsoluteUri);

    HRESULT (STDMETHODCALLTYPE *GetAuthority)(
        IOpcUri *This,
        BSTR *pbstrAuthority);

    HRESULT (STDMETHODCALLTYPE *GetDisplayUri)(
        IOpcUri *This,
        BSTR *pbstrDisplayString);

    HRESULT (STDMETHODCALLTYPE *GetDomain)(
        IOpcUri *This,
        BSTR *pbstrDomain);

    HRESULT (STDMETHODCALLTYPE *GetExtension)(
        IOpcUri *This,
        BSTR *pbstrExtension);

    HRESULT (STDMETHODCALLTYPE *GetFragment)(
        IOpcUri *This,
        BSTR *pbstrFragment);

    HRESULT (STDMETHODCALLTYPE *GetHost)(
        IOpcUri *This,
        BSTR *pbstrHost);

    HRESULT (STDMETHODCALLTYPE *GetPassword)(
        IOpcUri *This,
        BSTR *pbstrPassword);

    HRESULT (STDMETHODCALLTYPE *GetPath)(
        IOpcUri *This,
        BSTR *pbstrPath);

    HRESULT (STDMETHODCALLTYPE *GetPathAndQuery)(
        IOpcUri *This,
        BSTR *pbstrPathAndQuery);

    HRESULT (STDMETHODCALLTYPE *GetQuery)(
        IOpcUri *This,
        BSTR *pbstrQuery);

    HRESULT (STDMETHODCALLTYPE *GetRawUri)(
        IOpcUri *This,
        BSTR *pbstrRawUri);

    HRESULT (STDMETHODCALLTYPE *GetSchemeName)(
        IOpcUri *This,
        BSTR *pbstrSchemeName);

    HRESULT (STDMETHODCALLTYPE *GetUserInfo)(
        IOpcUri *This,
        BSTR *pbstrUserInfo);

    HRESULT (STDMETHODCALLTYPE *GetUserName)(
        IOpcUri *This,
        BSTR *pbstrUserName);

    HRESULT (STDMETHODCALLTYPE *GetHostType)(
        IOpcUri *This,
        DWORD *pdwHostType);

    HRESULT (STDMETHODCALLTYPE *GetPort)(
        IOpcUri *This,
        DWORD *pdwPort);

    HRESULT (STDMETHODCALLTYPE *GetScheme)(
        IOpcUri *This,
        DWORD *pdwScheme);

    HRESULT (STDMETHODCALLTYPE *GetZone)(
        IOpcUri *This,
        DWORD *pdwZone);

    HRESULT (STDMETHODCALLTYPE *GetProperties)(
        IOpcUri *This,
        LPDWORD pdwFlags);

    HRESULT (STDMETHODCALLTYPE *IsEqual)(
        IOpcUri *This,
        IUri *pUri,
        BOOL *pfEqual);

    /*** IOpcUri methods ***/
    HRESULT (STDMETHODCALLTYPE *GetRelationshipsPartUri)(
        IOpcUri *This,
        IOpcPartUri **part_uri);

    HRESULT (STDMETHODCALLTYPE *GetRelativeUri)(
        IOpcUri *This,
        IOpcPartUri *part_uri,
        IUri **relative_uri);

    HRESULT (STDMETHODCALLTYPE *CombinePartUri)(
        IOpcUri *This,
        IUri *relative_uri,
        IOpcPartUri **combined);

    END_INTERFACE
} IOpcUriVtbl;

interface IOpcUri {
    CONST_VTBL IOpcUriVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IOpcUri_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IOpcUri_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IOpcUri_Release(This) (This)->lpVtbl->Release(This)
/*** IUri methods ***/
#define IOpcUri_GetPropertyBSTR(This,uriProp,pbstrProperty,dwFlags) (This)->lpVtbl->GetPropertyBSTR(This,uriProp,pbstrProperty,dwFlags)
#define IOpcUri_GetPropertyLength(This,uriProp,pcchProperty,dwFlags) (This)->lpVtbl->GetPropertyLength(This,uriProp,pcchProperty,dwFlags)
#define IOpcUri_GetPropertyDWORD(This,uriProp,pdwProperty,dwFlags) (This)->lpVtbl->GetPropertyDWORD(This,uriProp,pdwProperty,dwFlags)
#define IOpcUri_HasProperty(This,uriProp,pfHasProperty) (This)->lpVtbl->HasProperty(This,uriProp,pfHasProperty)
#define IOpcUri_GetAbsoluteUri(This,pbstrAbsoluteUri) (This)->lpVtbl->GetAbsoluteUri(This,pbstrAbsoluteUri)
#define IOpcUri_GetAuthority(This,pbstrAuthority) (This)->lpVtbl->GetAuthority(This,pbstrAuthority)
#define IOpcUri_GetDisplayUri(This,pbstrDisplayString) (This)->lpVtbl->GetDisplayUri(This,pbstrDisplayString)
#define IOpcUri_GetDomain(This,pbstrDomain) (This)->lpVtbl->GetDomain(This,pbstrDomain)
#define IOpcUri_GetExtension(This,pbstrExtension) (This)->lpVtbl->GetExtension(This,pbstrExtension)
#define IOpcUri_GetFragment(This,pbstrFragment) (This)->lpVtbl->GetFragment(This,pbstrFragment)
#define IOpcUri_GetHost(This,pbstrHost) (This)->lpVtbl->GetHost(This,pbstrHost)
#define IOpcUri_GetPassword(This,pbstrPassword) (This)->lpVtbl->GetPassword(This,pbstrPassword)
#define IOpcUri_GetPath(This,pbstrPath) (This)->lpVtbl->GetPath(This,pbstrPath)
#define IOpcUri_GetPathAndQuery(This,pbstrPathAndQuery) (This)->lpVtbl->GetPathAndQuery(This,pbstrPathAndQuery)
#define IOpcUri_GetQuery(This,pbstrQuery) (This)->lpVtbl->GetQuery(This,pbstrQuery)
#define IOpcUri_GetRawUri(This,pbstrRawUri) (This)->lpVtbl->GetRawUri(This,pbstrRawUri)
#define IOpcUri_GetSchemeName(This,pbstrSchemeName) (This)->lpVtbl->GetSchemeName(This,pbstrSchemeName)
#define IOpcUri_GetUserInfo(This,pbstrUserInfo) (This)->lpVtbl->GetUserInfo(This,pbstrUserInfo)
#define IOpcUri_GetUserName(This,pbstrUserName) (This)->lpVtbl->GetUserName(This,pbstrUserName)
#define IOpcUri_GetHostType(This,pdwHostType) (This)->lpVtbl->GetHostType(This,pdwHostType)
#define IOpcUri_GetPort(This,pdwPort) (This)->lpVtbl->GetPort(This,pdwPort)
#define IOpcUri_GetScheme(This,pdwScheme) (This)->lpVtbl->GetScheme(This,pdwScheme)
#define IOpcUri_GetZone(This,pdwZone) (This)->lpVtbl->GetZone(This,pdwZone)
#define IOpcUri_GetProperties(This,pdwFlags) (This)->lpVtbl->GetProperties(This,pdwFlags)
#define IOpcUri_IsEqual(This,pUri,pfEqual) (This)->lpVtbl->IsEqual(This,pUri,pfEqual)
/*** IOpcUri methods ***/
#define IOpcUri_GetRelationshipsPartUri(This,part_uri) (This)->lpVtbl->GetRelationshipsPartUri(This,part_uri)
#define IOpcUri_GetRelativeUri(This,part_uri,relative_uri) (This)->lpVtbl->GetRelativeUri(This,part_uri,relative_uri)
#define IOpcUri_CombinePartUri(This,relative_uri,combined) (This)->lpVtbl->CombinePartUri(This,relative_uri,combined)
#else
/*** IUnknown methods ***/
static inline HRESULT IOpcUri_QueryInterface(IOpcUri* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IOpcUri_AddRef(IOpcUri* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IOpcUri_Release(IOpcUri* This) {
    return This->lpVtbl->Release(This);
}
/*** IUri methods ***/
static inline HRESULT IOpcUri_GetPropertyBSTR(IOpcUri* This,Uri_PROPERTY uriProp,BSTR *pbstrProperty,DWORD dwFlags) {
    return This->lpVtbl->GetPropertyBSTR(This,uriProp,pbstrProperty,dwFlags);
}
static inline HRESULT IOpcUri_GetPropertyLength(IOpcUri* This,Uri_PROPERTY uriProp,DWORD *pcchProperty,DWORD dwFlags) {
    return This->lpVtbl->GetPropertyLength(This,uriProp,pcchProperty,dwFlags);
}
static inline HRESULT IOpcUri_GetPropertyDWORD(IOpcUri* This,Uri_PROPERTY uriProp,DWORD *pdwProperty,DWORD dwFlags) {
    return This->lpVtbl->GetPropertyDWORD(This,uriProp,pdwProperty,dwFlags);
}
static inline HRESULT IOpcUri_HasProperty(IOpcUri* This,Uri_PROPERTY uriProp,BOOL *pfHasProperty) {
    return This->lpVtbl->HasProperty(This,uriProp,pfHasProperty);
}
static inline HRESULT IOpcUri_GetAbsoluteUri(IOpcUri* This,BSTR *pbstrAbsoluteUri) {
    return This->lpVtbl->GetAbsoluteUri(This,pbstrAbsoluteUri);
}
static inline HRESULT IOpcUri_GetAuthority(IOpcUri* This,BSTR *pbstrAuthority) {
    return This->lpVtbl->GetAuthority(This,pbstrAuthority);
}
static inline HRESULT IOpcUri_GetDisplayUri(IOpcUri* This,BSTR *pbstrDisplayString) {
    return This->lpVtbl->GetDisplayUri(This,pbstrDisplayString);
}
static inline HRESULT IOpcUri_GetDomain(IOpcUri* This,BSTR *pbstrDomain) {
    return This->lpVtbl->GetDomain(This,pbstrDomain);
}
static inline HRESULT IOpcUri_GetExtension(IOpcUri* This,BSTR *pbstrExtension) {
    return This->lpVtbl->GetExtension(This,pbstrExtension);
}
static inline HRESULT IOpcUri_GetFragment(IOpcUri* This,BSTR *pbstrFragment) {
    return This->lpVtbl->GetFragment(This,pbstrFragment);
}
static inline HRESULT IOpcUri_GetHost(IOpcUri* This,BSTR *pbstrHost) {
    return This->lpVtbl->GetHost(This,pbstrHost);
}
static inline HRESULT IOpcUri_GetPassword(IOpcUri* This,BSTR *pbstrPassword) {
    return This->lpVtbl->GetPassword(This,pbstrPassword);
}
static inline HRESULT IOpcUri_GetPath(IOpcUri* This,BSTR *pbstrPath) {
    return This->lpVtbl->GetPath(This,pbstrPath);
}
static inline HRESULT IOpcUri_GetPathAndQuery(IOpcUri* This,BSTR *pbstrPathAndQuery) {
    return This->lpVtbl->GetPathAndQuery(This,pbstrPathAndQuery);
}
static inline HRESULT IOpcUri_GetQuery(IOpcUri* This,BSTR *pbstrQuery) {
    return This->lpVtbl->GetQuery(This,pbstrQuery);
}
static inline HRESULT IOpcUri_GetRawUri(IOpcUri* This,BSTR *pbstrRawUri) {
    return This->lpVtbl->GetRawUri(This,pbstrRawUri);
}
static inline HRESULT IOpcUri_GetSchemeName(IOpcUri* This,BSTR *pbstrSchemeName) {
    return This->lpVtbl->GetSchemeName(This,pbstrSchemeName);
}
static inline HRESULT IOpcUri_GetUserInfo(IOpcUri* This,BSTR *pbstrUserInfo) {
    return This->lpVtbl->GetUserInfo(This,pbstrUserInfo);
}
static inline HRESULT IOpcUri_GetUserName(IOpcUri* This,BSTR *pbstrUserName) {
    return This->lpVtbl->GetUserName(This,pbstrUserName);
}
static inline HRESULT IOpcUri_GetHostType(IOpcUri* This,DWORD *pdwHostType) {
    return This->lpVtbl->GetHostType(This,pdwHostType);
}
static inline HRESULT IOpcUri_GetPort(IOpcUri* This,DWORD *pdwPort) {
    return This->lpVtbl->GetPort(This,pdwPort);
}
static inline HRESULT IOpcUri_GetScheme(IOpcUri* This,DWORD *pdwScheme) {
    return This->lpVtbl->GetScheme(This,pdwScheme);
}
static inline HRESULT IOpcUri_GetZone(IOpcUri* This,DWORD *pdwZone) {
    return This->lpVtbl->GetZone(This,pdwZone);
}
static inline HRESULT IOpcUri_GetProperties(IOpcUri* This,LPDWORD pdwFlags) {
    return This->lpVtbl->GetProperties(This,pdwFlags);
}
static inline HRESULT IOpcUri_IsEqual(IOpcUri* This,IUri *pUri,BOOL *pfEqual) {
    return This->lpVtbl->IsEqual(This,pUri,pfEqual);
}
/*** IOpcUri methods ***/
static inline HRESULT IOpcUri_GetRelationshipsPartUri(IOpcUri* This,IOpcPartUri **part_uri) {
    return This->lpVtbl->GetRelationshipsPartUri(This,part_uri);
}
static inline HRESULT IOpcUri_GetRelativeUri(IOpcUri* This,IOpcPartUri *part_uri,IUri **relative_uri) {
    return This->lpVtbl->GetRelativeUri(This,part_uri,relative_uri);
}
static inline HRESULT IOpcUri_CombinePartUri(IOpcUri* This,IUri *relative_uri,IOpcPartUri **combined) {
    return This->lpVtbl->CombinePartUri(This,relative_uri,combined);
}
#endif
#endif

#endif


#endif  /* __IOpcUri_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IOpcPartUri interface
 */
#ifndef __IOpcPartUri_INTERFACE_DEFINED__
#define __IOpcPartUri_INTERFACE_DEFINED__

DEFINE_GUID(IID_IOpcPartUri, 0x7d3babe7, 0x88b2, 0x46ba, 0x85,0xcb, 0x42,0x03,0xcb,0x01,0x6c,0x87);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7d3babe7-88b2-46ba-85cb-4203cb016c87")
IOpcPartUri : public IOpcUri
{
    virtual HRESULT STDMETHODCALLTYPE ComparePartUri(
        IOpcPartUri *part_uri,
        INT32 *result) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSourceUri(
        IOpcUri **source_uri) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsRelationshipsPartUri(
        BOOL *result) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IOpcPartUri, 0x7d3babe7, 0x88b2, 0x46ba, 0x85,0xcb, 0x42,0x03,0xcb,0x01,0x6c,0x87)
#endif
#else
typedef struct IOpcPartUriVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IOpcPartUri *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IOpcPartUri *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IOpcPartUri *This);

    /*** IUri methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPropertyBSTR)(
        IOpcPartUri *This,
        Uri_PROPERTY uriProp,
        BSTR *pbstrProperty,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetPropertyLength)(
        IOpcPartUri *This,
        Uri_PROPERTY uriProp,
        DWORD *pcchProperty,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetPropertyDWORD)(
        IOpcPartUri *This,
        Uri_PROPERTY uriProp,
        DWORD *pdwProperty,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *HasProperty)(
        IOpcPartUri *This,
        Uri_PROPERTY uriProp,
        BOOL *pfHasProperty);

    HRESULT (STDMETHODCALLTYPE *GetAbsoluteUri)(
        IOpcPartUri *This,
        BSTR *pbstrAbsoluteUri);

    HRESULT (STDMETHODCALLTYPE *GetAuthority)(
        IOpcPartUri *This,
        BSTR *pbstrAuthority);

    HRESULT (STDMETHODCALLTYPE *GetDisplayUri)(
        IOpcPartUri *This,
        BSTR *pbstrDisplayString);

    HRESULT (STDMETHODCALLTYPE *GetDomain)(
        IOpcPartUri *This,
        BSTR *pbstrDomain);

    HRESULT (STDMETHODCALLTYPE *GetExtension)(
        IOpcPartUri *This,
        BSTR *pbstrExtension);

    HRESULT (STDMETHODCALLTYPE *GetFragment)(
        IOpcPartUri *This,
        BSTR *pbstrFragment);

    HRESULT (STDMETHODCALLTYPE *GetHost)(
        IOpcPartUri *This,
        BSTR *pbstrHost);

    HRESULT (STDMETHODCALLTYPE *GetPassword)(
        IOpcPartUri *This,
        BSTR *pbstrPassword);

    HRESULT (STDMETHODCALLTYPE *GetPath)(
        IOpcPartUri *This,
        BSTR *pbstrPath);

    HRESULT (STDMETHODCALLTYPE *GetPathAndQuery)(
        IOpcPartUri *This,
        BSTR *pbstrPathAndQuery);

    HRESULT (STDMETHODCALLTYPE *GetQuery)(
        IOpcPartUri *This,
        BSTR *pbstrQuery);

    HRESULT (STDMETHODCALLTYPE *GetRawUri)(
        IOpcPartUri *This,
        BSTR *pbstrRawUri);

    HRESULT (STDMETHODCALLTYPE *GetSchemeName)(
        IOpcPartUri *This,
        BSTR *pbstrSchemeName);

    HRESULT (STDMETHODCALLTYPE *GetUserInfo)(
        IOpcPartUri *This,
        BSTR *pbstrUserInfo);

    HRESULT (STDMETHODCALLTYPE *GetUserName)(
        IOpcPartUri *This,
        BSTR *pbstrUserName);

    HRESULT (STDMETHODCALLTYPE *GetHostType)(
        IOpcPartUri *This,
        DWORD *pdwHostType);

    HRESULT (STDMETHODCALLTYPE *GetPort)(
        IOpcPartUri *This,
        DWORD *pdwPort);

    HRESULT (STDMETHODCALLTYPE *GetScheme)(
        IOpcPartUri *This,
        DWORD *pdwScheme);

    HRESULT (STDMETHODCALLTYPE *GetZone)(
        IOpcPartUri *This,
        DWORD *pdwZone);

    HRESULT (STDMETHODCALLTYPE *GetProperties)(
        IOpcPartUri *This,
        LPDWORD pdwFlags);

    HRESULT (STDMETHODCALLTYPE *IsEqual)(
        IOpcPartUri *This,
        IUri *pUri,
        BOOL *pfEqual);

    /*** IOpcUri methods ***/
    HRESULT (STDMETHODCALLTYPE *GetRelationshipsPartUri)(
        IOpcPartUri *This,
        IOpcPartUri **part_uri);

    HRESULT (STDMETHODCALLTYPE *GetRelativeUri)(
        IOpcPartUri *This,
        IOpcPartUri *part_uri,
        IUri **relative_uri);

    HRESULT (STDMETHODCALLTYPE *CombinePartUri)(
        IOpcPartUri *This,
        IUri *relative_uri,
        IOpcPartUri **combined);

    /*** IOpcPartUri methods ***/
    HRESULT (STDMETHODCALLTYPE *ComparePartUri)(
        IOpcPartUri *This,
        IOpcPartUri *part_uri,
        INT32 *result);

    HRESULT (STDMETHODCALLTYPE *GetSourceUri)(
        IOpcPartUri *This,
        IOpcUri **source_uri);

    HRESULT (STDMETHODCALLTYPE *IsRelationshipsPartUri)(
        IOpcPartUri *This,
        BOOL *result);

    END_INTERFACE
} IOpcPartUriVtbl;

interface IOpcPartUri {
    CONST_VTBL IOpcPartUriVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IOpcPartUri_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IOpcPartUri_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IOpcPartUri_Release(This) (This)->lpVtbl->Release(This)
/*** IUri methods ***/
#define IOpcPartUri_GetPropertyBSTR(This,uriProp,pbstrProperty,dwFlags) (This)->lpVtbl->GetPropertyBSTR(This,uriProp,pbstrProperty,dwFlags)
#define IOpcPartUri_GetPropertyLength(This,uriProp,pcchProperty,dwFlags) (This)->lpVtbl->GetPropertyLength(This,uriProp,pcchProperty,dwFlags)
#define IOpcPartUri_GetPropertyDWORD(This,uriProp,pdwProperty,dwFlags) (This)->lpVtbl->GetPropertyDWORD(This,uriProp,pdwProperty,dwFlags)
#define IOpcPartUri_HasProperty(This,uriProp,pfHasProperty) (This)->lpVtbl->HasProperty(This,uriProp,pfHasProperty)
#define IOpcPartUri_GetAbsoluteUri(This,pbstrAbsoluteUri) (This)->lpVtbl->GetAbsoluteUri(This,pbstrAbsoluteUri)
#define IOpcPartUri_GetAuthority(This,pbstrAuthority) (This)->lpVtbl->GetAuthority(This,pbstrAuthority)
#define IOpcPartUri_GetDisplayUri(This,pbstrDisplayString) (This)->lpVtbl->GetDisplayUri(This,pbstrDisplayString)
#define IOpcPartUri_GetDomain(This,pbstrDomain) (This)->lpVtbl->GetDomain(This,pbstrDomain)
#define IOpcPartUri_GetExtension(This,pbstrExtension) (This)->lpVtbl->GetExtension(This,pbstrExtension)
#define IOpcPartUri_GetFragment(This,pbstrFragment) (This)->lpVtbl->GetFragment(This,pbstrFragment)
#define IOpcPartUri_GetHost(This,pbstrHost) (This)->lpVtbl->GetHost(This,pbstrHost)
#define IOpcPartUri_GetPassword(This,pbstrPassword) (This)->lpVtbl->GetPassword(This,pbstrPassword)
#define IOpcPartUri_GetPath(This,pbstrPath) (This)->lpVtbl->GetPath(This,pbstrPath)
#define IOpcPartUri_GetPathAndQuery(This,pbstrPathAndQuery) (This)->lpVtbl->GetPathAndQuery(This,pbstrPathAndQuery)
#define IOpcPartUri_GetQuery(This,pbstrQuery) (This)->lpVtbl->GetQuery(This,pbstrQuery)
#define IOpcPartUri_GetRawUri(This,pbstrRawUri) (This)->lpVtbl->GetRawUri(This,pbstrRawUri)
#define IOpcPartUri_GetSchemeName(This,pbstrSchemeName) (This)->lpVtbl->GetSchemeName(This,pbstrSchemeName)
#define IOpcPartUri_GetUserInfo(This,pbstrUserInfo) (This)->lpVtbl->GetUserInfo(This,pbstrUserInfo)
#define IOpcPartUri_GetUserName(This,pbstrUserName) (This)->lpVtbl->GetUserName(This,pbstrUserName)
#define IOpcPartUri_GetHostType(This,pdwHostType) (This)->lpVtbl->GetHostType(This,pdwHostType)
#define IOpcPartUri_GetPort(This,pdwPort) (This)->lpVtbl->GetPort(This,pdwPort)
#define IOpcPartUri_GetScheme(This,pdwScheme) (This)->lpVtbl->GetScheme(This,pdwScheme)
#define IOpcPartUri_GetZone(This,pdwZone) (This)->lpVtbl->GetZone(This,pdwZone)
#define IOpcPartUri_GetProperties(This,pdwFlags) (This)->lpVtbl->GetProperties(This,pdwFlags)
#define IOpcPartUri_IsEqual(This,pUri,pfEqual) (This)->lpVtbl->IsEqual(This,pUri,pfEqual)
/*** IOpcUri methods ***/
#define IOpcPartUri_GetRelationshipsPartUri(This,part_uri) (This)->lpVtbl->GetRelationshipsPartUri(This,part_uri)
#define IOpcPartUri_GetRelativeUri(This,part_uri,relative_uri) (This)->lpVtbl->GetRelativeUri(This,part_uri,relative_uri)
#define IOpcPartUri_CombinePartUri(This,relative_uri,combined) (This)->lpVtbl->CombinePartUri(This,relative_uri,combined)
/*** IOpcPartUri methods ***/
#define IOpcPartUri_ComparePartUri(This,part_uri,result) (This)->lpVtbl->ComparePartUri(This,part_uri,result)
#define IOpcPartUri_GetSourceUri(This,source_uri) (This)->lpVtbl->GetSourceUri(This,source_uri)
#define IOpcPartUri_IsRelationshipsPartUri(This,result) (This)->lpVtbl->IsRelationshipsPartUri(This,result)
#else
/*** IUnknown methods ***/
static inline HRESULT IOpcPartUri_QueryInterface(IOpcPartUri* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IOpcPartUri_AddRef(IOpcPartUri* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IOpcPartUri_Release(IOpcPartUri* This) {
    return This->lpVtbl->Release(This);
}
/*** IUri methods ***/
static inline HRESULT IOpcPartUri_GetPropertyBSTR(IOpcPartUri* This,Uri_PROPERTY uriProp,BSTR *pbstrProperty,DWORD dwFlags) {
    return This->lpVtbl->GetPropertyBSTR(This,uriProp,pbstrProperty,dwFlags);
}
static inline HRESULT IOpcPartUri_GetPropertyLength(IOpcPartUri* This,Uri_PROPERTY uriProp,DWORD *pcchProperty,DWORD dwFlags) {
    return This->lpVtbl->GetPropertyLength(This,uriProp,pcchProperty,dwFlags);
}
static inline HRESULT IOpcPartUri_GetPropertyDWORD(IOpcPartUri* This,Uri_PROPERTY uriProp,DWORD *pdwProperty,DWORD dwFlags) {
    return This->lpVtbl->GetPropertyDWORD(This,uriProp,pdwProperty,dwFlags);
}
static inline HRESULT IOpcPartUri_HasProperty(IOpcPartUri* This,Uri_PROPERTY uriProp,BOOL *pfHasProperty) {
    return This->lpVtbl->HasProperty(This,uriProp,pfHasProperty);
}
static inline HRESULT IOpcPartUri_GetAbsoluteUri(IOpcPartUri* This,BSTR *pbstrAbsoluteUri) {
    return This->lpVtbl->GetAbsoluteUri(This,pbstrAbsoluteUri);
}
static inline HRESULT IOpcPartUri_GetAuthority(IOpcPartUri* This,BSTR *pbstrAuthority) {
    return This->lpVtbl->GetAuthority(This,pbstrAuthority);
}
static inline HRESULT IOpcPartUri_GetDisplayUri(IOpcPartUri* This,BSTR *pbstrDisplayString) {
    return This->lpVtbl->GetDisplayUri(This,pbstrDisplayString);
}
static inline HRESULT IOpcPartUri_GetDomain(IOpcPartUri* This,BSTR *pbstrDomain) {
    return This->lpVtbl->GetDomain(This,pbstrDomain);
}
static inline HRESULT IOpcPartUri_GetExtension(IOpcPartUri* This,BSTR *pbstrExtension) {
    return This->lpVtbl->GetExtension(This,pbstrExtension);
}
static inline HRESULT IOpcPartUri_GetFragment(IOpcPartUri* This,BSTR *pbstrFragment) {
    return This->lpVtbl->GetFragment(This,pbstrFragment);
}
static inline HRESULT IOpcPartUri_GetHost(IOpcPartUri* This,BSTR *pbstrHost) {
    return This->lpVtbl->GetHost(This,pbstrHost);
}
static inline HRESULT IOpcPartUri_GetPassword(IOpcPartUri* This,BSTR *pbstrPassword) {
    return This->lpVtbl->GetPassword(This,pbstrPassword);
}
static inline HRESULT IOpcPartUri_GetPath(IOpcPartUri* This,BSTR *pbstrPath) {
    return This->lpVtbl->GetPath(This,pbstrPath);
}
static inline HRESULT IOpcPartUri_GetPathAndQuery(IOpcPartUri* This,BSTR *pbstrPathAndQuery) {
    return This->lpVtbl->GetPathAndQuery(This,pbstrPathAndQuery);
}
static inline HRESULT IOpcPartUri_GetQuery(IOpcPartUri* This,BSTR *pbstrQuery) {
    return This->lpVtbl->GetQuery(This,pbstrQuery);
}
static inline HRESULT IOpcPartUri_GetRawUri(IOpcPartUri* This,BSTR *pbstrRawUri) {
    return This->lpVtbl->GetRawUri(This,pbstrRawUri);
}
static inline HRESULT IOpcPartUri_GetSchemeName(IOpcPartUri* This,BSTR *pbstrSchemeName) {
    return This->lpVtbl->GetSchemeName(This,pbstrSchemeName);
}
static inline HRESULT IOpcPartUri_GetUserInfo(IOpcPartUri* This,BSTR *pbstrUserInfo) {
    return This->lpVtbl->GetUserInfo(This,pbstrUserInfo);
}
static inline HRESULT IOpcPartUri_GetUserName(IOpcPartUri* This,BSTR *pbstrUserName) {
    return This->lpVtbl->GetUserName(This,pbstrUserName);
}
static inline HRESULT IOpcPartUri_GetHostType(IOpcPartUri* This,DWORD *pdwHostType) {
    return This->lpVtbl->GetHostType(This,pdwHostType);
}
static inline HRESULT IOpcPartUri_GetPort(IOpcPartUri* This,DWORD *pdwPort) {
    return This->lpVtbl->GetPort(This,pdwPort);
}
static inline HRESULT IOpcPartUri_GetScheme(IOpcPartUri* This,DWORD *pdwScheme) {
    return This->lpVtbl->GetScheme(This,pdwScheme);
}
static inline HRESULT IOpcPartUri_GetZone(IOpcPartUri* This,DWORD *pdwZone) {
    return This->lpVtbl->GetZone(This,pdwZone);
}
static inline HRESULT IOpcPartUri_GetProperties(IOpcPartUri* This,LPDWORD pdwFlags) {
    return This->lpVtbl->GetProperties(This,pdwFlags);
}
static inline HRESULT IOpcPartUri_IsEqual(IOpcPartUri* This,IUri *pUri,BOOL *pfEqual) {
    return This->lpVtbl->IsEqual(This,pUri,pfEqual);
}
/*** IOpcUri methods ***/
static inline HRESULT IOpcPartUri_GetRelationshipsPartUri(IOpcPartUri* This,IOpcPartUri **part_uri) {
    return This->lpVtbl->GetRelationshipsPartUri(This,part_uri);
}
static inline HRESULT IOpcPartUri_GetRelativeUri(IOpcPartUri* This,IOpcPartUri *part_uri,IUri **relative_uri) {
    return This->lpVtbl->GetRelativeUri(This,part_uri,relative_uri);
}
static inline HRESULT IOpcPartUri_CombinePartUri(IOpcPartUri* This,IUri *relative_uri,IOpcPartUri **combined) {
    return This->lpVtbl->CombinePartUri(This,relative_uri,combined);
}
/*** IOpcPartUri methods ***/
static inline HRESULT IOpcPartUri_ComparePartUri(IOpcPartUri* This,IOpcPartUri *part_uri,INT32 *result) {
    return This->lpVtbl->ComparePartUri(This,part_uri,result);
}
static inline HRESULT IOpcPartUri_GetSourceUri(IOpcPartUri* This,IOpcUri **source_uri) {
    return This->lpVtbl->GetSourceUri(This,source_uri);
}
static inline HRESULT IOpcPartUri_IsRelationshipsPartUri(IOpcPartUri* This,BOOL *result) {
    return This->lpVtbl->IsRelationshipsPartUri(This,result);
}
#endif
#endif

#endif


#endif  /* __IOpcPartUri_INTERFACE_DEFINED__ */

#ifndef __IOpcUri_FWD_DEFINED__
#define __IOpcUri_FWD_DEFINED__
typedef interface IOpcUri IOpcUri;
#ifdef __cplusplus
interface IOpcUri;
#endif /* __cplusplus */
#endif

#ifndef __IOpcPartUri_FWD_DEFINED__
#define __IOpcPartUri_FWD_DEFINED__
typedef interface IOpcPartUri IOpcPartUri;
#ifdef __cplusplus
interface IOpcPartUri;
#endif /* __cplusplus */
#endif

#ifndef __IOpcPackage_FWD_DEFINED__
#define __IOpcPackage_FWD_DEFINED__
typedef interface IOpcPackage IOpcPackage;
#ifdef __cplusplus
interface IOpcPackage;
#endif /* __cplusplus */
#endif

#ifndef __IOpcDigitalSignatureManager_FWD_DEFINED__
#define __IOpcDigitalSignatureManager_FWD_DEFINED__
typedef interface IOpcDigitalSignatureManager IOpcDigitalSignatureManager;
#ifdef __cplusplus
interface IOpcDigitalSignatureManager;
#endif /* __cplusplus */
#endif

/*****************************************************************************
 * IOpcFactory interface
 */
#ifndef __IOpcFactory_INTERFACE_DEFINED__
#define __IOpcFactory_INTERFACE_DEFINED__

DEFINE_GUID(IID_IOpcFactory, 0x6d0b4446, 0xcd73, 0x4ab3, 0x94,0xf4, 0x8c,0xcd,0xf6,0x11,0x61,0x54);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6d0b4446-cd73-4ab3-94f4-8ccdf6116154")
IOpcFactory : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE CreatePackageRootUri(
        IOpcUri **uri) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreatePartUri(
        LPCWSTR uri,
        IOpcPartUri **part_uri) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateStreamOnFile(
        LPCWSTR filename,
        OPC_STREAM_IO_MODE io_mode,
        SECURITY_ATTRIBUTES *sa,
        DWORD flags,
        IStream **stream) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreatePackage(
        IOpcPackage **package) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReadPackageFromStream(
        IStream *stream,
        OPC_READ_FLAGS flags,
        IOpcPackage **package) = 0;

    virtual HRESULT STDMETHODCALLTYPE WritePackageToStream(
        IOpcPackage *package,
        OPC_WRITE_FLAGS flags,
        IStream *stream) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateDigitalSignatureManager(
        IOpcPackage *package,
        IOpcDigitalSignatureManager **signature_manager) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IOpcFactory, 0x6d0b4446, 0xcd73, 0x4ab3, 0x94,0xf4, 0x8c,0xcd,0xf6,0x11,0x61,0x54)
#endif
#else
typedef struct IOpcFactoryVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IOpcFactory *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IOpcFactory *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IOpcFactory *This);

    /*** IOpcFactory methods ***/
    HRESULT (STDMETHODCALLTYPE *CreatePackageRootUri)(
        IOpcFactory *This,
        IOpcUri **uri);

    HRESULT (STDMETHODCALLTYPE *CreatePartUri)(
        IOpcFactory *This,
        LPCWSTR uri,
        IOpcPartUri **part_uri);

    HRESULT (STDMETHODCALLTYPE *CreateStreamOnFile)(
        IOpcFactory *This,
        LPCWSTR filename,
        OPC_STREAM_IO_MODE io_mode,
        SECURITY_ATTRIBUTES *sa,
        DWORD flags,
        IStream **stream);

    HRESULT (STDMETHODCALLTYPE *CreatePackage)(
        IOpcFactory *This,
        IOpcPackage **package);

    HRESULT (STDMETHODCALLTYPE *ReadPackageFromStream)(
        IOpcFactory *This,
        IStream *stream,
        OPC_READ_FLAGS flags,
        IOpcPackage **package);

    HRESULT (STDMETHODCALLTYPE *WritePackageToStream)(
        IOpcFactory *This,
        IOpcPackage *package,
        OPC_WRITE_FLAGS flags,
        IStream *stream);

    HRESULT (STDMETHODCALLTYPE *CreateDigitalSignatureManager)(
        IOpcFactory *This,
        IOpcPackage *package,
        IOpcDigitalSignatureManager **signature_manager);

    END_INTERFACE
} IOpcFactoryVtbl;

interface IOpcFactory {
    CONST_VTBL IOpcFactoryVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IOpcFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IOpcFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IOpcFactory_Release(This) (This)->lpVtbl->Release(This)
/*** IOpcFactory methods ***/
#define IOpcFactory_CreatePackageRootUri(This,uri) (This)->lpVtbl->CreatePackageRootUri(This,uri)
#define IOpcFactory_CreatePartUri(This,uri,part_uri) (This)->lpVtbl->CreatePartUri(This,uri,part_uri)
#define IOpcFactory_CreateStreamOnFile(This,filename,io_mode,sa,flags,stream) (This)->lpVtbl->CreateStreamOnFile(This,filename,io_mode,sa,flags,stream)
#define IOpcFactory_CreatePackage(This,package) (This)->lpVtbl->CreatePackage(This,package)
#define IOpcFactory_ReadPackageFromStream(This,stream,flags,package) (This)->lpVtbl->ReadPackageFromStream(This,stream,flags,package)
#define IOpcFactory_WritePackageToStream(This,package,flags,stream) (This)->lpVtbl->WritePackageToStream(This,package,flags,stream)
#define IOpcFactory_CreateDigitalSignatureManager(This,package,signature_manager) (This)->lpVtbl->CreateDigitalSignatureManager(This,package,signature_manager)
#else
/*** IUnknown methods ***/
static inline HRESULT IOpcFactory_QueryInterface(IOpcFactory* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IOpcFactory_AddRef(IOpcFactory* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IOpcFactory_Release(IOpcFactory* This) {
    return This->lpVtbl->Release(This);
}
/*** IOpcFactory methods ***/
static inline HRESULT IOpcFactory_CreatePackageRootUri(IOpcFactory* This,IOpcUri **uri) {
    return This->lpVtbl->CreatePackageRootUri(This,uri);
}
static inline HRESULT IOpcFactory_CreatePartUri(IOpcFactory* This,LPCWSTR uri,IOpcPartUri **part_uri) {
    return This->lpVtbl->CreatePartUri(This,uri,part_uri);
}
static inline HRESULT IOpcFactory_CreateStreamOnFile(IOpcFactory* This,LPCWSTR filename,OPC_STREAM_IO_MODE io_mode,SECURITY_ATTRIBUTES *sa,DWORD flags,IStream **stream) {
    return This->lpVtbl->CreateStreamOnFile(This,filename,io_mode,sa,flags,stream);
}
static inline HRESULT IOpcFactory_CreatePackage(IOpcFactory* This,IOpcPackage **package) {
    return This->lpVtbl->CreatePackage(This,package);
}
static inline HRESULT IOpcFactory_ReadPackageFromStream(IOpcFactory* This,IStream *stream,OPC_READ_FLAGS flags,IOpcPackage **package) {
    return This->lpVtbl->ReadPackageFromStream(This,stream,flags,package);
}
static inline HRESULT IOpcFactory_WritePackageToStream(IOpcFactory* This,IOpcPackage *package,OPC_WRITE_FLAGS flags,IStream *stream) {
    return This->lpVtbl->WritePackageToStream(This,package,flags,stream);
}
static inline HRESULT IOpcFactory_CreateDigitalSignatureManager(IOpcFactory* This,IOpcPackage *package,IOpcDigitalSignatureManager **signature_manager) {
    return This->lpVtbl->CreateDigitalSignatureManager(This,package,signature_manager);
}
#endif
#endif

#endif


#endif  /* __IOpcFactory_INTERFACE_DEFINED__ */

/*****************************************************************************
 * OpcFactory coclass
 */

DEFINE_GUID(CLSID_OpcFactory, 0x6b2d6ba0, 0x9f3e, 0x4f27, 0x92,0x0b, 0x31,0x3c,0xc4,0x26,0xa3,0x9e);

#ifdef __cplusplus
class DECLSPEC_UUID("6b2d6ba0-9f3e-4f27-920b-313cc426a39e") OpcFactory;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(OpcFactory, 0x6b2d6ba0, 0x9f3e, 0x4f27, 0x92,0x0b, 0x31,0x3c,0xc4,0x26,0xa3,0x9e)
#endif
#endif

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __msopc_h__ */
