diff fuhtark_test/include/winapi/mergemod.h @ 1500:91c8c3b7cbf0

add: futhark tests for generating vulkan api
author sam <sam@basx.dev>
date Wed, 26 Nov 2025 21:36:48 +0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fuhtark_test/include/winapi/mergemod.h	Wed Nov 26 21:36:48 2025 +0700
@@ -0,0 +1,1104 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#include "rpc.h"
+#include "rpcndr.h"
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif
+
+#ifndef __mergemod_h__
+#define __mergemod_h__
+
+#ifndef _WIN32_MSM
+#define _WIN32_MSM 100
+#endif
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+#ifndef __IEnumMsmString_FWD_DEFINED__
+#define __IEnumMsmString_FWD_DEFINED__
+  typedef struct IEnumMsmString IEnumMsmString;
+#endif
+
+#ifndef __IMsmStrings_FWD_DEFINED__
+#define __IMsmStrings_FWD_DEFINED__
+  typedef struct IMsmStrings IMsmStrings;
+#endif
+
+#ifndef __IMsmError_FWD_DEFINED__
+#define __IMsmError_FWD_DEFINED__
+  typedef struct IMsmError IMsmError;
+#endif
+
+#ifndef __IEnumMsmError_FWD_DEFINED__
+#define __IEnumMsmError_FWD_DEFINED__
+  typedef struct IEnumMsmError IEnumMsmError;
+#endif
+
+#ifndef __IMsmErrors_FWD_DEFINED__
+#define __IMsmErrors_FWD_DEFINED__
+  typedef struct IMsmErrors IMsmErrors;
+#endif
+
+#ifndef __IMsmDependency_FWD_DEFINED__
+#define __IMsmDependency_FWD_DEFINED__
+  typedef struct IMsmDependency IMsmDependency;
+#endif
+
+#ifndef __IEnumMsmDependency_FWD_DEFINED__
+#define __IEnumMsmDependency_FWD_DEFINED__
+  typedef struct IEnumMsmDependency IEnumMsmDependency;
+#endif
+
+#ifndef __IMsmDependencies_FWD_DEFINED__
+#define __IMsmDependencies_FWD_DEFINED__
+  typedef struct IMsmDependencies IMsmDependencies;
+#endif
+
+#ifndef __IMsmMerge_FWD_DEFINED__
+#define __IMsmMerge_FWD_DEFINED__
+  typedef struct IMsmMerge IMsmMerge;
+#endif
+
+#ifndef __IMsmGetFiles_FWD_DEFINED__
+#define __IMsmGetFiles_FWD_DEFINED__
+  typedef struct IMsmGetFiles IMsmGetFiles;
+#endif
+
+#ifndef __IMsmStrings_FWD_DEFINED__
+#define __IMsmStrings_FWD_DEFINED__
+  typedef struct IMsmStrings IMsmStrings;
+#endif
+
+#ifndef __IMsmError_FWD_DEFINED__
+#define __IMsmError_FWD_DEFINED__
+  typedef struct IMsmError IMsmError;
+#endif
+
+#ifndef __IMsmErrors_FWD_DEFINED__
+#define __IMsmErrors_FWD_DEFINED__
+  typedef struct IMsmErrors IMsmErrors;
+#endif
+
+#ifndef __IMsmDependency_FWD_DEFINED__
+#define __IMsmDependency_FWD_DEFINED__
+  typedef struct IMsmDependency IMsmDependency;
+#endif
+
+#ifndef __IMsmDependencies_FWD_DEFINED__
+#define __IMsmDependencies_FWD_DEFINED__
+  typedef struct IMsmDependencies IMsmDependencies;
+#endif
+
+#ifndef __IMsmGetFiles_FWD_DEFINED__
+#define __IMsmGetFiles_FWD_DEFINED__
+  typedef struct IMsmGetFiles IMsmGetFiles;
+#endif
+
+#if (_WIN32_MSM >= 150)
+
+#ifndef __IMsmConfigurableItem_FWD_DEFINED__
+#define __IMsmConfigurableItem_FWD_DEFINED__
+  typedef struct IMsmConfigurableItem IMsmConfigurableItem;
+#endif
+
+#ifndef __IEnumMsmConfigurableItem_FWD_DEFINED__
+#define __IEnumMsmConfigurableItem_FWD_DEFINED__
+  typedef struct IEnumMsmConfigurableItem IEnumMsmConfigurableItem;
+#endif
+
+#ifndef __IMsmConfigurableItems_FWD_DEFINED__
+#define __IMsmConfigurableItems_FWD_DEFINED__
+  typedef struct IMsmConfigurableItems IMsmConfigurableItems;
+#endif
+
+#ifndef __IMsmMerge2_FWD_DEFINED__
+#define __IMsmMerge2_FWD_DEFINED__
+  typedef struct IMsmMerge2 IMsmMerge2;
+#endif
+
+#ifndef __IMsmConfigureModule_FWD_DEFINED__
+#define __IMsmConfigureModule_FWD_DEFINED__
+  typedef struct IMsmConfigureModule IMsmConfigureModule;
+#endif
+
+#ifndef __MsmMerge2_FWD_DEFINED__
+#define __MsmMerge2_FWD_DEFINED__
+#ifdef __cplusplus
+  typedef class MsmMerge2 MsmMerge2;
+#else
+  typedef struct MsmMerge2 MsmMerge2;
+#endif
+#endif
+#endif
+
+#ifndef __MsmMerge_FWD_DEFINED__
+#define __MsmMerge_FWD_DEFINED__
+#ifdef __cplusplus
+  typedef class MsmMerge MsmMerge;
+#else
+  typedef struct MsmMerge MsmMerge;
+#endif
+#endif
+
+#include "oaidl.h"
+
+#ifndef __MIDL_user_allocate_free_DEFINED__
+#define __MIDL_user_allocate_free_DEFINED__
+  void *__RPC_API MIDL_user_allocate(size_t);
+  void __RPC_API MIDL_user_free(void *);
+#endif
+
+#ifndef __FORWARD_IID_IMSMMERGETYPELIB
+#define __FORWARD_IID_IMSMMERGETYPELIB
+
+  typedef enum msmErrorType {
+    msmErrorLanguageUnsupported = 1,msmErrorLanguageFailed = 2,msmErrorExclusion = 3,msmErrorTableMerge = 4,msmErrorResequenceMerge = 5,
+    msmErrorFileCreate = 6,msmErrorDirCreate = 7,msmErrorFeatureRequired = 8,
+#if (_WIN32_MSM >= 150)
+    msmErrorBadNullSubstitution = 9,msmErrorBadSubstitutionType = 10,msmErrorMissingConfigItem = 11,msmErrorBadNullResponse = 12,
+    msmErrorDataRequestFailed = 13,msmErrorPlatformMismatch = 14
+#endif
+  } msmErrorType;
+
+#if (_WIN32_MSM >= 150)
+  typedef enum msmConfigurableItemFormat {
+    msmConfigurableItemText = 0,msmConfigurableItemKey = 1,msmConfigurableItemInteger = 2,msmConfigurableItemBitfield = 3
+  } msmConfigurableItemFormat;
+
+  typedef enum msmConfigurableItemOptions {
+    msmConfigurableOptionKeyNoOrphan = 1,msmConfigurableOptionNonNullable = 2
+  } msmConfigurableItemOptions;
+#endif
+#endif
+
+  extern RPC_IF_HANDLE __MIDL_itf_mergemod_0000_v0_0_c_ifspec;
+  extern RPC_IF_HANDLE __MIDL_itf_mergemod_0000_v0_0_s_ifspec;
+
+#ifndef __IEnumMsmString_INTERFACE_DEFINED__
+#define __IEnumMsmString_INTERFACE_DEFINED__
+#if defined(__cplusplus) && !defined(CINTERFACE)
+  struct IEnumMsmString : public IUnknown {
+  public:
+    virtual HRESULT WINAPI Next(unsigned long cFetch,BSTR *rgbstrStrings,unsigned long *pcFetched) = 0;
+    virtual HRESULT WINAPI Skip(unsigned long cSkip) = 0;
+    virtual HRESULT WINAPI Reset(void) = 0;
+    virtual HRESULT WINAPI Clone(IEnumMsmString **pemsmStrings) = 0;
+  };
+#else
+  typedef struct IEnumMsmStringVtbl {
+    BEGIN_INTERFACE
+      HRESULT (WINAPI *QueryInterface)(IEnumMsmString *This,REFIID riid,void **ppvObject);
+      ULONG (WINAPI *AddRef)(IEnumMsmString *This);
+      ULONG (WINAPI *Release)(IEnumMsmString *This);
+      HRESULT (WINAPI *Next)(IEnumMsmString *This,unsigned long cFetch,BSTR *rgbstrStrings,unsigned long *pcFetched);
+      HRESULT (WINAPI *Skip)(IEnumMsmString *This,unsigned long cSkip);
+      HRESULT (WINAPI *Reset)(IEnumMsmString *This);
+      HRESULT (WINAPI *Clone)(IEnumMsmString *This,IEnumMsmString **pemsmStrings);
+    END_INTERFACE
+  } IEnumMsmStringVtbl;
+  struct IEnumMsmString {
+    CONST_VTBL struct IEnumMsmStringVtbl *lpVtbl;
+  };
+#ifdef COBJMACROS
+#define IEnumMsmString_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumMsmString_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumMsmString_Release(This) (This)->lpVtbl->Release(This)
+#define IEnumMsmString_Next(This,cFetch,rgbstrStrings,pcFetched) (This)->lpVtbl->Next(This,cFetch,rgbstrStrings,pcFetched)
+#define IEnumMsmString_Skip(This,cSkip) (This)->lpVtbl->Skip(This,cSkip)
+#define IEnumMsmString_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumMsmString_Clone(This,pemsmStrings) (This)->lpVtbl->Clone(This,pemsmStrings)
+#endif
+#endif
+  HRESULT WINAPI IEnumMsmString_Next_Proxy(IEnumMsmString *This,unsigned long cFetch,BSTR *rgbstrStrings,unsigned long *pcFetched);
+  void __RPC_STUB IEnumMsmString_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IEnumMsmString_Skip_Proxy(IEnumMsmString *This,unsigned long cSkip);
+  void __RPC_STUB IEnumMsmString_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IEnumMsmString_Reset_Proxy(IEnumMsmString *This);
+  void __RPC_STUB IEnumMsmString_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IEnumMsmString_Clone_Proxy(IEnumMsmString *This,IEnumMsmString **pemsmStrings);
+  void __RPC_STUB IEnumMsmString_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+#endif
+
+#ifndef __IMsmStrings_INTERFACE_DEFINED__
+#define __IMsmStrings_INTERFACE_DEFINED__
+#if defined(__cplusplus) && !defined(CINTERFACE)
+  struct IMsmStrings : public IDispatch {
+  public:
+    virtual HRESULT WINAPI get_Item(long Item,BSTR *Return) = 0;
+    virtual HRESULT WINAPI get_Count(long *Count) = 0;
+    virtual HRESULT WINAPI get__NewEnum(IUnknown **NewEnum) = 0;
+  };
+#else
+  typedef struct IMsmStringsVtbl {
+    BEGIN_INTERFACE
+      HRESULT (WINAPI *QueryInterface)(IMsmStrings *This,REFIID riid,void **ppvObject);
+      ULONG (WINAPI *AddRef)(IMsmStrings *This);
+      ULONG (WINAPI *Release)(IMsmStrings *This);
+      HRESULT (WINAPI *GetTypeInfoCount)(IMsmStrings *This,UINT *pctinfo);
+      HRESULT (WINAPI *GetTypeInfo)(IMsmStrings *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
+      HRESULT (WINAPI *GetIDsOfNames)(IMsmStrings *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
+      HRESULT (WINAPI *Invoke)(IMsmStrings *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+      HRESULT (WINAPI *get_Item)(IMsmStrings *This,long Item,BSTR *Return);
+      HRESULT (WINAPI *get_Count)(IMsmStrings *This,long *Count);
+      HRESULT (WINAPI *get__NewEnum)(IMsmStrings *This,IUnknown **NewEnum);
+    END_INTERFACE
+  } IMsmStringsVtbl;
+  struct IMsmStrings {
+    CONST_VTBL struct IMsmStringsVtbl *lpVtbl;
+  };
+#ifdef COBJMACROS
+#define IMsmStrings_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMsmStrings_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMsmStrings_Release(This) (This)->lpVtbl->Release(This)
+#define IMsmStrings_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IMsmStrings_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IMsmStrings_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IMsmStrings_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define IMsmStrings_get_Item(This,Item,Return) (This)->lpVtbl->get_Item(This,Item,Return)
+#define IMsmStrings_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
+#define IMsmStrings_get__NewEnum(This,NewEnum) (This)->lpVtbl->get__NewEnum(This,NewEnum)
+#endif
+#endif
+  HRESULT WINAPI IMsmStrings_get_Item_Proxy(IMsmStrings *This,long Item,BSTR *Return);
+  void __RPC_STUB IMsmStrings_get_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmStrings_get_Count_Proxy(IMsmStrings *This,long *Count);
+  void __RPC_STUB IMsmStrings_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmStrings_get__NewEnum_Proxy(IMsmStrings *This,IUnknown **NewEnum);
+  void __RPC_STUB IMsmStrings_get__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+#endif
+
+#ifndef __IMsmError_INTERFACE_DEFINED__
+#define __IMsmError_INTERFACE_DEFINED__
+#if defined(__cplusplus) && !defined(CINTERFACE)
+  struct IMsmError : public IDispatch {
+  public:
+    virtual HRESULT WINAPI get_Type(msmErrorType *ErrorType) = 0;
+    virtual HRESULT WINAPI get_Path(BSTR *ErrorPath) = 0;
+    virtual HRESULT WINAPI get_Language(short *ErrorLanguage) = 0;
+    virtual HRESULT WINAPI get_DatabaseTable(BSTR *ErrorTable) = 0;
+    virtual HRESULT WINAPI get_DatabaseKeys(IMsmStrings **ErrorKeys) = 0;
+    virtual HRESULT WINAPI get_ModuleTable(BSTR *ErrorTable) = 0;
+    virtual HRESULT WINAPI get_ModuleKeys(IMsmStrings **ErrorKeys) = 0;
+  };
+#else
+  typedef struct IMsmErrorVtbl {
+    BEGIN_INTERFACE
+      HRESULT (WINAPI *QueryInterface)(IMsmError *This,REFIID riid,void **ppvObject);
+      ULONG (WINAPI *AddRef)(IMsmError *This);
+      ULONG (WINAPI *Release)(IMsmError *This);
+      HRESULT (WINAPI *GetTypeInfoCount)(IMsmError *This,UINT *pctinfo);
+      HRESULT (WINAPI *GetTypeInfo)(IMsmError *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
+      HRESULT (WINAPI *GetIDsOfNames)(IMsmError *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
+      HRESULT (WINAPI *Invoke)(IMsmError *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+      HRESULT (WINAPI *get_Type)(IMsmError *This,msmErrorType *ErrorType);
+      HRESULT (WINAPI *get_Path)(IMsmError *This,BSTR *ErrorPath);
+      HRESULT (WINAPI *get_Language)(IMsmError *This,short *ErrorLanguage);
+      HRESULT (WINAPI *get_DatabaseTable)(IMsmError *This,BSTR *ErrorTable);
+      HRESULT (WINAPI *get_DatabaseKeys)(IMsmError *This,IMsmStrings **ErrorKeys);
+      HRESULT (WINAPI *get_ModuleTable)(IMsmError *This,BSTR *ErrorTable);
+      HRESULT (WINAPI *get_ModuleKeys)(IMsmError *This,IMsmStrings **ErrorKeys);
+    END_INTERFACE
+  } IMsmErrorVtbl;
+  struct IMsmError {
+    CONST_VTBL struct IMsmErrorVtbl *lpVtbl;
+  };
+#ifdef COBJMACROS
+#define IMsmError_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMsmError_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMsmError_Release(This) (This)->lpVtbl->Release(This)
+#define IMsmError_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IMsmError_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IMsmError_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IMsmError_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define IMsmError_get_Type(This,ErrorType) (This)->lpVtbl->get_Type(This,ErrorType)
+#define IMsmError_get_Path(This,ErrorPath) (This)->lpVtbl->get_Path(This,ErrorPath)
+#define IMsmError_get_Language(This,ErrorLanguage) (This)->lpVtbl->get_Language(This,ErrorLanguage)
+#define IMsmError_get_DatabaseTable(This,ErrorTable) (This)->lpVtbl->get_DatabaseTable(This,ErrorTable)
+#define IMsmError_get_DatabaseKeys(This,ErrorKeys) (This)->lpVtbl->get_DatabaseKeys(This,ErrorKeys)
+#define IMsmError_get_ModuleTable(This,ErrorTable) (This)->lpVtbl->get_ModuleTable(This,ErrorTable)
+#define IMsmError_get_ModuleKeys(This,ErrorKeys) (This)->lpVtbl->get_ModuleKeys(This,ErrorKeys)
+#endif
+#endif
+  HRESULT WINAPI IMsmError_get_Type_Proxy(IMsmError *This,msmErrorType *ErrorType);
+  void __RPC_STUB IMsmError_get_Type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmError_get_Path_Proxy(IMsmError *This,BSTR *ErrorPath);
+  void __RPC_STUB IMsmError_get_Path_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmError_get_Language_Proxy(IMsmError *This,short *ErrorLanguage);
+  void __RPC_STUB IMsmError_get_Language_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmError_get_DatabaseTable_Proxy(IMsmError *This,BSTR *ErrorTable);
+  void __RPC_STUB IMsmError_get_DatabaseTable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmError_get_DatabaseKeys_Proxy(IMsmError *This,IMsmStrings **ErrorKeys);
+  void __RPC_STUB IMsmError_get_DatabaseKeys_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmError_get_ModuleTable_Proxy(IMsmError *This,BSTR *ErrorTable);
+  void __RPC_STUB IMsmError_get_ModuleTable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmError_get_ModuleKeys_Proxy(IMsmError *This,IMsmStrings **ErrorKeys);
+  void __RPC_STUB IMsmError_get_ModuleKeys_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+#endif
+
+#ifndef __IEnumMsmError_INTERFACE_DEFINED__
+#define __IEnumMsmError_INTERFACE_DEFINED__
+#if defined(__cplusplus) && !defined(CINTERFACE)
+  struct IEnumMsmError : public IUnknown {
+  public:
+    virtual HRESULT WINAPI Next(unsigned long cFetch,IMsmError **rgmsmErrors,unsigned long *pcFetched) = 0;
+    virtual HRESULT WINAPI Skip(unsigned long cSkip) = 0;
+    virtual HRESULT WINAPI Reset(void) = 0;
+    virtual HRESULT WINAPI Clone(IEnumMsmError **pemsmErrors) = 0;
+  };
+#else
+  typedef struct IEnumMsmErrorVtbl {
+    BEGIN_INTERFACE
+      HRESULT (WINAPI *QueryInterface)(IEnumMsmError *This,REFIID riid,void **ppvObject);
+      ULONG (WINAPI *AddRef)(IEnumMsmError *This);
+      ULONG (WINAPI *Release)(IEnumMsmError *This);
+      HRESULT (WINAPI *Next)(IEnumMsmError *This,unsigned long cFetch,IMsmError **rgmsmErrors,unsigned long *pcFetched);
+      HRESULT (WINAPI *Skip)(IEnumMsmError *This,unsigned long cSkip);
+      HRESULT (WINAPI *Reset)(IEnumMsmError *This);
+      HRESULT (WINAPI *Clone)(IEnumMsmError *This,IEnumMsmError **pemsmErrors);
+    END_INTERFACE
+  } IEnumMsmErrorVtbl;
+  struct IEnumMsmError {
+    CONST_VTBL struct IEnumMsmErrorVtbl *lpVtbl;
+  };
+#ifdef COBJMACROS
+#define IEnumMsmError_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumMsmError_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumMsmError_Release(This) (This)->lpVtbl->Release(This)
+#define IEnumMsmError_Next(This,cFetch,rgmsmErrors,pcFetched) (This)->lpVtbl->Next(This,cFetch,rgmsmErrors,pcFetched)
+#define IEnumMsmError_Skip(This,cSkip) (This)->lpVtbl->Skip(This,cSkip)
+#define IEnumMsmError_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumMsmError_Clone(This,pemsmErrors) (This)->lpVtbl->Clone(This,pemsmErrors)
+#endif
+#endif
+  HRESULT WINAPI IEnumMsmError_Next_Proxy(IEnumMsmError *This,unsigned long cFetch,IMsmError **rgmsmErrors,unsigned long *pcFetched);
+  void __RPC_STUB IEnumMsmError_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IEnumMsmError_Skip_Proxy(IEnumMsmError *This,unsigned long cSkip);
+  void __RPC_STUB IEnumMsmError_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IEnumMsmError_Reset_Proxy(IEnumMsmError *This);
+  void __RPC_STUB IEnumMsmError_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IEnumMsmError_Clone_Proxy(IEnumMsmError *This,IEnumMsmError **pemsmErrors);
+  void __RPC_STUB IEnumMsmError_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+#endif
+
+#ifndef __IMsmErrors_INTERFACE_DEFINED__
+#define __IMsmErrors_INTERFACE_DEFINED__
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+  struct IMsmErrors : public IDispatch {
+  public:
+    virtual HRESULT WINAPI get_Item(long Item,IMsmError **Return) = 0;
+    virtual HRESULT WINAPI get_Count(long *Count) = 0;
+    virtual HRESULT WINAPI get__NewEnum(IUnknown **NewEnum) = 0;
+  };
+#else
+  typedef struct IMsmErrorsVtbl {
+    BEGIN_INTERFACE
+      HRESULT (WINAPI *QueryInterface)(IMsmErrors *This,REFIID riid,void **ppvObject);
+      ULONG (WINAPI *AddRef)(IMsmErrors *This);
+      ULONG (WINAPI *Release)(IMsmErrors *This);
+      HRESULT (WINAPI *GetTypeInfoCount)(IMsmErrors *This,UINT *pctinfo);
+      HRESULT (WINAPI *GetTypeInfo)(IMsmErrors *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
+      HRESULT (WINAPI *GetIDsOfNames)(IMsmErrors *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
+      HRESULT (WINAPI *Invoke)(IMsmErrors *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+      HRESULT (WINAPI *get_Item)(IMsmErrors *This,long Item,IMsmError **Return);
+      HRESULT (WINAPI *get_Count)(IMsmErrors *This,long *Count);
+      HRESULT (WINAPI *get__NewEnum)(IMsmErrors *This,IUnknown **NewEnum);
+    END_INTERFACE
+  } IMsmErrorsVtbl;
+  struct IMsmErrors {
+    CONST_VTBL struct IMsmErrorsVtbl *lpVtbl;
+  };
+#ifdef COBJMACROS
+#define IMsmErrors_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMsmErrors_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMsmErrors_Release(This) (This)->lpVtbl->Release(This)
+#define IMsmErrors_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IMsmErrors_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IMsmErrors_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IMsmErrors_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define IMsmErrors_get_Item(This,Item,Return) (This)->lpVtbl->get_Item(This,Item,Return)
+#define IMsmErrors_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
+#define IMsmErrors_get__NewEnum(This,NewEnum) (This)->lpVtbl->get__NewEnum(This,NewEnum)
+#endif
+#endif
+  HRESULT WINAPI IMsmErrors_get_Item_Proxy(IMsmErrors *This,long Item,IMsmError **Return);
+  void __RPC_STUB IMsmErrors_get_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmErrors_get_Count_Proxy(IMsmErrors *This,long *Count);
+  void __RPC_STUB IMsmErrors_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmErrors_get__NewEnum_Proxy(IMsmErrors *This,IUnknown **NewEnum);
+  void __RPC_STUB IMsmErrors_get__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+#endif
+
+#ifndef __IMsmDependency_INTERFACE_DEFINED__
+#define __IMsmDependency_INTERFACE_DEFINED__
+#if defined(__cplusplus) && !defined(CINTERFACE)
+  struct IMsmDependency : public IDispatch {
+  public:
+    virtual HRESULT WINAPI get_Module(BSTR *Module) = 0;
+    virtual HRESULT WINAPI get_Language(short *Language) = 0;
+    virtual HRESULT WINAPI get_Version(BSTR *Version) = 0;
+  };
+#else
+  typedef struct IMsmDependencyVtbl {
+    BEGIN_INTERFACE
+      HRESULT (WINAPI *QueryInterface)(IMsmDependency *This,REFIID riid,void **ppvObject);
+      ULONG (WINAPI *AddRef)(IMsmDependency *This);
+      ULONG (WINAPI *Release)(IMsmDependency *This);
+      HRESULT (WINAPI *GetTypeInfoCount)(IMsmDependency *This,UINT *pctinfo);
+      HRESULT (WINAPI *GetTypeInfo)(IMsmDependency *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
+      HRESULT (WINAPI *GetIDsOfNames)(IMsmDependency *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
+      HRESULT (WINAPI *Invoke)(IMsmDependency *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+      HRESULT (WINAPI *get_Module)(IMsmDependency *This,BSTR *Module);
+      HRESULT (WINAPI *get_Language)(IMsmDependency *This,short *Language);
+      HRESULT (WINAPI *get_Version)(IMsmDependency *This,BSTR *Version);
+    END_INTERFACE
+  } IMsmDependencyVtbl;
+  struct IMsmDependency {
+    CONST_VTBL struct IMsmDependencyVtbl *lpVtbl;
+  };
+#ifdef COBJMACROS
+#define IMsmDependency_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMsmDependency_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMsmDependency_Release(This) (This)->lpVtbl->Release(This)
+#define IMsmDependency_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IMsmDependency_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IMsmDependency_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IMsmDependency_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define IMsmDependency_get_Module(This,Module) (This)->lpVtbl->get_Module(This,Module)
+#define IMsmDependency_get_Language(This,Language) (This)->lpVtbl->get_Language(This,Language)
+#define IMsmDependency_get_Version(This,Version) (This)->lpVtbl->get_Version(This,Version)
+#endif
+#endif
+  HRESULT WINAPI IMsmDependency_get_Module_Proxy(IMsmDependency *This,BSTR *Module);
+  void __RPC_STUB IMsmDependency_get_Module_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmDependency_get_Language_Proxy(IMsmDependency *This,short *Language);
+  void __RPC_STUB IMsmDependency_get_Language_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmDependency_get_Version_Proxy(IMsmDependency *This,BSTR *Version);
+  void __RPC_STUB IMsmDependency_get_Version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+#endif
+
+#ifndef __IEnumMsmDependency_INTERFACE_DEFINED__
+#define __IEnumMsmDependency_INTERFACE_DEFINED__
+#if defined(__cplusplus) && !defined(CINTERFACE)
+  struct IEnumMsmDependency : public IUnknown {
+  public:
+    virtual HRESULT WINAPI Next(unsigned long cFetch,IMsmDependency **rgmsmDependencies,unsigned long *pcFetched) = 0;
+    virtual HRESULT WINAPI Skip(unsigned long cSkip) = 0;
+    virtual HRESULT WINAPI Reset(void) = 0;
+    virtual HRESULT WINAPI Clone(IEnumMsmDependency **pemsmDependencies) = 0;
+  };
+#else
+  typedef struct IEnumMsmDependencyVtbl {
+    BEGIN_INTERFACE
+      HRESULT (WINAPI *QueryInterface)(IEnumMsmDependency *This,REFIID riid,void **ppvObject);
+      ULONG (WINAPI *AddRef)(IEnumMsmDependency *This);
+      ULONG (WINAPI *Release)(IEnumMsmDependency *This);
+      HRESULT (WINAPI *Next)(IEnumMsmDependency *This,unsigned long cFetch,IMsmDependency **rgmsmDependencies,unsigned long *pcFetched);
+      HRESULT (WINAPI *Skip)(IEnumMsmDependency *This,unsigned long cSkip);
+      HRESULT (WINAPI *Reset)(IEnumMsmDependency *This);
+      HRESULT (WINAPI *Clone)(IEnumMsmDependency *This,IEnumMsmDependency **pemsmDependencies);
+    END_INTERFACE
+  } IEnumMsmDependencyVtbl;
+  struct IEnumMsmDependency {
+    CONST_VTBL struct IEnumMsmDependencyVtbl *lpVtbl;
+  };
+#ifdef COBJMACROS
+#define IEnumMsmDependency_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumMsmDependency_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumMsmDependency_Release(This) (This)->lpVtbl->Release(This)
+#define IEnumMsmDependency_Next(This,cFetch,rgmsmDependencies,pcFetched) (This)->lpVtbl->Next(This,cFetch,rgmsmDependencies,pcFetched)
+#define IEnumMsmDependency_Skip(This,cSkip) (This)->lpVtbl->Skip(This,cSkip)
+#define IEnumMsmDependency_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumMsmDependency_Clone(This,pemsmDependencies) (This)->lpVtbl->Clone(This,pemsmDependencies)
+#endif
+#endif
+  HRESULT WINAPI IEnumMsmDependency_Next_Proxy(IEnumMsmDependency *This,unsigned long cFetch,IMsmDependency **rgmsmDependencies,unsigned long *pcFetched);
+  void __RPC_STUB IEnumMsmDependency_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IEnumMsmDependency_Skip_Proxy(IEnumMsmDependency *This,unsigned long cSkip);
+  void __RPC_STUB IEnumMsmDependency_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IEnumMsmDependency_Reset_Proxy(IEnumMsmDependency *This);
+  void __RPC_STUB IEnumMsmDependency_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IEnumMsmDependency_Clone_Proxy(IEnumMsmDependency *This,IEnumMsmDependency **pemsmDependencies);
+  void __RPC_STUB IEnumMsmDependency_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+#endif
+
+#ifndef __IMsmDependencies_INTERFACE_DEFINED__
+#define __IMsmDependencies_INTERFACE_DEFINED__
+#if defined(__cplusplus) && !defined(CINTERFACE)
+  struct IMsmDependencies : public IDispatch {
+  public:
+    virtual HRESULT WINAPI get_Item(long Item,IMsmDependency **Return) = 0;
+    virtual HRESULT WINAPI get_Count(long *Count) = 0;
+    virtual HRESULT WINAPI get__NewEnum(IUnknown **NewEnum) = 0;
+  };
+#else
+  typedef struct IMsmDependenciesVtbl {
+    BEGIN_INTERFACE
+      HRESULT (WINAPI *QueryInterface)(IMsmDependencies *This,REFIID riid,void **ppvObject);
+      ULONG (WINAPI *AddRef)(IMsmDependencies *This);
+      ULONG (WINAPI *Release)(IMsmDependencies *This);
+      HRESULT (WINAPI *GetTypeInfoCount)(IMsmDependencies *This,UINT *pctinfo);
+      HRESULT (WINAPI *GetTypeInfo)(IMsmDependencies *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
+      HRESULT (WINAPI *GetIDsOfNames)(IMsmDependencies *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
+      HRESULT (WINAPI *Invoke)(IMsmDependencies *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+      HRESULT (WINAPI *get_Item)(IMsmDependencies *This,long Item,IMsmDependency **Return);
+      HRESULT (WINAPI *get_Count)(IMsmDependencies *This,long *Count);
+      HRESULT (WINAPI *get__NewEnum)(IMsmDependencies *This,IUnknown **NewEnum);
+    END_INTERFACE
+  } IMsmDependenciesVtbl;
+  struct IMsmDependencies {
+    CONST_VTBL struct IMsmDependenciesVtbl *lpVtbl;
+  };
+#ifdef COBJMACROS
+#define IMsmDependencies_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMsmDependencies_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMsmDependencies_Release(This) (This)->lpVtbl->Release(This)
+#define IMsmDependencies_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IMsmDependencies_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IMsmDependencies_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IMsmDependencies_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define IMsmDependencies_get_Item(This,Item,Return) (This)->lpVtbl->get_Item(This,Item,Return)
+#define IMsmDependencies_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
+#define IMsmDependencies_get__NewEnum(This,NewEnum) (This)->lpVtbl->get__NewEnum(This,NewEnum)
+#endif
+#endif
+  HRESULT WINAPI IMsmDependencies_get_Item_Proxy(IMsmDependencies *This,long Item,IMsmDependency **Return);
+  void __RPC_STUB IMsmDependencies_get_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmDependencies_get_Count_Proxy(IMsmDependencies *This,long *Count);
+  void __RPC_STUB IMsmDependencies_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmDependencies_get__NewEnum_Proxy(IMsmDependencies *This,IUnknown **NewEnum);
+  void __RPC_STUB IMsmDependencies_get__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+#endif
+
+#if (_WIN32_MSM >= 150)
+#ifndef __IMsmConfigurableItem_INTERFACE_DEFINED__
+#define __IMsmConfigurableItem_INTERFACE_DEFINED__
+#if defined(__cplusplus) && !defined(CINTERFACE)
+  struct IMsmConfigurableItem : public IDispatch {
+  public:
+    virtual HRESULT WINAPI get_Name(BSTR *Name) = 0;
+    virtual HRESULT WINAPI get_Format(msmConfigurableItemFormat *Format) = 0;
+    virtual HRESULT WINAPI get_Type(BSTR *Type) = 0;
+    virtual HRESULT WINAPI get_Context(BSTR *Context) = 0;
+    virtual HRESULT WINAPI get_DefaultValue(BSTR *DefaultValue) = 0;
+    virtual HRESULT WINAPI get_Attributes(long *Attributes) = 0;
+    virtual HRESULT WINAPI get_DisplayName(BSTR *DisplayName) = 0;
+    virtual HRESULT WINAPI get_Description(BSTR *Description) = 0;
+    virtual HRESULT WINAPI get_HelpLocation(BSTR *HelpLocation) = 0;
+    virtual HRESULT WINAPI get_HelpKeyword(BSTR *HelpKeyword) = 0;
+  };
+#else
+  typedef struct IMsmConfigurableItemVtbl {
+    BEGIN_INTERFACE
+      HRESULT (WINAPI *QueryInterface)(IMsmConfigurableItem *This,REFIID riid,void **ppvObject);
+      ULONG (WINAPI *AddRef)(IMsmConfigurableItem *This);
+      ULONG (WINAPI *Release)(IMsmConfigurableItem *This);
+      HRESULT (WINAPI *GetTypeInfoCount)(IMsmConfigurableItem *This,UINT *pctinfo);
+      HRESULT (WINAPI *GetTypeInfo)(IMsmConfigurableItem *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
+      HRESULT (WINAPI *GetIDsOfNames)(IMsmConfigurableItem *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
+      HRESULT (WINAPI *Invoke)(IMsmConfigurableItem *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+      HRESULT (WINAPI *get_Name)(IMsmConfigurableItem *This,BSTR *Name);
+      HRESULT (WINAPI *get_Format)(IMsmConfigurableItem *This,msmConfigurableItemFormat *Format);
+      HRESULT (WINAPI *get_Type)(IMsmConfigurableItem *This,BSTR *Type);
+      HRESULT (WINAPI *get_Context)(IMsmConfigurableItem *This,BSTR *Context);
+      HRESULT (WINAPI *get_DefaultValue)(IMsmConfigurableItem *This,BSTR *DefaultValue);
+      HRESULT (WINAPI *get_Attributes)(IMsmConfigurableItem *This,long *Attributes);
+      HRESULT (WINAPI *get_DisplayName)(IMsmConfigurableItem *This,BSTR *DisplayName);
+      HRESULT (WINAPI *get_Description)(IMsmConfigurableItem *This,BSTR *Description);
+      HRESULT (WINAPI *get_HelpLocation)(IMsmConfigurableItem *This,BSTR *HelpLocation);
+      HRESULT (WINAPI *get_HelpKeyword)(IMsmConfigurableItem *This,BSTR *HelpKeyword);
+    END_INTERFACE
+  } IMsmConfigurableItemVtbl;
+  struct IMsmConfigurableItem {
+    CONST_VTBL struct IMsmConfigurableItemVtbl *lpVtbl;
+  };
+#ifdef COBJMACROS
+#define IMsmConfigurableItem_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMsmConfigurableItem_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMsmConfigurableItem_Release(This) (This)->lpVtbl->Release(This)
+#define IMsmConfigurableItem_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IMsmConfigurableItem_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IMsmConfigurableItem_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IMsmConfigurableItem_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define IMsmConfigurableItem_get_Name(This,Name) (This)->lpVtbl->get_Name(This,Name)
+#define IMsmConfigurableItem_get_Format(This,Format) (This)->lpVtbl->get_Format(This,Format)
+#define IMsmConfigurableItem_get_Type(This,Type) (This)->lpVtbl->get_Type(This,Type)
+#define IMsmConfigurableItem_get_Context(This,Context) (This)->lpVtbl->get_Context(This,Context)
+#define IMsmConfigurableItem_get_DefaultValue(This,DefaultValue) (This)->lpVtbl->get_DefaultValue(This,DefaultValue)
+#define IMsmConfigurableItem_get_Attributes(This,Attributes) (This)->lpVtbl->get_Attributes(This,Attributes)
+#define IMsmConfigurableItem_get_DisplayName(This,DisplayName) (This)->lpVtbl->get_DisplayName(This,DisplayName)
+#define IMsmConfigurableItem_get_Description(This,Description) (This)->lpVtbl->get_Description(This,Description)
+#define IMsmConfigurableItem_get_HelpLocation(This,HelpLocation) (This)->lpVtbl->get_HelpLocation(This,HelpLocation)
+#define IMsmConfigurableItem_get_HelpKeyword(This,HelpKeyword) (This)->lpVtbl->get_HelpKeyword(This,HelpKeyword)
+#endif
+#endif
+  HRESULT WINAPI IMsmConfigurableItem_get_Name_Proxy(IMsmConfigurableItem *This,BSTR *Name);
+  void __RPC_STUB IMsmConfigurableItem_get_Name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmConfigurableItem_get_Format_Proxy(IMsmConfigurableItem *This,msmConfigurableItemFormat *Format);
+  void __RPC_STUB IMsmConfigurableItem_get_Format_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmConfigurableItem_get_Type_Proxy(IMsmConfigurableItem *This,BSTR *Type);
+  void __RPC_STUB IMsmConfigurableItem_get_Type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmConfigurableItem_get_Context_Proxy(IMsmConfigurableItem *This,BSTR *Context);
+  void __RPC_STUB IMsmConfigurableItem_get_Context_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmConfigurableItem_get_DefaultValue_Proxy(IMsmConfigurableItem *This,BSTR *DefaultValue);
+  void __RPC_STUB IMsmConfigurableItem_get_DefaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmConfigurableItem_get_Attributes_Proxy(IMsmConfigurableItem *This,long *Attributes);
+  void __RPC_STUB IMsmConfigurableItem_get_Attributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmConfigurableItem_get_DisplayName_Proxy(IMsmConfigurableItem *This,BSTR *DisplayName);
+  void __RPC_STUB IMsmConfigurableItem_get_DisplayName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmConfigurableItem_get_Description_Proxy(IMsmConfigurableItem *This,BSTR *Description);
+  void __RPC_STUB IMsmConfigurableItem_get_Description_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmConfigurableItem_get_HelpLocation_Proxy(IMsmConfigurableItem *This,BSTR *HelpLocation);
+  void __RPC_STUB IMsmConfigurableItem_get_HelpLocation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmConfigurableItem_get_HelpKeyword_Proxy(IMsmConfigurableItem *This,BSTR *HelpKeyword);
+  void __RPC_STUB IMsmConfigurableItem_get_HelpKeyword_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+#endif
+
+#ifndef __IEnumMsmConfigurableItem_INTERFACE_DEFINED__
+#define __IEnumMsmConfigurableItem_INTERFACE_DEFINED__
+#if defined(__cplusplus) && !defined(CINTERFACE)
+  struct IEnumMsmConfigurableItem : public IUnknown {
+  public:
+    virtual HRESULT WINAPI Next(unsigned long cFetch,IMsmConfigurableItem **rgmsmItems,unsigned long *pcFetched) = 0;
+    virtual HRESULT WINAPI Skip(unsigned long cSkip) = 0;
+    virtual HRESULT WINAPI Reset(void) = 0;
+    virtual HRESULT WINAPI Clone(IEnumMsmConfigurableItem **pemsmConfigurableItem) = 0;
+  };
+#else
+  typedef struct IEnumMsmConfigurableItemVtbl {
+    BEGIN_INTERFACE
+      HRESULT (WINAPI *QueryInterface)(IEnumMsmConfigurableItem *This,REFIID riid,void **ppvObject);
+      ULONG (WINAPI *AddRef)(IEnumMsmConfigurableItem *This);
+      ULONG (WINAPI *Release)(IEnumMsmConfigurableItem *This);
+      HRESULT (WINAPI *Next)(IEnumMsmConfigurableItem *This,unsigned long cFetch,IMsmConfigurableItem **rgmsmItems,unsigned long *pcFetched);
+      HRESULT (WINAPI *Skip)(IEnumMsmConfigurableItem *This,unsigned long cSkip);
+      HRESULT (WINAPI *Reset)(IEnumMsmConfigurableItem *This);
+      HRESULT (WINAPI *Clone)(IEnumMsmConfigurableItem *This,IEnumMsmConfigurableItem **pemsmConfigurableItem);
+    END_INTERFACE
+  } IEnumMsmConfigurableItemVtbl;
+  struct IEnumMsmConfigurableItem {
+    CONST_VTBL struct IEnumMsmConfigurableItemVtbl *lpVtbl;
+  };
+#ifdef COBJMACROS
+#define IEnumMsmConfigurableItem_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumMsmConfigurableItem_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumMsmConfigurableItem_Release(This) (This)->lpVtbl->Release(This)
+#define IEnumMsmConfigurableItem_Next(This,cFetch,rgmsmItems,pcFetched) (This)->lpVtbl->Next(This,cFetch,rgmsmItems,pcFetched)
+#define IEnumMsmConfigurableItem_Skip(This,cSkip) (This)->lpVtbl->Skip(This,cSkip)
+#define IEnumMsmConfigurableItem_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumMsmConfigurableItem_Clone(This,pemsmConfigurableItem) (This)->lpVtbl->Clone(This,pemsmConfigurableItem)
+#endif
+#endif
+  HRESULT WINAPI IEnumMsmConfigurableItem_Next_Proxy(IEnumMsmConfigurableItem *This,unsigned long cFetch,IMsmConfigurableItem **rgmsmItems,unsigned long *pcFetched);
+  void __RPC_STUB IEnumMsmConfigurableItem_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IEnumMsmConfigurableItem_Skip_Proxy(IEnumMsmConfigurableItem *This,unsigned long cSkip);
+  void __RPC_STUB IEnumMsmConfigurableItem_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IEnumMsmConfigurableItem_Reset_Proxy(IEnumMsmConfigurableItem *This);
+  void __RPC_STUB IEnumMsmConfigurableItem_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IEnumMsmConfigurableItem_Clone_Proxy(IEnumMsmConfigurableItem *This,IEnumMsmConfigurableItem **pemsmConfigurableItem);
+  void __RPC_STUB IEnumMsmConfigurableItem_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+#endif
+
+#ifndef __IMsmConfigurableItems_INTERFACE_DEFINED__
+#define __IMsmConfigurableItems_INTERFACE_DEFINED__
+#if defined(__cplusplus) && !defined(CINTERFACE)
+  struct IMsmConfigurableItems : public IDispatch {
+  public:
+    virtual HRESULT WINAPI get_Item(long Item,IMsmConfigurableItem **Return) = 0;
+    virtual HRESULT WINAPI get_Count(long *Count) = 0;
+    virtual HRESULT WINAPI get__NewEnum(IUnknown **NewEnum) = 0;
+  };
+#else
+  typedef struct IMsmConfigurableItemsVtbl {
+    BEGIN_INTERFACE
+      HRESULT (WINAPI *QueryInterface)(IMsmConfigurableItems *This,REFIID riid,void **ppvObject);
+      ULONG (WINAPI *AddRef)(IMsmConfigurableItems *This);
+      ULONG (WINAPI *Release)(IMsmConfigurableItems *This);
+      HRESULT (WINAPI *GetTypeInfoCount)(IMsmConfigurableItems *This,UINT *pctinfo);
+      HRESULT (WINAPI *GetTypeInfo)(IMsmConfigurableItems *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
+      HRESULT (WINAPI *GetIDsOfNames)(IMsmConfigurableItems *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
+      HRESULT (WINAPI *Invoke)(IMsmConfigurableItems *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+      HRESULT (WINAPI *get_Item)(IMsmConfigurableItems *This,long Item,IMsmConfigurableItem **Return);
+      HRESULT (WINAPI *get_Count)(IMsmConfigurableItems *This,long *Count);
+      HRESULT (WINAPI *get__NewEnum)(IMsmConfigurableItems *This,IUnknown **NewEnum);
+    END_INTERFACE
+  } IMsmConfigurableItemsVtbl;
+  struct IMsmConfigurableItems {
+    CONST_VTBL struct IMsmConfigurableItemsVtbl *lpVtbl;
+  };
+#ifdef COBJMACROS
+#define IMsmConfigurableItems_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMsmConfigurableItems_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMsmConfigurableItems_Release(This) (This)->lpVtbl->Release(This)
+#define IMsmConfigurableItems_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IMsmConfigurableItems_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IMsmConfigurableItems_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IMsmConfigurableItems_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define IMsmConfigurableItems_get_Item(This,Item,Return) (This)->lpVtbl->get_Item(This,Item,Return)
+#define IMsmConfigurableItems_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
+#define IMsmConfigurableItems_get__NewEnum(This,NewEnum) (This)->lpVtbl->get__NewEnum(This,NewEnum)
+#endif
+#endif
+  HRESULT WINAPI IMsmConfigurableItems_get_Item_Proxy(IMsmConfigurableItems *This,long Item,IMsmConfigurableItem **Return);
+  void __RPC_STUB IMsmConfigurableItems_get_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmConfigurableItems_get_Count_Proxy(IMsmConfigurableItems *This,long *Count);
+  void __RPC_STUB IMsmConfigurableItems_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmConfigurableItems_get__NewEnum_Proxy(IMsmConfigurableItems *This,IUnknown **NewEnum);
+  void __RPC_STUB IMsmConfigurableItems_get__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+#endif
+
+#ifndef __IMsmConfigureModule_INTERFACE_DEFINED__
+#define __IMsmConfigureModule_INTERFACE_DEFINED__
+#if defined(__cplusplus) && !defined(CINTERFACE)
+  struct IMsmConfigureModule : public IDispatch {
+  public:
+    virtual HRESULT WINAPI ProvideTextData(const BSTR Name,BSTR *ConfigData) = 0;
+    virtual HRESULT WINAPI ProvideIntegerData(const BSTR Name,long *ConfigData) = 0;
+  };
+#else
+  typedef struct IMsmConfigureModuleVtbl {
+    BEGIN_INTERFACE
+      HRESULT (WINAPI *QueryInterface)(IMsmConfigureModule *This,REFIID riid,void **ppvObject);
+      ULONG (WINAPI *AddRef)(IMsmConfigureModule *This);
+      ULONG (WINAPI *Release)(IMsmConfigureModule *This);
+      HRESULT (WINAPI *GetTypeInfoCount)(IMsmConfigureModule *This,UINT *pctinfo);
+      HRESULT (WINAPI *GetTypeInfo)(IMsmConfigureModule *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
+      HRESULT (WINAPI *GetIDsOfNames)(IMsmConfigureModule *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
+      HRESULT (WINAPI *Invoke)(IMsmConfigureModule *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+      HRESULT (WINAPI *ProvideTextData)(IMsmConfigureModule *This,const BSTR Name,BSTR *ConfigData);
+      HRESULT (WINAPI *ProvideIntegerData)(IMsmConfigureModule *This,const BSTR Name,long *ConfigData);
+    END_INTERFACE
+  } IMsmConfigureModuleVtbl;
+  struct IMsmConfigureModule {
+    CONST_VTBL struct IMsmConfigureModuleVtbl *lpVtbl;
+  };
+#ifdef COBJMACROS
+#define IMsmConfigureModule_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMsmConfigureModule_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMsmConfigureModule_Release(This) (This)->lpVtbl->Release(This)
+#define IMsmConfigureModule_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IMsmConfigureModule_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IMsmConfigureModule_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IMsmConfigureModule_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define IMsmConfigureModule_ProvideTextData(This,Name,ConfigData) (This)->lpVtbl->ProvideTextData(This,Name,ConfigData)
+#define IMsmConfigureModule_ProvideIntegerData(This,Name,ConfigData) (This)->lpVtbl->ProvideIntegerData(This,Name,ConfigData)
+#endif
+#endif
+  HRESULT WINAPI IMsmConfigureModule_ProvideTextData_Proxy(IMsmConfigureModule *This,const BSTR Name,BSTR *ConfigData);
+  void __RPC_STUB IMsmConfigureModule_ProvideTextData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmConfigureModule_ProvideIntegerData_Proxy(IMsmConfigureModule *This,const BSTR Name,long *ConfigData);
+  void __RPC_STUB IMsmConfigureModule_ProvideIntegerData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+#endif
+#endif
+
+#ifndef __IMsmMerge_INTERFACE_DEFINED__
+#define __IMsmMerge_INTERFACE_DEFINED__
+#if defined(__cplusplus) && !defined(CINTERFACE)
+  struct IMsmMerge : public IDispatch {
+  public:
+    virtual HRESULT WINAPI OpenDatabase(const BSTR Path) = 0;
+    virtual HRESULT WINAPI OpenModule(const BSTR Path,const short Language) = 0;
+    virtual HRESULT WINAPI CloseDatabase(const VARIANT_BOOL Commit) = 0;
+    virtual HRESULT WINAPI CloseModule(void) = 0;
+    virtual HRESULT WINAPI OpenLog(const BSTR Path) = 0;
+    virtual HRESULT WINAPI CloseLog(void) = 0;
+    virtual HRESULT WINAPI Log(const BSTR Message) = 0;
+    virtual HRESULT WINAPI get_Errors(IMsmErrors **Errors) = 0;
+    virtual HRESULT WINAPI get_Dependencies(IMsmDependencies **Dependencies) = 0;
+    virtual HRESULT WINAPI Merge(const BSTR Feature,const BSTR RedirectDir) = 0;
+    virtual HRESULT WINAPI Connect(const BSTR Feature) = 0;
+    virtual HRESULT WINAPI ExtractCAB(const BSTR FileName) = 0;
+    virtual HRESULT WINAPI ExtractFiles(const BSTR Path) = 0;
+  };
+#else
+  typedef struct IMsmMergeVtbl {
+    BEGIN_INTERFACE
+      HRESULT (WINAPI *QueryInterface)(IMsmMerge *This,REFIID riid,void **ppvObject);
+      ULONG (WINAPI *AddRef)(IMsmMerge *This);
+      ULONG (WINAPI *Release)(IMsmMerge *This);
+      HRESULT (WINAPI *GetTypeInfoCount)(IMsmMerge *This,UINT *pctinfo);
+      HRESULT (WINAPI *GetTypeInfo)(IMsmMerge *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
+      HRESULT (WINAPI *GetIDsOfNames)(IMsmMerge *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
+      HRESULT (WINAPI *Invoke)(IMsmMerge *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+      HRESULT (WINAPI *OpenDatabase)(IMsmMerge *This,const BSTR Path);
+      HRESULT (WINAPI *OpenModule)(IMsmMerge *This,const BSTR Path,const short Language);
+      HRESULT (WINAPI *CloseDatabase)(IMsmMerge *This,const VARIANT_BOOL Commit);
+      HRESULT (WINAPI *CloseModule)(IMsmMerge *This);
+      HRESULT (WINAPI *OpenLog)(IMsmMerge *This,const BSTR Path);
+      HRESULT (WINAPI *CloseLog)(IMsmMerge *This);
+      HRESULT (WINAPI *Log)(IMsmMerge *This,const BSTR Message);
+      HRESULT (WINAPI *get_Errors)(IMsmMerge *This,IMsmErrors **Errors);
+      HRESULT (WINAPI *get_Dependencies)(IMsmMerge *This,IMsmDependencies **Dependencies);
+      HRESULT (WINAPI *Merge)(IMsmMerge *This,const BSTR Feature,const BSTR RedirectDir);
+      HRESULT (WINAPI *Connect)(IMsmMerge *This,const BSTR Feature);
+      HRESULT (WINAPI *ExtractCAB)(IMsmMerge *This,const BSTR FileName);
+      HRESULT (WINAPI *ExtractFiles)(IMsmMerge *This,const BSTR Path);
+    END_INTERFACE
+  } IMsmMergeVtbl;
+  struct IMsmMerge {
+    CONST_VTBL struct IMsmMergeVtbl *lpVtbl;
+  };
+#ifdef COBJMACROS
+#define IMsmMerge_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMsmMerge_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMsmMerge_Release(This) (This)->lpVtbl->Release(This)
+#define IMsmMerge_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IMsmMerge_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IMsmMerge_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IMsmMerge_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define IMsmMerge_OpenDatabase(This,Path) (This)->lpVtbl->OpenDatabase(This,Path)
+#define IMsmMerge_OpenModule(This,Path,Language) (This)->lpVtbl->OpenModule(This,Path,Language)
+#define IMsmMerge_CloseDatabase(This,Commit) (This)->lpVtbl->CloseDatabase(This,Commit)
+#define IMsmMerge_CloseModule(This) (This)->lpVtbl->CloseModule(This)
+#define IMsmMerge_OpenLog(This,Path) (This)->lpVtbl->OpenLog(This,Path)
+#define IMsmMerge_CloseLog(This) (This)->lpVtbl->CloseLog(This)
+#define IMsmMerge_Log(This,Message) (This)->lpVtbl->Log(This,Message)
+#define IMsmMerge_get_Errors(This,Errors) (This)->lpVtbl->get_Errors(This,Errors)
+#define IMsmMerge_get_Dependencies(This,Dependencies) (This)->lpVtbl->get_Dependencies(This,Dependencies)
+#define IMsmMerge_Merge(This,Feature,RedirectDir) (This)->lpVtbl->Merge(This,Feature,RedirectDir)
+#define IMsmMerge_Connect(This,Feature) (This)->lpVtbl->Connect(This,Feature)
+#define IMsmMerge_ExtractCAB(This,FileName) (This)->lpVtbl->ExtractCAB(This,FileName)
+#define IMsmMerge_ExtractFiles(This,Path) (This)->lpVtbl->ExtractFiles(This,Path)
+#endif
+#endif
+  HRESULT WINAPI IMsmMerge_OpenDatabase_Proxy(IMsmMerge *This,const BSTR Path);
+  void __RPC_STUB IMsmMerge_OpenDatabase_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge_OpenModule_Proxy(IMsmMerge *This,const BSTR Path,const short Language);
+  void __RPC_STUB IMsmMerge_OpenModule_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge_CloseDatabase_Proxy(IMsmMerge *This,const VARIANT_BOOL Commit);
+  void __RPC_STUB IMsmMerge_CloseDatabase_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge_CloseModule_Proxy(IMsmMerge *This);
+  void __RPC_STUB IMsmMerge_CloseModule_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge_OpenLog_Proxy(IMsmMerge *This,const BSTR Path);
+  void __RPC_STUB IMsmMerge_OpenLog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge_CloseLog_Proxy(IMsmMerge *This);
+  void __RPC_STUB IMsmMerge_CloseLog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge_Log_Proxy(IMsmMerge *This,const BSTR Message);
+  void __RPC_STUB IMsmMerge_Log_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge_get_Errors_Proxy(IMsmMerge *This,IMsmErrors **Errors);
+  void __RPC_STUB IMsmMerge_get_Errors_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge_get_Dependencies_Proxy(IMsmMerge *This,IMsmDependencies **Dependencies);
+  void __RPC_STUB IMsmMerge_get_Dependencies_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge_Merge_Proxy(IMsmMerge *This,const BSTR Feature,const BSTR RedirectDir);
+  void __RPC_STUB IMsmMerge_Merge_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge_Connect_Proxy(IMsmMerge *This,const BSTR Feature);
+  void __RPC_STUB IMsmMerge_Connect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge_ExtractCAB_Proxy(IMsmMerge *This,const BSTR FileName);
+  void __RPC_STUB IMsmMerge_ExtractCAB_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge_ExtractFiles_Proxy(IMsmMerge *This,const BSTR Path);
+  void __RPC_STUB IMsmMerge_ExtractFiles_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+#endif
+
+#ifndef __IMsmGetFiles_INTERFACE_DEFINED__
+#define __IMsmGetFiles_INTERFACE_DEFINED__
+#if defined(__cplusplus) && !defined(CINTERFACE)
+  struct IMsmGetFiles : public IDispatch {
+  public:
+    virtual HRESULT WINAPI get_ModuleFiles(IMsmStrings **Files) = 0;
+  };
+#else
+  typedef struct IMsmGetFilesVtbl {
+    BEGIN_INTERFACE
+      HRESULT (WINAPI *QueryInterface)(IMsmGetFiles *This,REFIID riid,void **ppvObject);
+      ULONG (WINAPI *AddRef)(IMsmGetFiles *This);
+      ULONG (WINAPI *Release)(IMsmGetFiles *This);
+      HRESULT (WINAPI *GetTypeInfoCount)(IMsmGetFiles *This,UINT *pctinfo);
+      HRESULT (WINAPI *GetTypeInfo)(IMsmGetFiles *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
+      HRESULT (WINAPI *GetIDsOfNames)(IMsmGetFiles *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
+      HRESULT (WINAPI *Invoke)(IMsmGetFiles *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+      HRESULT (WINAPI *get_ModuleFiles)(IMsmGetFiles *This,IMsmStrings **Files);
+    END_INTERFACE
+  } IMsmGetFilesVtbl;
+  struct IMsmGetFiles {
+    CONST_VTBL struct IMsmGetFilesVtbl *lpVtbl;
+  };
+#ifdef COBJMACROS
+#define IMsmGetFiles_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMsmGetFiles_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMsmGetFiles_Release(This) (This)->lpVtbl->Release(This)
+#define IMsmGetFiles_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IMsmGetFiles_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IMsmGetFiles_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IMsmGetFiles_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define IMsmGetFiles_get_ModuleFiles(This,Files) (This)->lpVtbl->get_ModuleFiles(This,Files)
+#endif
+#endif
+  HRESULT WINAPI IMsmGetFiles_get_ModuleFiles_Proxy(IMsmGetFiles *This,IMsmStrings **Files);
+  void __RPC_STUB IMsmGetFiles_get_ModuleFiles_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+#endif
+
+#if (_WIN32_MSM >= 150)
+#ifndef __IMsmMerge2_INTERFACE_DEFINED__
+#define __IMsmMerge2_INTERFACE_DEFINED__
+#if defined(__cplusplus) && !defined(CINTERFACE)
+  struct IMsmMerge2 : public IDispatch {
+  public:
+    virtual HRESULT WINAPI OpenDatabase(const BSTR Path) = 0;
+    virtual HRESULT WINAPI OpenModule(const BSTR Path,const short Language) = 0;
+    virtual HRESULT WINAPI CloseDatabase(const VARIANT_BOOL Commit) = 0;
+    virtual HRESULT WINAPI CloseModule(void) = 0;
+    virtual HRESULT WINAPI OpenLog(const BSTR Path) = 0;
+    virtual HRESULT WINAPI CloseLog(void) = 0;
+    virtual HRESULT WINAPI Log(const BSTR Message) = 0;
+    virtual HRESULT WINAPI get_Errors(IMsmErrors **Errors) = 0;
+    virtual HRESULT WINAPI get_Dependencies(IMsmDependencies **Dependencies) = 0;
+    virtual HRESULT WINAPI Merge(const BSTR Feature,const BSTR RedirectDir) = 0;
+    virtual HRESULT WINAPI Connect(const BSTR Feature) = 0;
+    virtual HRESULT WINAPI ExtractCAB(const BSTR FileName) = 0;
+    virtual HRESULT WINAPI ExtractFiles(const BSTR Path) = 0;
+    virtual HRESULT WINAPI MergeEx(const BSTR Feature,const BSTR RedirectDir,IUnknown *pConfiguration) = 0;
+    virtual HRESULT WINAPI ExtractFilesEx(const BSTR Path,VARIANT_BOOL fLongFileNames,IMsmStrings **pFilePaths) = 0;
+    virtual HRESULT WINAPI get_ConfigurableItems(IMsmConfigurableItems **ConfigurableItems) = 0;
+    virtual HRESULT WINAPI CreateSourceImage(const BSTR Path,VARIANT_BOOL fLongFileNames,IMsmStrings **pFilePaths) = 0;
+    virtual HRESULT WINAPI get_ModuleFiles(IMsmStrings **Files) = 0;
+  };
+#else
+  typedef struct IMsmMerge2Vtbl {
+    BEGIN_INTERFACE
+      HRESULT (WINAPI *QueryInterface)(IMsmMerge2 *This,REFIID riid,void **ppvObject);
+      ULONG (WINAPI *AddRef)(IMsmMerge2 *This);
+      ULONG (WINAPI *Release)(IMsmMerge2 *This);
+      HRESULT (WINAPI *GetTypeInfoCount)(IMsmMerge2 *This,UINT *pctinfo);
+      HRESULT (WINAPI *GetTypeInfo)(IMsmMerge2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
+      HRESULT (WINAPI *GetIDsOfNames)(IMsmMerge2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
+      HRESULT (WINAPI *Invoke)(IMsmMerge2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
+      HRESULT (WINAPI *OpenDatabase)(IMsmMerge2 *This,const BSTR Path);
+      HRESULT (WINAPI *OpenModule)(IMsmMerge2 *This,const BSTR Path,const short Language);
+      HRESULT (WINAPI *CloseDatabase)(IMsmMerge2 *This,const VARIANT_BOOL Commit);
+      HRESULT (WINAPI *CloseModule)(IMsmMerge2 *This);
+      HRESULT (WINAPI *OpenLog)(IMsmMerge2 *This,const BSTR Path);
+      HRESULT (WINAPI *CloseLog)(IMsmMerge2 *This);
+      HRESULT (WINAPI *Log)(IMsmMerge2 *This,const BSTR Message);
+      HRESULT (WINAPI *get_Errors)(IMsmMerge2 *This,IMsmErrors **Errors);
+      HRESULT (WINAPI *get_Dependencies)(IMsmMerge2 *This,IMsmDependencies **Dependencies);
+      HRESULT (WINAPI *Merge)(IMsmMerge2 *This,const BSTR Feature,const BSTR RedirectDir);
+      HRESULT (WINAPI *Connect)(IMsmMerge2 *This,const BSTR Feature);
+      HRESULT (WINAPI *ExtractCAB)(IMsmMerge2 *This,const BSTR FileName);
+      HRESULT (WINAPI *ExtractFiles)(IMsmMerge2 *This,const BSTR Path);
+      HRESULT (WINAPI *MergeEx)(IMsmMerge2 *This,const BSTR Feature,const BSTR RedirectDir,IMsmConfigureModule *pConfiguration);
+      HRESULT (WINAPI *ExtractFilesEx)(IMsmMerge2 *This,const BSTR Path,VARIANT_BOOL fLongFileNames,IMsmStrings **pFilePaths);
+      HRESULT (WINAPI *get_ConfigurableItems)(IMsmMerge2 *This,IMsmConfigurableItems **ConfigurableItems);
+      HRESULT (WINAPI *CreateSourceImage)(IMsmMerge2 *This,const BSTR Path,VARIANT_BOOL fLongFileNames,IMsmStrings **pFilePaths);
+      HRESULT (WINAPI *get_ModuleFiles)(IMsmMerge2 *This,IMsmStrings **Files);
+    END_INTERFACE
+  } IMsmMerge2Vtbl;
+  struct IMsmMerge2 {
+    CONST_VTBL struct IMsmMerge2Vtbl *lpVtbl;
+  };
+#ifdef COBJMACROS
+#define IMsmMerge2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMsmMerge2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMsmMerge2_Release(This) (This)->lpVtbl->Release(This)
+#define IMsmMerge2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IMsmMerge2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IMsmMerge2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IMsmMerge2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define IMsmMerge2_OpenDatabase(This,Path) (This)->lpVtbl->OpenDatabase(This,Path)
+#define IMsmMerge2_OpenModule(This,Path,Language) (This)->lpVtbl->OpenModule(This,Path,Language)
+#define IMsmMerge2_CloseDatabase(This,Commit) (This)->lpVtbl->CloseDatabase(This,Commit)
+#define IMsmMerge2_CloseModule(This) (This)->lpVtbl->CloseModule(This)
+#define IMsmMerge2_OpenLog(This,Path) (This)->lpVtbl->OpenLog(This,Path)
+#define IMsmMerge2_CloseLog(This) (This)->lpVtbl->CloseLog(This)
+#define IMsmMerge2_Log(This,Message) (This)->lpVtbl->Log(This,Message)
+#define IMsmMerge2_get_Errors(This,Errors) (This)->lpVtbl->get_Errors(This,Errors)
+#define IMsmMerge2_get_Dependencies(This,Dependencies) (This)->lpVtbl->get_Dependencies(This,Dependencies)
+#define IMsmMerge2_Merge(This,Feature,RedirectDir) (This)->lpVtbl->Merge(This,Feature,RedirectDir)
+#define IMsmMerge2_Connect(This,Feature) (This)->lpVtbl->Connect(This,Feature)
+#define IMsmMerge2_ExtractCAB(This,FileName) (This)->lpVtbl->ExtractCAB(This,FileName)
+#define IMsmMerge2_ExtractFiles(This,Path) (This)->lpVtbl->ExtractFiles(This,Path)
+#define IMsmMerge2_MergeEx(This,Feature,RedirectDir,pConfiguration) (This)->lpVtbl->MergeEx(This,Feature,RedirectDir,pConfiguration)
+#define IMsmMerge2_ExtractFilesEx(This,Path,fLongFileNames,pFilePaths) (This)->lpVtbl->ExtractFilesEx(This,Path,fLongFileNames,pFilePaths)
+#define IMsmMerge2_get_ConfigurableItems(This,ConfigurableItems) (This)->lpVtbl->get_ConfigurableItems(This,ConfigurableItems)
+#define IMsmMerge2_CreateSourceImage(This,Path,fLongFileNames,pFilePaths) (This)->lpVtbl->CreateSourceImage(This,Path,fLongFileNames,pFilePaths)
+#define IMsmMerge2_get_ModuleFiles(This,Files) (This)->lpVtbl->get_ModuleFiles(This,Files)
+#endif
+#endif
+  HRESULT WINAPI IMsmMerge2_OpenDatabase_Proxy(IMsmMerge2 *This,const BSTR Path);
+  void __RPC_STUB IMsmMerge2_OpenDatabase_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_OpenModule_Proxy(IMsmMerge2 *This,const BSTR Path,const short Language);
+  void __RPC_STUB IMsmMerge2_OpenModule_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_CloseDatabase_Proxy(IMsmMerge2 *This,const VARIANT_BOOL Commit);
+  void __RPC_STUB IMsmMerge2_CloseDatabase_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_CloseModule_Proxy(IMsmMerge2 *This);
+  void __RPC_STUB IMsmMerge2_CloseModule_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_OpenLog_Proxy(IMsmMerge2 *This,const BSTR Path);
+  void __RPC_STUB IMsmMerge2_OpenLog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_CloseLog_Proxy(IMsmMerge2 *This);
+  void __RPC_STUB IMsmMerge2_CloseLog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_Log_Proxy(IMsmMerge2 *This,const BSTR Message);
+  void __RPC_STUB IMsmMerge2_Log_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_get_Errors_Proxy(IMsmMerge2 *This,IMsmErrors **Errors);
+  void __RPC_STUB IMsmMerge2_get_Errors_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_get_Dependencies_Proxy(IMsmMerge2 *This,IMsmDependencies **Dependencies);
+  void __RPC_STUB IMsmMerge2_get_Dependencies_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_Merge_Proxy(IMsmMerge2 *This,const BSTR Feature,const BSTR RedirectDir);
+  void __RPC_STUB IMsmMerge2_Merge_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_Connect_Proxy(IMsmMerge2 *This,const BSTR Feature);
+  void __RPC_STUB IMsmMerge2_Connect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_ExtractCAB_Proxy(IMsmMerge2 *This,const BSTR FileName);
+  void __RPC_STUB IMsmMerge2_ExtractCAB_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_ExtractFiles_Proxy(IMsmMerge2 *This,const BSTR Path);
+  void __RPC_STUB IMsmMerge2_ExtractFiles_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_MergeEx_Proxy(IMsmMerge2 *This,const BSTR Feature,const BSTR RedirectDir,IMsmConfigureModule *pConfiguration);
+  void __RPC_STUB IMsmMerge2_MergeEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_ExtractFilesEx_Proxy(IMsmMerge2 *This,const BSTR Path,VARIANT_BOOL fLongFileNames,IMsmStrings **pFilePaths);
+  void __RPC_STUB IMsmMerge2_ExtractFilesEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_get_ConfigurableItems_Proxy(IMsmMerge2 *This,IMsmConfigurableItems **ConfigurableItems);
+  void __RPC_STUB IMsmMerge2_get_ConfigurableItems_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_CreateSourceImage_Proxy(IMsmMerge2 *This,const BSTR Path,VARIANT_BOOL fLongFileNames,IMsmStrings **pFilePaths);
+  void __RPC_STUB IMsmMerge2_CreateSourceImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+  HRESULT WINAPI IMsmMerge2_get_ModuleFiles_Proxy(IMsmMerge2 *This,IMsmStrings **Files);
+  void __RPC_STUB IMsmMerge2_get_ModuleFiles_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
+#endif
+#endif
+
+#ifndef __MsmMergeTypeLib_LIBRARY_DEFINED__
+#define __MsmMergeTypeLib_LIBRARY_DEFINED__
+#ifdef __cplusplus
+  class MsmMerge;
+#endif
+
+#if (_WIN32_MSM >= 150)
+#ifdef __cplusplus
+  class MsmMerge2;
+#endif
+#endif
+#endif
+
+  unsigned long __RPC_API BSTR_UserSize(unsigned long *,unsigned long,BSTR *);
+  unsigned char *__RPC_API BSTR_UserMarshal(unsigned long *,unsigned char *,BSTR *);
+  unsigned char *__RPC_API BSTR_UserUnmarshal(unsigned long *,unsigned char *,BSTR *);
+  void __RPC_API BSTR_UserFree(unsigned long *,BSTR *);
+
+#ifdef __cplusplus
+}
+#endif
+
+DEFINE_GUID(IID_IEnumMsmString,0x0ADDA826,0x2C26,0x11D2,0xAD,0x65,0x00,0xA0,0xC9,0xAF,0x11,0xA6);
+DEFINE_GUID(IID_IMsmStrings,0x0ADDA827,0x2C26,0x11D2,0xAD,0x65,0x00,0xA0,0xC9,0xAF,0x11,0xA6);
+DEFINE_GUID(IID_IMsmError,0x0ADDA828,0x2C26,0x11D2,0xAD,0x65,0x00,0xA0,0xC9,0xAF,0x11,0xA6);
+DEFINE_GUID(IID_IEnumMsmError,0x0ADDA829,0x2C26,0x11D2,0xAD,0x65,0x00,0xA0,0xC9,0xAF,0x11,0xA6);
+DEFINE_GUID(IID_IMsmErrors,0x0ADDA82A,0x2C26,0x11D2,0xAD,0x65,0x00,0xA0,0xC9,0xAF,0x11,0xA6);
+DEFINE_GUID(IID_IMsmDependency,0x0ADDA82B,0x2C26,0x11D2,0xAD,0x65,0x00,0xA0,0xC9,0xAF,0x11,0xA6);
+DEFINE_GUID(IID_IEnumMsmDependency,0x0ADDA82C,0x2C26,0x11D2,0xAD,0x65,0x00,0xA0,0xC9,0xAF,0x11,0xA6);
+DEFINE_GUID(IID_IMsmDependencies,0x0ADDA82D,0x2C26,0x11D2,0xAD,0x65,0x00,0xA0,0xC9,0xAF,0x11,0xA6);
+DEFINE_GUID(IID_IMsmMerge,0x0ADDA82E,0x2C26,0x11D2,0xAD,0x65,0x00,0xA0,0xC9,0xAF,0x11,0xA6);
+DEFINE_GUID(IID_IMsmGetFiles,0x7041ae26,0x2d78,0x11d2,0x88,0x8a,0x0,0xa0,0xc9,0x81,0xb0,0x15);
+DEFINE_GUID(LIBID_MsmMergeTypeLib,0x0ADDA82F,0x2C26,0x11D2,0xAD,0x65,0x00,0xA0,0xC9,0xAF,0x11,0xA6);
+DEFINE_GUID(CLSID_MsmMerge,0x0ADDA830,0x2C26,0x11D2,0xAD,0x65,0x00,0xA0,0xC9,0xAF,0x11,0xA6);
+#if (_WIN32_MSM >= 150)
+DEFINE_GUID(IID_IMsmMerge2,0x351A72AB,0x21CB,0x47AB,0xB7,0xAA,0xC4,0xD7,0xB0,0x2E,0xA3,0x05);
+DEFINE_GUID(IID_IMsmConfigurableItem,0x4D6E6284,0xD21D,0x401E,0x84,0xF6,0x90,0x9E,0x00,0xB5,0x0F,0x71);
+DEFINE_GUID(IID_IEnumMsmConfigurableItem,0x832C6969,0x4826,0x4C24,0xA3,0x97,0xB7,0x00,0x2D,0x81,0x96,0xE6);
+DEFINE_GUID(IID_IMsmConfigurableItems,0x55BF723C,0x9A0D,0x463E,0xB4,0x2B,0xB4,0xFB,0xC7,0xBE,0x3C,0x7C);
+DEFINE_GUID(IID_IMsmConfigureModule,0xAC013209,0x18A7,0x4851,0x8A,0x21,0x23,0x53,0x44,0x3D,0x70,0xA0);
+DEFINE_GUID(CLSID_MsmMerge2,0xF94985D5,0x29F9,0x4743,0x98,0x05,0x99,0xBC,0x3F,0x35,0xB6,0x78);
+#endif
+#endif