/**
 * 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.
 */
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 440
#endif

#include "rpc.h"
#include "rpcndr.h"

#ifndef __msimcntl_h__
#define __msimcntl_h__

#ifndef ___IUseIMBase_FWD_DEFINED__
#define ___IUseIMBase_FWD_DEFINED__
typedef interface _IUseIMBase _IUseIMBase;
#endif

#ifndef __IMSIMContactView_FWD_DEFINED__
#define __IMSIMContactView_FWD_DEFINED__
typedef interface IMSIMContactView IMSIMContactView;
#endif

#ifndef __DMSIMContactViewEvents_FWD_DEFINED__
#define __DMSIMContactViewEvents_FWD_DEFINED__
typedef interface DMSIMContactViewEvents DMSIMContactViewEvents;
#endif

#ifndef __IMSIMMessageView_FWD_DEFINED__
#define __IMSIMMessageView_FWD_DEFINED__
typedef interface IMSIMMessageView IMSIMMessageView;
#endif

#ifndef __DMSIMMessageViewEvents_FWD_DEFINED__
#define __DMSIMMessageViewEvents_FWD_DEFINED__
typedef interface DMSIMMessageViewEvents DMSIMMessageViewEvents;
#endif

#ifndef __MSIMContactView_FWD_DEFINED__
#define __MSIMContactView_FWD_DEFINED__

#ifdef __cplusplus
typedef class MSIMContactView MSIMContactView;
#else
typedef struct MSIMContactView MSIMContactView;
#endif
#endif

#ifndef __MSIMMessageView_FWD_DEFINED__
#define __MSIMMessageView_FWD_DEFINED__

#ifdef __cplusplus
typedef class MSIMMessageView MSIMMessageView;
#else
typedef struct MSIMMessageView MSIMMessageView;
#endif
#endif

#ifndef __IIMSafeContact_FWD_DEFINED__
#define __IIMSafeContact_FWD_DEFINED__
typedef interface IIMSafeContact IIMSafeContact;
#endif

#ifndef __IMSIMContactList_FWD_DEFINED__
#define __IMSIMContactList_FWD_DEFINED__
typedef interface IMSIMContactList IMSIMContactList;
#endif

#ifndef __DIMContactListEvents_FWD_DEFINED__
#define __DIMContactListEvents_FWD_DEFINED__
typedef interface DIMContactListEvents DIMContactListEvents;
#endif

#ifndef __MSIMContactList_FWD_DEFINED__
#define __MSIMContactList_FWD_DEFINED__
#ifdef __cplusplus
typedef class MSIMContactList MSIMContactList;
#else
typedef struct MSIMContactList MSIMContactList;
#endif
#endif

#ifndef __IMSafeContact_FWD_DEFINED__
#define __IMSafeContact_FWD_DEFINED__
#ifdef __cplusplus
typedef class IMSafeContact IMSafeContact;
#else
typedef struct IMSafeContact IMSafeContact;
#endif
#endif

#include "oaidl.h"
#include "ocidl.h"
#include "SIMPDATA.h"

#ifdef __cplusplus
extern "C" {
#endif

  void *__RPC_API MIDL_user_allocate(size_t);
  void __RPC_API MIDL_user_free(void *);

#define DMSIMCONTACTVIEWEVENTS_OnReady 0xD0
#define DMSIMCONTACTVIEWEVENTS_OnLogon 0xD1
#define DMSIMCONTACTVIEWEVENTS_OnLogoff 0xD2
#define DMSIMCONTACTVIEWEVENTS_OnLaunchMessageUI 0xD3
#define DMSIMCONTACTVIEWEVENTS_OnMenuRequest 0xD6
#define DMSIMCONTACTVIEWEVENTS_OnMenuSelect 0xD7
#define DMSIMCONTACTVIEWEVENTS_OnAddResult 0xD8
#define DMSIMCONTACTVIEWEVENTS_OnRemoveResult 0xD9
#define DMSIMCONTACTVIEWEVENTS_OnSelect 0xDA
#define DMSIMCONTACTVIEWEVENTS_OnShutdown 0xDB
#define DMSIMCONTACTVIEWEVENTS_OnEMailContact 0xDC
#define DMSIMCONTACTVIEWEVENTS_OnAddContactUI 0xDD
#define DMSIMCONTACTVIEWEVENTS_OnLocalStateChange 0xDE
#define DMSIMCONTACTVIEWEVENTS_OnExtentsChange 0xDF
#define DMSIMMESSAGEVIEWEVENTS_OnReady 0xD0
#define DMSIMMESSAGEVIEWEVENTS_OnLogon 0xD1
#define DMSIMMESSAGEVIEWEVENTS_OnLogoff 0xD2
#define DMSIMMESSAGEVIEWEVENTS_OnLaunchMessageUI 0xD3
#define DMSIMMESSAGEVIEWEVENTS_OnNewMessage 0xD6
#define DMSIMMESSAGEVIEWEVENTS_OnAddResult 0xD7
#define DMSIMMESSAGEVIEWEVENTS_OnRemoveResult 0xD8
#define DMSIMMESSAGEVIEWEVENTS_OnNewSession 0xD9
#define DMSIMMESSAGEVIEWEVENTS_OnSessionEnd 0xDA
#define DMSIMMESSAGEVIEWEVENTS_OnShutdown 0xDB
#define DMSIMMESSAGEVIEWEVENTS_OnLocalStateChange 0xDC
#define DMSIMCONTACTLISTEVENTS_OnReady 0xD0
#define DMSIMCONTACTLISTEVENTS_OnLogon 0xD1
#define DMSIMCONTACTLISTEVENTS_OnLogoff 0xD2
#define DMSIMCONTACTLISTEVENTS_OnAddResult 0xD3
#define DMSIMCONTACTLISTEVENTS_OnRemoveResult 0xD4
#define DMSIMCONTACTLISTEVENTS_OnShutdown 0xD5
#define DMSIMCONTACTLISTEVENTS_OnChangeContact 0xD6
#define DMSIMCONTACTLISTEVENTS_OnLocalStateChange 0xD7

  extern RPC_IF_HANDLE __MIDL_itf_msimcntl_0000_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_msimcntl_0000_v0_0_s_ifspec;

#ifndef __MSIMCNTLLib_LIBRARY_DEFINED__
#define __MSIMCNTLLib_LIBRARY_DEFINED__

  typedef enum __MIDL___MIDL_itf_msimcntl_0000_0001 {
    MSIM_PROVIDER_FIRST = 0,MSIM_PROVIDER_ANY = 0,MSIM_PROVIDER_EXCHANGE_HOST = 1,MSIM_PROVIDER_LAST = 1,MSIM_PROVIDER_NONE = 0xffff
  } MSIM_PROVIDER;

  typedef enum __MIDL___MIDL_itf_msimcntl_0000_0002 {
    MSIM_MSG_UI_SESSION = 0,MSIM_MSG_UI_NETMEETING = 1
  } MSIM_MSG_UI;

  EXTERN_C const IID LIBID_MSIMCNTLLib;
#ifndef ___IUseIMBase_INTERFACE_DEFINED__
#define ___IUseIMBase_INTERFACE_DEFINED__
  EXTERN_C const IID IID__IUseIMBase;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct _IUseIMBase : public IDispatch {
  public:
    virtual HRESULT WINAPI SetService(IDispatch *pService,IDispatch *pApp = 0) = 0;
    virtual HRESULT WINAPI get_Service(short *pVal) = 0;
    virtual HRESULT WINAPI put_Service(short newVal) = 0;
    virtual HRESULT WINAPI get_HasService(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI get_AutoLogon(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_AutoLogon(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_LoggedOn(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI Logon(BSTR bstrAddress = L"",BSTR bstrName = L"",BSTR bstrPassword = L"",BSTR bstrDomain = L"") = 0;
    virtual HRESULT WINAPI Logoff(void) = 0;
    virtual HRESULT WINAPI GetLocalState(VARIANT *pvarState,VARIANT *pvarDescription,VARIANT *pvarData) = 0;
    virtual HRESULT WINAPI SetLocalState(long lState,VARIANT varDescription,VARIANT varData) = 0;
  };
#else
  typedef struct _IUseIMBaseVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(_IUseIMBase *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(_IUseIMBase *This);
      ULONG (WINAPI *Release)(_IUseIMBase *This);
      HRESULT (WINAPI *GetTypeInfoCount)(_IUseIMBase *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(_IUseIMBase *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(_IUseIMBase *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(_IUseIMBase *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *SetService)(_IUseIMBase *This,IDispatch *pService,IDispatch *pApp);
      HRESULT (WINAPI *get_Service)(_IUseIMBase *This,short *pVal);
      HRESULT (WINAPI *put_Service)(_IUseIMBase *This,short newVal);
      HRESULT (WINAPI *get_HasService)(_IUseIMBase *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *get_AutoLogon)(_IUseIMBase *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_AutoLogon)(_IUseIMBase *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_LoggedOn)(_IUseIMBase *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *Logon)(_IUseIMBase *This,BSTR bstrAddress,BSTR bstrName,BSTR bstrPassword,BSTR bstrDomain);
      HRESULT (WINAPI *Logoff)(_IUseIMBase *This);
      HRESULT (WINAPI *GetLocalState)(_IUseIMBase *This,VARIANT *pvarState,VARIANT *pvarDescription,VARIANT *pvarData);
      HRESULT (WINAPI *SetLocalState)(_IUseIMBase *This,long lState,VARIANT varDescription,VARIANT varData);
    END_INTERFACE
  } _IUseIMBaseVtbl;
  interface _IUseIMBase {
    CONST_VTBL struct _IUseIMBaseVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define _IUseIMBase_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define _IUseIMBase_AddRef(This) (This)->lpVtbl->AddRef(This)
#define _IUseIMBase_Release(This) (This)->lpVtbl->Release(This)
#define _IUseIMBase_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define _IUseIMBase_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define _IUseIMBase_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define _IUseIMBase_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define _IUseIMBase_SetService(This,pService,pApp) (This)->lpVtbl->SetService(This,pService,pApp)
#define _IUseIMBase_get_Service(This,pVal) (This)->lpVtbl->get_Service(This,pVal)
#define _IUseIMBase_put_Service(This,newVal) (This)->lpVtbl->put_Service(This,newVal)
#define _IUseIMBase_get_HasService(This,pVal) (This)->lpVtbl->get_HasService(This,pVal)
#define _IUseIMBase_get_AutoLogon(This,pVal) (This)->lpVtbl->get_AutoLogon(This,pVal)
#define _IUseIMBase_put_AutoLogon(This,newVal) (This)->lpVtbl->put_AutoLogon(This,newVal)
#define _IUseIMBase_get_LoggedOn(This,pVal) (This)->lpVtbl->get_LoggedOn(This,pVal)
#define _IUseIMBase_Logon(This,bstrAddress,bstrName,bstrPassword,bstrDomain) (This)->lpVtbl->Logon(This,bstrAddress,bstrName,bstrPassword,bstrDomain)
#define _IUseIMBase_Logoff(This) (This)->lpVtbl->Logoff(This)
#define _IUseIMBase_GetLocalState(This,pvarState,pvarDescription,pvarData) (This)->lpVtbl->GetLocalState(This,pvarState,pvarDescription,pvarData)
#define _IUseIMBase_SetLocalState(This,lState,varDescription,varData) (This)->lpVtbl->SetLocalState(This,lState,varDescription,varData)
#endif
#endif
  HRESULT WINAPI _IUseIMBase_SetService_Proxy(_IUseIMBase *This,IDispatch *pService,IDispatch *pApp);
  void __RPC_STUB _IUseIMBase_SetService_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI _IUseIMBase_get_Service_Proxy(_IUseIMBase *This,short *pVal);
  void __RPC_STUB _IUseIMBase_get_Service_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI _IUseIMBase_put_Service_Proxy(_IUseIMBase *This,short newVal);
  void __RPC_STUB _IUseIMBase_put_Service_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI _IUseIMBase_get_HasService_Proxy(_IUseIMBase *This,VARIANT_BOOL *pVal);
  void __RPC_STUB _IUseIMBase_get_HasService_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI _IUseIMBase_get_AutoLogon_Proxy(_IUseIMBase *This,VARIANT_BOOL *pVal);
  void __RPC_STUB _IUseIMBase_get_AutoLogon_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI _IUseIMBase_put_AutoLogon_Proxy(_IUseIMBase *This,VARIANT_BOOL newVal);
  void __RPC_STUB _IUseIMBase_put_AutoLogon_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI _IUseIMBase_get_LoggedOn_Proxy(_IUseIMBase *This,VARIANT_BOOL *pVal);
  void __RPC_STUB _IUseIMBase_get_LoggedOn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI _IUseIMBase_Logon_Proxy(_IUseIMBase *This,BSTR bstrAddress,BSTR bstrName,BSTR bstrPassword,BSTR bstrDomain);
  void __RPC_STUB _IUseIMBase_Logon_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI _IUseIMBase_Logoff_Proxy(_IUseIMBase *This);
  void __RPC_STUB _IUseIMBase_Logoff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI _IUseIMBase_GetLocalState_Proxy(_IUseIMBase *This,VARIANT *pvarState,VARIANT *pvarDescription,VARIANT *pvarData);
  void __RPC_STUB _IUseIMBase_GetLocalState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI _IUseIMBase_SetLocalState_Proxy(_IUseIMBase *This,long lState,VARIANT varDescription,VARIANT varData);
  void __RPC_STUB _IUseIMBase_SetLocalState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSIMContactView_INTERFACE_DEFINED__
#define __IMSIMContactView_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSIMContactView;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSIMContactView : public _IUseIMBase {
  public:
    virtual HRESULT WINAPI Add(VARIANT vUser) = 0;
    virtual HRESULT WINAPI Remove(VARIANT vUser) = 0;
    virtual HRESULT WINAPI get_List(VARIANT *pvarList) = 0;
    virtual HRESULT WINAPI put_List(VARIANT varList) = 0;
    virtual HRESULT WINAPI AddMenuItem(BSTR bstrItem,long lPosition,long *plCommand) = 0;
    virtual HRESULT WINAPI get_SelectedMenuOptions(long *pVal) = 0;
    virtual HRESULT WINAPI IMSelected(void) = 0;
    virtual HRESULT WINAPI EMailSelected(void) = 0;
    virtual HRESULT WINAPI InviteSelected(void) = 0;
    virtual HRESULT WINAPI BlockSelected(void) = 0;
    virtual HRESULT WINAPI UnblockSelected(void) = 0;
    virtual HRESULT WINAPI get_ExtentWidth(long *pX) = 0;
    virtual HRESULT WINAPI get_ExtentHeight(long *pY) = 0;
    virtual HRESULT WINAPI get_HotTracking(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_HotTracking(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_AllowCollapse(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_AllowCollapse(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_ShowSelectAlways(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_ShowSelectAlways(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_OnlineRootLabel(BSTR *pbstrLabel) = 0;
    virtual HRESULT WINAPI put_OnlineRootLabel(BSTR bstrLabel) = 0;
    virtual HRESULT WINAPI get_OfflineRootLabel(BSTR *pbstrLabel) = 0;
    virtual HRESULT WINAPI put_OfflineRootLabel(BSTR bstrLabel) = 0;
    virtual HRESULT WINAPI get_Window(long *pVal) = 0;
    virtual HRESULT WINAPI get_ShowLogonButton(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_ShowLogonButton(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_OnlineCollapsed(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_OnlineCollapsed(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_OfflineCollapsed(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_OfflineCollapsed(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_Group(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_Group(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_FilterOffline(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_FilterOffline(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_ShowIcons(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_ShowIcons(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_AcceptMessages(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_AcceptMessages(VARIANT_BOOL newVal) = 0;
  };
#else
  typedef struct IMSIMContactViewVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSIMContactView *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSIMContactView *This);
      ULONG (WINAPI *Release)(IMSIMContactView *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSIMContactView *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSIMContactView *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSIMContactView *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSIMContactView *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *SetService)(IMSIMContactView *This,IDispatch *pService,IDispatch *pApp);
      HRESULT (WINAPI *get_Service)(IMSIMContactView *This,short *pVal);
      HRESULT (WINAPI *put_Service)(IMSIMContactView *This,short newVal);
      HRESULT (WINAPI *get_HasService)(IMSIMContactView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *get_AutoLogon)(IMSIMContactView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_AutoLogon)(IMSIMContactView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_LoggedOn)(IMSIMContactView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *Logon)(IMSIMContactView *This,BSTR bstrAddress,BSTR bstrName,BSTR bstrPassword,BSTR bstrDomain);
      HRESULT (WINAPI *Logoff)(IMSIMContactView *This);
      HRESULT (WINAPI *GetLocalState)(IMSIMContactView *This,VARIANT *pvarState,VARIANT *pvarDescription,VARIANT *pvarData);
      HRESULT (WINAPI *SetLocalState)(IMSIMContactView *This,long lState,VARIANT varDescription,VARIANT varData);
      HRESULT (WINAPI *Add)(IMSIMContactView *This,VARIANT vUser);
      HRESULT (WINAPI *Remove)(IMSIMContactView *This,VARIANT vUser);
      HRESULT (WINAPI *get_List)(IMSIMContactView *This,VARIANT *pvarList);
      HRESULT (WINAPI *put_List)(IMSIMContactView *This,VARIANT varList);
      HRESULT (WINAPI *AddMenuItem)(IMSIMContactView *This,BSTR bstrItem,long lPosition,long *plCommand);
      HRESULT (WINAPI *get_SelectedMenuOptions)(IMSIMContactView *This,long *pVal);
      HRESULT (WINAPI *IMSelected)(IMSIMContactView *This);
      HRESULT (WINAPI *EMailSelected)(IMSIMContactView *This);
      HRESULT (WINAPI *InviteSelected)(IMSIMContactView *This);
      HRESULT (WINAPI *BlockSelected)(IMSIMContactView *This);
      HRESULT (WINAPI *UnblockSelected)(IMSIMContactView *This);
      HRESULT (WINAPI *get_ExtentWidth)(IMSIMContactView *This,long *pX);
      HRESULT (WINAPI *get_ExtentHeight)(IMSIMContactView *This,long *pY);
      HRESULT (WINAPI *get_HotTracking)(IMSIMContactView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_HotTracking)(IMSIMContactView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_AllowCollapse)(IMSIMContactView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_AllowCollapse)(IMSIMContactView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_ShowSelectAlways)(IMSIMContactView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_ShowSelectAlways)(IMSIMContactView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_OnlineRootLabel)(IMSIMContactView *This,BSTR *pbstrLabel);
      HRESULT (WINAPI *put_OnlineRootLabel)(IMSIMContactView *This,BSTR bstrLabel);
      HRESULT (WINAPI *get_OfflineRootLabel)(IMSIMContactView *This,BSTR *pbstrLabel);
      HRESULT (WINAPI *put_OfflineRootLabel)(IMSIMContactView *This,BSTR bstrLabel);
      HRESULT (WINAPI *get_Window)(IMSIMContactView *This,long *pVal);
      HRESULT (WINAPI *get_ShowLogonButton)(IMSIMContactView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_ShowLogonButton)(IMSIMContactView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_OnlineCollapsed)(IMSIMContactView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_OnlineCollapsed)(IMSIMContactView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_OfflineCollapsed)(IMSIMContactView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_OfflineCollapsed)(IMSIMContactView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_Group)(IMSIMContactView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_Group)(IMSIMContactView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_FilterOffline)(IMSIMContactView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_FilterOffline)(IMSIMContactView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_ShowIcons)(IMSIMContactView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_ShowIcons)(IMSIMContactView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_AcceptMessages)(IMSIMContactView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_AcceptMessages)(IMSIMContactView *This,VARIANT_BOOL newVal);
    END_INTERFACE
  } IMSIMContactViewVtbl;
  interface IMSIMContactView {
    CONST_VTBL struct IMSIMContactViewVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSIMContactView_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSIMContactView_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSIMContactView_Release(This) (This)->lpVtbl->Release(This)
#define IMSIMContactView_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSIMContactView_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSIMContactView_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSIMContactView_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSIMContactView_SetService(This,pService,pApp) (This)->lpVtbl->SetService(This,pService,pApp)
#define IMSIMContactView_get_Service(This,pVal) (This)->lpVtbl->get_Service(This,pVal)
#define IMSIMContactView_put_Service(This,newVal) (This)->lpVtbl->put_Service(This,newVal)
#define IMSIMContactView_get_HasService(This,pVal) (This)->lpVtbl->get_HasService(This,pVal)
#define IMSIMContactView_get_AutoLogon(This,pVal) (This)->lpVtbl->get_AutoLogon(This,pVal)
#define IMSIMContactView_put_AutoLogon(This,newVal) (This)->lpVtbl->put_AutoLogon(This,newVal)
#define IMSIMContactView_get_LoggedOn(This,pVal) (This)->lpVtbl->get_LoggedOn(This,pVal)
#define IMSIMContactView_Logon(This,bstrAddress,bstrName,bstrPassword,bstrDomain) (This)->lpVtbl->Logon(This,bstrAddress,bstrName,bstrPassword,bstrDomain)
#define IMSIMContactView_Logoff(This) (This)->lpVtbl->Logoff(This)
#define IMSIMContactView_GetLocalState(This,pvarState,pvarDescription,pvarData) (This)->lpVtbl->GetLocalState(This,pvarState,pvarDescription,pvarData)
#define IMSIMContactView_SetLocalState(This,lState,varDescription,varData) (This)->lpVtbl->SetLocalState(This,lState,varDescription,varData)
#define IMSIMContactView_Add(This,vUser) (This)->lpVtbl->Add(This,vUser)
#define IMSIMContactView_Remove(This,vUser) (This)->lpVtbl->Remove(This,vUser)
#define IMSIMContactView_get_List(This,pvarList) (This)->lpVtbl->get_List(This,pvarList)
#define IMSIMContactView_put_List(This,varList) (This)->lpVtbl->put_List(This,varList)
#define IMSIMContactView_AddMenuItem(This,bstrItem,lPosition,plCommand) (This)->lpVtbl->AddMenuItem(This,bstrItem,lPosition,plCommand)
#define IMSIMContactView_get_SelectedMenuOptions(This,pVal) (This)->lpVtbl->get_SelectedMenuOptions(This,pVal)
#define IMSIMContactView_IMSelected(This) (This)->lpVtbl->IMSelected(This)
#define IMSIMContactView_EMailSelected(This) (This)->lpVtbl->EMailSelected(This)
#define IMSIMContactView_InviteSelected(This) (This)->lpVtbl->InviteSelected(This)
#define IMSIMContactView_BlockSelected(This) (This)->lpVtbl->BlockSelected(This)
#define IMSIMContactView_UnblockSelected(This) (This)->lpVtbl->UnblockSelected(This)
#define IMSIMContactView_get_ExtentWidth(This,pX) (This)->lpVtbl->get_ExtentWidth(This,pX)
#define IMSIMContactView_get_ExtentHeight(This,pY) (This)->lpVtbl->get_ExtentHeight(This,pY)
#define IMSIMContactView_get_HotTracking(This,pVal) (This)->lpVtbl->get_HotTracking(This,pVal)
#define IMSIMContactView_put_HotTracking(This,newVal) (This)->lpVtbl->put_HotTracking(This,newVal)
#define IMSIMContactView_get_AllowCollapse(This,pVal) (This)->lpVtbl->get_AllowCollapse(This,pVal)
#define IMSIMContactView_put_AllowCollapse(This,newVal) (This)->lpVtbl->put_AllowCollapse(This,newVal)
#define IMSIMContactView_get_ShowSelectAlways(This,pVal) (This)->lpVtbl->get_ShowSelectAlways(This,pVal)
#define IMSIMContactView_put_ShowSelectAlways(This,newVal) (This)->lpVtbl->put_ShowSelectAlways(This,newVal)
#define IMSIMContactView_get_OnlineRootLabel(This,pbstrLabel) (This)->lpVtbl->get_OnlineRootLabel(This,pbstrLabel)
#define IMSIMContactView_put_OnlineRootLabel(This,bstrLabel) (This)->lpVtbl->put_OnlineRootLabel(This,bstrLabel)
#define IMSIMContactView_get_OfflineRootLabel(This,pbstrLabel) (This)->lpVtbl->get_OfflineRootLabel(This,pbstrLabel)
#define IMSIMContactView_put_OfflineRootLabel(This,bstrLabel) (This)->lpVtbl->put_OfflineRootLabel(This,bstrLabel)
#define IMSIMContactView_get_Window(This,pVal) (This)->lpVtbl->get_Window(This,pVal)
#define IMSIMContactView_get_ShowLogonButton(This,pVal) (This)->lpVtbl->get_ShowLogonButton(This,pVal)
#define IMSIMContactView_put_ShowLogonButton(This,newVal) (This)->lpVtbl->put_ShowLogonButton(This,newVal)
#define IMSIMContactView_get_OnlineCollapsed(This,pVal) (This)->lpVtbl->get_OnlineCollapsed(This,pVal)
#define IMSIMContactView_put_OnlineCollapsed(This,newVal) (This)->lpVtbl->put_OnlineCollapsed(This,newVal)
#define IMSIMContactView_get_OfflineCollapsed(This,pVal) (This)->lpVtbl->get_OfflineCollapsed(This,pVal)
#define IMSIMContactView_put_OfflineCollapsed(This,newVal) (This)->lpVtbl->put_OfflineCollapsed(This,newVal)
#define IMSIMContactView_get_Group(This,pVal) (This)->lpVtbl->get_Group(This,pVal)
#define IMSIMContactView_put_Group(This,newVal) (This)->lpVtbl->put_Group(This,newVal)
#define IMSIMContactView_get_FilterOffline(This,pVal) (This)->lpVtbl->get_FilterOffline(This,pVal)
#define IMSIMContactView_put_FilterOffline(This,newVal) (This)->lpVtbl->put_FilterOffline(This,newVal)
#define IMSIMContactView_get_ShowIcons(This,pVal) (This)->lpVtbl->get_ShowIcons(This,pVal)
#define IMSIMContactView_put_ShowIcons(This,newVal) (This)->lpVtbl->put_ShowIcons(This,newVal)
#define IMSIMContactView_get_AcceptMessages(This,pVal) (This)->lpVtbl->get_AcceptMessages(This,pVal)
#define IMSIMContactView_put_AcceptMessages(This,newVal) (This)->lpVtbl->put_AcceptMessages(This,newVal)
#endif
#endif
  HRESULT WINAPI IMSIMContactView_Add_Proxy(IMSIMContactView *This,VARIANT vUser);
  void __RPC_STUB IMSIMContactView_Add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_Remove_Proxy(IMSIMContactView *This,VARIANT vUser);
  void __RPC_STUB IMSIMContactView_Remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_List_Proxy(IMSIMContactView *This,VARIANT *pvarList);
  void __RPC_STUB IMSIMContactView_get_List_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_put_List_Proxy(IMSIMContactView *This,VARIANT varList);
  void __RPC_STUB IMSIMContactView_put_List_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_AddMenuItem_Proxy(IMSIMContactView *This,BSTR bstrItem,long lPosition,long *plCommand);
  void __RPC_STUB IMSIMContactView_AddMenuItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_SelectedMenuOptions_Proxy(IMSIMContactView *This,long *pVal);
  void __RPC_STUB IMSIMContactView_get_SelectedMenuOptions_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_IMSelected_Proxy(IMSIMContactView *This);
  void __RPC_STUB IMSIMContactView_IMSelected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_EMailSelected_Proxy(IMSIMContactView *This);
  void __RPC_STUB IMSIMContactView_EMailSelected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_InviteSelected_Proxy(IMSIMContactView *This);
  void __RPC_STUB IMSIMContactView_InviteSelected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_BlockSelected_Proxy(IMSIMContactView *This);
  void __RPC_STUB IMSIMContactView_BlockSelected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_UnblockSelected_Proxy(IMSIMContactView *This);
  void __RPC_STUB IMSIMContactView_UnblockSelected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_ExtentWidth_Proxy(IMSIMContactView *This,long *pX);
  void __RPC_STUB IMSIMContactView_get_ExtentWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_ExtentHeight_Proxy(IMSIMContactView *This,long *pY);
  void __RPC_STUB IMSIMContactView_get_ExtentHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_HotTracking_Proxy(IMSIMContactView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMContactView_get_HotTracking_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_put_HotTracking_Proxy(IMSIMContactView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMContactView_put_HotTracking_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_AllowCollapse_Proxy(IMSIMContactView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMContactView_get_AllowCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_put_AllowCollapse_Proxy(IMSIMContactView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMContactView_put_AllowCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_ShowSelectAlways_Proxy(IMSIMContactView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMContactView_get_ShowSelectAlways_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_put_ShowSelectAlways_Proxy(IMSIMContactView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMContactView_put_ShowSelectAlways_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_OnlineRootLabel_Proxy(IMSIMContactView *This,BSTR *pbstrLabel);
  void __RPC_STUB IMSIMContactView_get_OnlineRootLabel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_put_OnlineRootLabel_Proxy(IMSIMContactView *This,BSTR bstrLabel);
  void __RPC_STUB IMSIMContactView_put_OnlineRootLabel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_OfflineRootLabel_Proxy(IMSIMContactView *This,BSTR *pbstrLabel);
  void __RPC_STUB IMSIMContactView_get_OfflineRootLabel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_put_OfflineRootLabel_Proxy(IMSIMContactView *This,BSTR bstrLabel);
  void __RPC_STUB IMSIMContactView_put_OfflineRootLabel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_Window_Proxy(IMSIMContactView *This,long *pVal);
  void __RPC_STUB IMSIMContactView_get_Window_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_ShowLogonButton_Proxy(IMSIMContactView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMContactView_get_ShowLogonButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_put_ShowLogonButton_Proxy(IMSIMContactView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMContactView_put_ShowLogonButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_OnlineCollapsed_Proxy(IMSIMContactView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMContactView_get_OnlineCollapsed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_put_OnlineCollapsed_Proxy(IMSIMContactView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMContactView_put_OnlineCollapsed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_OfflineCollapsed_Proxy(IMSIMContactView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMContactView_get_OfflineCollapsed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_put_OfflineCollapsed_Proxy(IMSIMContactView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMContactView_put_OfflineCollapsed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_Group_Proxy(IMSIMContactView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMContactView_get_Group_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_put_Group_Proxy(IMSIMContactView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMContactView_put_Group_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_FilterOffline_Proxy(IMSIMContactView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMContactView_get_FilterOffline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_put_FilterOffline_Proxy(IMSIMContactView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMContactView_put_FilterOffline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_ShowIcons_Proxy(IMSIMContactView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMContactView_get_ShowIcons_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_put_ShowIcons_Proxy(IMSIMContactView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMContactView_put_ShowIcons_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_get_AcceptMessages_Proxy(IMSIMContactView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMContactView_get_AcceptMessages_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactView_put_AcceptMessages_Proxy(IMSIMContactView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMContactView_put_AcceptMessages_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DMSIMContactViewEvents_DISPINTERFACE_DEFINED__
#define __DMSIMContactViewEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DMSIMContactViewEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DMSIMContactViewEvents : public IDispatch {
  };
#else
  typedef struct DMSIMContactViewEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DMSIMContactViewEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DMSIMContactViewEvents *This);
      ULONG (WINAPI *Release)(DMSIMContactViewEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DMSIMContactViewEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DMSIMContactViewEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DMSIMContactViewEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DMSIMContactViewEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DMSIMContactViewEventsVtbl;
  interface DMSIMContactViewEvents {
    CONST_VTBL struct DMSIMContactViewEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DMSIMContactViewEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DMSIMContactViewEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DMSIMContactViewEvents_Release(This) (This)->lpVtbl->Release(This)
#define DMSIMContactViewEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DMSIMContactViewEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DMSIMContactViewEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DMSIMContactViewEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IMSIMMessageView_INTERFACE_DEFINED__
#define __IMSIMMessageView_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSIMMessageView;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSIMMessageView : public _IUseIMBase {
  public:
    virtual HRESULT WINAPI get_Window(long *phwnd) = 0;
    virtual HRESULT WINAPI put_Appearance(short appearance) = 0;
    virtual HRESULT WINAPI get_Appearance(short *pappearance) = 0;
    virtual HRESULT WINAPI get_ShowParticipants(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_ShowParticipants(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_ShowMembers(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_ShowMembers(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_ShowAvailable(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_ShowAvailable(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_AvailableList(VARIANT *pVal) = 0;
    virtual HRESULT WINAPI put_AvailableList(VARIANT newVal) = 0;
    virtual HRESULT WINAPI get_ShowMessageHistory(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_ShowMessageHistory(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_ShowEdit(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_ShowEdit(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_HideStatus(VARIANT_BOOL *pVal) = 0;
    virtual HRESULT WINAPI put_HideStatus(VARIANT_BOOL newVal) = 0;
    virtual HRESULT WINAPI get_MessageHistory(BSTR *pVal) = 0;
    virtual HRESULT WINAPI get_StatusText(BSTR *pVal) = 0;
    virtual HRESULT WINAPI put_StatusText(BSTR newVal) = 0;
    virtual HRESULT WINAPI get_MessageText(BSTR *pVal) = 0;
    virtual HRESULT WINAPI put_MessageText(BSTR newVal) = 0;
    virtual HRESULT WINAPI Invite(VARIANT varContact) = 0;
    virtual HRESULT WINAPI EndSession(void) = 0;
    virtual HRESULT WINAPI AddToAvailable(VARIANT varContact) = 0;
    virtual HRESULT WINAPI RemoveFromAvailable(VARIANT varContact) = 0;
    virtual HRESULT WINAPI InviteNetMeeting(void) = 0;
    virtual HRESULT WINAPI NetMeetingInvite(IDispatch *pIMSession,IDispatch *pContact,long lInviteCookie) = 0;
    virtual HRESULT WINAPI get_SourceURL(BSTR *pVal) = 0;
    virtual HRESULT WINAPI put_SourceURL(BSTR newVal) = 0;
    virtual HRESULT WINAPI get_InSession(VARIANT_BOOL *pVal) = 0;
  };
#else
  typedef struct IMSIMMessageViewVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSIMMessageView *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSIMMessageView *This);
      ULONG (WINAPI *Release)(IMSIMMessageView *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSIMMessageView *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSIMMessageView *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSIMMessageView *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSIMMessageView *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *SetService)(IMSIMMessageView *This,IDispatch *pService,IDispatch *pApp);
      HRESULT (WINAPI *get_Service)(IMSIMMessageView *This,short *pVal);
      HRESULT (WINAPI *put_Service)(IMSIMMessageView *This,short newVal);
      HRESULT (WINAPI *get_HasService)(IMSIMMessageView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *get_AutoLogon)(IMSIMMessageView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_AutoLogon)(IMSIMMessageView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_LoggedOn)(IMSIMMessageView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *Logon)(IMSIMMessageView *This,BSTR bstrAddress,BSTR bstrName,BSTR bstrPassword,BSTR bstrDomain);
      HRESULT (WINAPI *Logoff)(IMSIMMessageView *This);
      HRESULT (WINAPI *GetLocalState)(IMSIMMessageView *This,VARIANT *pvarState,VARIANT *pvarDescription,VARIANT *pvarData);
      HRESULT (WINAPI *SetLocalState)(IMSIMMessageView *This,long lState,VARIANT varDescription,VARIANT varData);
      HRESULT (WINAPI *get_Window)(IMSIMMessageView *This,long *phwnd);
      HRESULT (WINAPI *put_Appearance)(IMSIMMessageView *This,short appearance);
      HRESULT (WINAPI *get_Appearance)(IMSIMMessageView *This,short *pappearance);
      HRESULT (WINAPI *get_ShowParticipants)(IMSIMMessageView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_ShowParticipants)(IMSIMMessageView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_ShowMembers)(IMSIMMessageView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_ShowMembers)(IMSIMMessageView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_ShowAvailable)(IMSIMMessageView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_ShowAvailable)(IMSIMMessageView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_AvailableList)(IMSIMMessageView *This,VARIANT *pVal);
      HRESULT (WINAPI *put_AvailableList)(IMSIMMessageView *This,VARIANT newVal);
      HRESULT (WINAPI *get_ShowMessageHistory)(IMSIMMessageView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_ShowMessageHistory)(IMSIMMessageView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_ShowEdit)(IMSIMMessageView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_ShowEdit)(IMSIMMessageView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_HideStatus)(IMSIMMessageView *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_HideStatus)(IMSIMMessageView *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_MessageHistory)(IMSIMMessageView *This,BSTR *pVal);
      HRESULT (WINAPI *get_StatusText)(IMSIMMessageView *This,BSTR *pVal);
      HRESULT (WINAPI *put_StatusText)(IMSIMMessageView *This,BSTR newVal);
      HRESULT (WINAPI *get_MessageText)(IMSIMMessageView *This,BSTR *pVal);
      HRESULT (WINAPI *put_MessageText)(IMSIMMessageView *This,BSTR newVal);
      HRESULT (WINAPI *Invite)(IMSIMMessageView *This,VARIANT varContact);
      HRESULT (WINAPI *EndSession)(IMSIMMessageView *This);
      HRESULT (WINAPI *AddToAvailable)(IMSIMMessageView *This,VARIANT varContact);
      HRESULT (WINAPI *RemoveFromAvailable)(IMSIMMessageView *This,VARIANT varContact);
      HRESULT (WINAPI *InviteNetMeeting)(IMSIMMessageView *This);
      HRESULT (WINAPI *NetMeetingInvite)(IMSIMMessageView *This,IDispatch *pIMSession,IDispatch *pContact,long lInviteCookie);
      HRESULT (WINAPI *get_SourceURL)(IMSIMMessageView *This,BSTR *pVal);
      HRESULT (WINAPI *put_SourceURL)(IMSIMMessageView *This,BSTR newVal);
      HRESULT (WINAPI *get_InSession)(IMSIMMessageView *This,VARIANT_BOOL *pVal);
    END_INTERFACE
  } IMSIMMessageViewVtbl;
  interface IMSIMMessageView {
    CONST_VTBL struct IMSIMMessageViewVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSIMMessageView_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSIMMessageView_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSIMMessageView_Release(This) (This)->lpVtbl->Release(This)
#define IMSIMMessageView_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSIMMessageView_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSIMMessageView_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSIMMessageView_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSIMMessageView_SetService(This,pService,pApp) (This)->lpVtbl->SetService(This,pService,pApp)
#define IMSIMMessageView_get_Service(This,pVal) (This)->lpVtbl->get_Service(This,pVal)
#define IMSIMMessageView_put_Service(This,newVal) (This)->lpVtbl->put_Service(This,newVal)
#define IMSIMMessageView_get_HasService(This,pVal) (This)->lpVtbl->get_HasService(This,pVal)
#define IMSIMMessageView_get_AutoLogon(This,pVal) (This)->lpVtbl->get_AutoLogon(This,pVal)
#define IMSIMMessageView_put_AutoLogon(This,newVal) (This)->lpVtbl->put_AutoLogon(This,newVal)
#define IMSIMMessageView_get_LoggedOn(This,pVal) (This)->lpVtbl->get_LoggedOn(This,pVal)
#define IMSIMMessageView_Logon(This,bstrAddress,bstrName,bstrPassword,bstrDomain) (This)->lpVtbl->Logon(This,bstrAddress,bstrName,bstrPassword,bstrDomain)
#define IMSIMMessageView_Logoff(This) (This)->lpVtbl->Logoff(This)
#define IMSIMMessageView_GetLocalState(This,pvarState,pvarDescription,pvarData) (This)->lpVtbl->GetLocalState(This,pvarState,pvarDescription,pvarData)
#define IMSIMMessageView_SetLocalState(This,lState,varDescription,varData) (This)->lpVtbl->SetLocalState(This,lState,varDescription,varData)
#define IMSIMMessageView_get_Window(This,phwnd) (This)->lpVtbl->get_Window(This,phwnd)
#define IMSIMMessageView_put_Appearance(This,appearance) (This)->lpVtbl->put_Appearance(This,appearance)
#define IMSIMMessageView_get_Appearance(This,pappearance) (This)->lpVtbl->get_Appearance(This,pappearance)
#define IMSIMMessageView_get_ShowParticipants(This,pVal) (This)->lpVtbl->get_ShowParticipants(This,pVal)
#define IMSIMMessageView_put_ShowParticipants(This,newVal) (This)->lpVtbl->put_ShowParticipants(This,newVal)
#define IMSIMMessageView_get_ShowMembers(This,pVal) (This)->lpVtbl->get_ShowMembers(This,pVal)
#define IMSIMMessageView_put_ShowMembers(This,newVal) (This)->lpVtbl->put_ShowMembers(This,newVal)
#define IMSIMMessageView_get_ShowAvailable(This,pVal) (This)->lpVtbl->get_ShowAvailable(This,pVal)
#define IMSIMMessageView_put_ShowAvailable(This,newVal) (This)->lpVtbl->put_ShowAvailable(This,newVal)
#define IMSIMMessageView_get_AvailableList(This,pVal) (This)->lpVtbl->get_AvailableList(This,pVal)
#define IMSIMMessageView_put_AvailableList(This,newVal) (This)->lpVtbl->put_AvailableList(This,newVal)
#define IMSIMMessageView_get_ShowMessageHistory(This,pVal) (This)->lpVtbl->get_ShowMessageHistory(This,pVal)
#define IMSIMMessageView_put_ShowMessageHistory(This,newVal) (This)->lpVtbl->put_ShowMessageHistory(This,newVal)
#define IMSIMMessageView_get_ShowEdit(This,pVal) (This)->lpVtbl->get_ShowEdit(This,pVal)
#define IMSIMMessageView_put_ShowEdit(This,newVal) (This)->lpVtbl->put_ShowEdit(This,newVal)
#define IMSIMMessageView_get_HideStatus(This,pVal) (This)->lpVtbl->get_HideStatus(This,pVal)
#define IMSIMMessageView_put_HideStatus(This,newVal) (This)->lpVtbl->put_HideStatus(This,newVal)
#define IMSIMMessageView_get_MessageHistory(This,pVal) (This)->lpVtbl->get_MessageHistory(This,pVal)
#define IMSIMMessageView_get_StatusText(This,pVal) (This)->lpVtbl->get_StatusText(This,pVal)
#define IMSIMMessageView_put_StatusText(This,newVal) (This)->lpVtbl->put_StatusText(This,newVal)
#define IMSIMMessageView_get_MessageText(This,pVal) (This)->lpVtbl->get_MessageText(This,pVal)
#define IMSIMMessageView_put_MessageText(This,newVal) (This)->lpVtbl->put_MessageText(This,newVal)
#define IMSIMMessageView_Invite(This,varContact) (This)->lpVtbl->Invite(This,varContact)
#define IMSIMMessageView_EndSession(This) (This)->lpVtbl->EndSession(This)
#define IMSIMMessageView_AddToAvailable(This,varContact) (This)->lpVtbl->AddToAvailable(This,varContact)
#define IMSIMMessageView_RemoveFromAvailable(This,varContact) (This)->lpVtbl->RemoveFromAvailable(This,varContact)
#define IMSIMMessageView_InviteNetMeeting(This) (This)->lpVtbl->InviteNetMeeting(This)
#define IMSIMMessageView_NetMeetingInvite(This,pIMSession,pContact,lInviteCookie) (This)->lpVtbl->NetMeetingInvite(This,pIMSession,pContact,lInviteCookie)
#define IMSIMMessageView_get_SourceURL(This,pVal) (This)->lpVtbl->get_SourceURL(This,pVal)
#define IMSIMMessageView_put_SourceURL(This,newVal) (This)->lpVtbl->put_SourceURL(This,newVal)
#define IMSIMMessageView_get_InSession(This,pVal) (This)->lpVtbl->get_InSession(This,pVal)
#endif
#endif
  HRESULT WINAPI IMSIMMessageView_get_Window_Proxy(IMSIMMessageView *This,long *phwnd);
  void __RPC_STUB IMSIMMessageView_get_Window_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_put_Appearance_Proxy(IMSIMMessageView *This,short appearance);
  void __RPC_STUB IMSIMMessageView_put_Appearance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_get_Appearance_Proxy(IMSIMMessageView *This,short *pappearance);
  void __RPC_STUB IMSIMMessageView_get_Appearance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_get_ShowParticipants_Proxy(IMSIMMessageView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMMessageView_get_ShowParticipants_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_put_ShowParticipants_Proxy(IMSIMMessageView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMMessageView_put_ShowParticipants_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_get_ShowMembers_Proxy(IMSIMMessageView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMMessageView_get_ShowMembers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_put_ShowMembers_Proxy(IMSIMMessageView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMMessageView_put_ShowMembers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_get_ShowAvailable_Proxy(IMSIMMessageView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMMessageView_get_ShowAvailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_put_ShowAvailable_Proxy(IMSIMMessageView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMMessageView_put_ShowAvailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_get_AvailableList_Proxy(IMSIMMessageView *This,VARIANT *pVal);
  void __RPC_STUB IMSIMMessageView_get_AvailableList_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_put_AvailableList_Proxy(IMSIMMessageView *This,VARIANT newVal);
  void __RPC_STUB IMSIMMessageView_put_AvailableList_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_get_ShowMessageHistory_Proxy(IMSIMMessageView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMMessageView_get_ShowMessageHistory_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_put_ShowMessageHistory_Proxy(IMSIMMessageView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMMessageView_put_ShowMessageHistory_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_get_ShowEdit_Proxy(IMSIMMessageView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMMessageView_get_ShowEdit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_put_ShowEdit_Proxy(IMSIMMessageView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMMessageView_put_ShowEdit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_get_HideStatus_Proxy(IMSIMMessageView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMMessageView_get_HideStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_put_HideStatus_Proxy(IMSIMMessageView *This,VARIANT_BOOL newVal);
  void __RPC_STUB IMSIMMessageView_put_HideStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_get_MessageHistory_Proxy(IMSIMMessageView *This,BSTR *pVal);
  void __RPC_STUB IMSIMMessageView_get_MessageHistory_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_get_StatusText_Proxy(IMSIMMessageView *This,BSTR *pVal);
  void __RPC_STUB IMSIMMessageView_get_StatusText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_put_StatusText_Proxy(IMSIMMessageView *This,BSTR newVal);
  void __RPC_STUB IMSIMMessageView_put_StatusText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_get_MessageText_Proxy(IMSIMMessageView *This,BSTR *pVal);
  void __RPC_STUB IMSIMMessageView_get_MessageText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_put_MessageText_Proxy(IMSIMMessageView *This,BSTR newVal);
  void __RPC_STUB IMSIMMessageView_put_MessageText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_Invite_Proxy(IMSIMMessageView *This,VARIANT varContact);
  void __RPC_STUB IMSIMMessageView_Invite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_EndSession_Proxy(IMSIMMessageView *This);
  void __RPC_STUB IMSIMMessageView_EndSession_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_AddToAvailable_Proxy(IMSIMMessageView *This,VARIANT varContact);
  void __RPC_STUB IMSIMMessageView_AddToAvailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_RemoveFromAvailable_Proxy(IMSIMMessageView *This,VARIANT varContact);
  void __RPC_STUB IMSIMMessageView_RemoveFromAvailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_InviteNetMeeting_Proxy(IMSIMMessageView *This);
  void __RPC_STUB IMSIMMessageView_InviteNetMeeting_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_NetMeetingInvite_Proxy(IMSIMMessageView *This,IDispatch *pIMSession,IDispatch *pContact,long lInviteCookie);
  void __RPC_STUB IMSIMMessageView_NetMeetingInvite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_get_SourceURL_Proxy(IMSIMMessageView *This,BSTR *pVal);
  void __RPC_STUB IMSIMMessageView_get_SourceURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_put_SourceURL_Proxy(IMSIMMessageView *This,BSTR newVal);
  void __RPC_STUB IMSIMMessageView_put_SourceURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMMessageView_get_InSession_Proxy(IMSIMMessageView *This,VARIANT_BOOL *pVal);
  void __RPC_STUB IMSIMMessageView_get_InSession_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DMSIMMessageViewEvents_DISPINTERFACE_DEFINED__
#define __DMSIMMessageViewEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DMSIMMessageViewEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DMSIMMessageViewEvents : public IDispatch {
  };
#else
  typedef struct DMSIMMessageViewEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DMSIMMessageViewEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DMSIMMessageViewEvents *This);
      ULONG (WINAPI *Release)(DMSIMMessageViewEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DMSIMMessageViewEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DMSIMMessageViewEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DMSIMMessageViewEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DMSIMMessageViewEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DMSIMMessageViewEventsVtbl;
  interface DMSIMMessageViewEvents {
    CONST_VTBL struct DMSIMMessageViewEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DMSIMMessageViewEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DMSIMMessageViewEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DMSIMMessageViewEvents_Release(This) (This)->lpVtbl->Release(This)
#define DMSIMMessageViewEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DMSIMMessageViewEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DMSIMMessageViewEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DMSIMMessageViewEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_MSIMContactView;
#ifdef __cplusplus
  class MSIMContactView;
#endif
  EXTERN_C const CLSID CLSID_MSIMMessageView;
#ifdef __cplusplus
  class MSIMMessageView;
#endif

#ifndef __IIMSafeContact_INTERFACE_DEFINED__
#define __IIMSafeContact_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IIMSafeContact;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IIMSafeContact : public IDispatch {
  public:
    virtual HRESULT WINAPI get_LogonName(BSTR *pbstrLogonName) = 0;
    virtual HRESULT WINAPI get_FriendlyName(BSTR *pbstrFriendlyName) = 0;
    virtual HRESULT WINAPI get_EmailAddress(BSTR *pbstrEmailAddress) = 0;
    virtual HRESULT WINAPI get_State(long *plState) = 0;
    virtual HRESULT WINAPI _SetBaseContact(IDispatch *pUnk) = 0;
    virtual HRESULT WINAPI LaunchInstantMessage(void) = 0;
    virtual HRESULT WINAPI LaunchEmail(void) = 0;
    virtual HRESULT WINAPI LaunchNetMeeting(void) = 0;
  };
#else
  typedef struct IIMSafeContactVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IIMSafeContact *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IIMSafeContact *This);
      ULONG (WINAPI *Release)(IIMSafeContact *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IIMSafeContact *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IIMSafeContact *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IIMSafeContact *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IIMSafeContact *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_LogonName)(IIMSafeContact *This,BSTR *pbstrLogonName);
      HRESULT (WINAPI *get_FriendlyName)(IIMSafeContact *This,BSTR *pbstrFriendlyName);
      HRESULT (WINAPI *get_EmailAddress)(IIMSafeContact *This,BSTR *pbstrEmailAddress);
      HRESULT (WINAPI *get_State)(IIMSafeContact *This,long *plState);
      HRESULT (WINAPI *_SetBaseContact)(IIMSafeContact *This,IDispatch *pUnk);
      HRESULT (WINAPI *LaunchInstantMessage)(IIMSafeContact *This);
      HRESULT (WINAPI *LaunchEmail)(IIMSafeContact *This);
      HRESULT (WINAPI *LaunchNetMeeting)(IIMSafeContact *This);
    END_INTERFACE
  } IIMSafeContactVtbl;
  interface IIMSafeContact {
    CONST_VTBL struct IIMSafeContactVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IIMSafeContact_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IIMSafeContact_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IIMSafeContact_Release(This) (This)->lpVtbl->Release(This)
#define IIMSafeContact_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IIMSafeContact_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IIMSafeContact_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IIMSafeContact_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IIMSafeContact_get_LogonName(This,pbstrLogonName) (This)->lpVtbl->get_LogonName(This,pbstrLogonName)
#define IIMSafeContact_get_FriendlyName(This,pbstrFriendlyName) (This)->lpVtbl->get_FriendlyName(This,pbstrFriendlyName)
#define IIMSafeContact_get_EmailAddress(This,pbstrEmailAddress) (This)->lpVtbl->get_EmailAddress(This,pbstrEmailAddress)
#define IIMSafeContact_get_State(This,plState) (This)->lpVtbl->get_State(This,plState)
#define IIMSafeContact__SetBaseContact(This,pUnk) (This)->lpVtbl->_SetBaseContact(This,pUnk)
#define IIMSafeContact_LaunchInstantMessage(This) (This)->lpVtbl->LaunchInstantMessage(This)
#define IIMSafeContact_LaunchEmail(This) (This)->lpVtbl->LaunchEmail(This)
#define IIMSafeContact_LaunchNetMeeting(This) (This)->lpVtbl->LaunchNetMeeting(This)
#endif
#endif
  HRESULT WINAPI IIMSafeContact_get_LogonName_Proxy(IIMSafeContact *This,BSTR *pbstrLogonName);
  void __RPC_STUB IIMSafeContact_get_LogonName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IIMSafeContact_get_FriendlyName_Proxy(IIMSafeContact *This,BSTR *pbstrFriendlyName);
  void __RPC_STUB IIMSafeContact_get_FriendlyName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IIMSafeContact_get_EmailAddress_Proxy(IIMSafeContact *This,BSTR *pbstrEmailAddress);
  void __RPC_STUB IIMSafeContact_get_EmailAddress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IIMSafeContact_get_State_Proxy(IIMSafeContact *This,long *plState);
  void __RPC_STUB IIMSafeContact_get_State_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IIMSafeContact__SetBaseContact_Proxy(IIMSafeContact *This,IDispatch *pUnk);
  void __RPC_STUB IIMSafeContact__SetBaseContact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IIMSafeContact_LaunchInstantMessage_Proxy(IIMSafeContact *This);
  void __RPC_STUB IIMSafeContact_LaunchInstantMessage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IIMSafeContact_LaunchEmail_Proxy(IIMSafeContact *This);
  void __RPC_STUB IIMSafeContact_LaunchEmail_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IIMSafeContact_LaunchNetMeeting_Proxy(IIMSafeContact *This);
  void __RPC_STUB IIMSafeContact_LaunchNetMeeting_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMSIMContactList_INTERFACE_DEFINED__
#define __IMSIMContactList_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMSIMContactList;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMSIMContactList : public _IUseIMBase {
  public:
    virtual HRESULT WINAPI get_List(VARIANT *pvarList) = 0;
    virtual HRESULT WINAPI put_List(VARIANT varList) = 0;
    virtual HRESULT WINAPI Add(VARIANT vUser) = 0;
    virtual HRESULT WINAPI Remove(VARIANT vUser) = 0;
    virtual HRESULT WINAPI get_SelectedMenuOptions(long lRow,long *pVal) = 0;
    virtual HRESULT WINAPI InstantMessage(long lRow) = 0;
    virtual HRESULT WINAPI EMail(long lRow) = 0;
    virtual HRESULT WINAPI Invite(long lRow) = 0;
    virtual HRESULT WINAPI Block(long lRow) = 0;
    virtual HRESULT WINAPI Unblock(long lRow) = 0;
    virtual HRESULT WINAPI get_Count(long *pnCount) = 0;
    virtual HRESULT WINAPI get_Item(VARIANT Var,VARIANT *pSafeContact) = 0;
    virtual HRESULT WINAPI get__NewEnum(IUnknown **ppunkEnum) = 0;
    virtual HRESULT WINAPI get_LocalState(long *pnState) = 0;
    virtual HRESULT WINAPI put_LocalState(long nState) = 0;
    virtual HRESULT WINAPI get_LocalLogonName(BSTR *pval) = 0;
  };
#else
  typedef struct IMSIMContactListVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMSIMContactList *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMSIMContactList *This);
      ULONG (WINAPI *Release)(IMSIMContactList *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IMSIMContactList *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IMSIMContactList *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IMSIMContactList *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IMSIMContactList *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *SetService)(IMSIMContactList *This,IDispatch *pService,IDispatch *pApp);
      HRESULT (WINAPI *get_Service)(IMSIMContactList *This,short *pVal);
      HRESULT (WINAPI *put_Service)(IMSIMContactList *This,short newVal);
      HRESULT (WINAPI *get_HasService)(IMSIMContactList *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *get_AutoLogon)(IMSIMContactList *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *put_AutoLogon)(IMSIMContactList *This,VARIANT_BOOL newVal);
      HRESULT (WINAPI *get_LoggedOn)(IMSIMContactList *This,VARIANT_BOOL *pVal);
      HRESULT (WINAPI *Logon)(IMSIMContactList *This,BSTR bstrAddress,BSTR bstrName,BSTR bstrPassword,BSTR bstrDomain);
      HRESULT (WINAPI *Logoff)(IMSIMContactList *This);
      HRESULT (WINAPI *GetLocalState)(IMSIMContactList *This,VARIANT *pvarState,VARIANT *pvarDescription,VARIANT *pvarData);
      HRESULT (WINAPI *SetLocalState)(IMSIMContactList *This,long lState,VARIANT varDescription,VARIANT varData);
      HRESULT (WINAPI *get_List)(IMSIMContactList *This,VARIANT *pvarList);
      HRESULT (WINAPI *put_List)(IMSIMContactList *This,VARIANT varList);
      HRESULT (WINAPI *Add)(IMSIMContactList *This,VARIANT vUser);
      HRESULT (WINAPI *Remove)(IMSIMContactList *This,VARIANT vUser);
      HRESULT (WINAPI *get_SelectedMenuOptions)(IMSIMContactList *This,long lRow,long *pVal);
      HRESULT (WINAPI *InstantMessage)(IMSIMContactList *This,long lRow);
      HRESULT (WINAPI *EMail)(IMSIMContactList *This,long lRow);
      HRESULT (WINAPI *Invite)(IMSIMContactList *This,long lRow);
      HRESULT (WINAPI *Block)(IMSIMContactList *This,long lRow);
      HRESULT (WINAPI *Unblock)(IMSIMContactList *This,long lRow);
      HRESULT (WINAPI *get_Count)(IMSIMContactList *This,long *pnCount);
      HRESULT (WINAPI *get_Item)(IMSIMContactList *This,VARIANT Var,VARIANT *pSafeContact);
      HRESULT (WINAPI *get__NewEnum)(IMSIMContactList *This,IUnknown **ppunkEnum);
      HRESULT (WINAPI *get_LocalState)(IMSIMContactList *This,long *pnState);
      HRESULT (WINAPI *put_LocalState)(IMSIMContactList *This,long nState);
      HRESULT (WINAPI *get_LocalLogonName)(IMSIMContactList *This,BSTR *pval);
    END_INTERFACE
  } IMSIMContactListVtbl;
  interface IMSIMContactList {
    CONST_VTBL struct IMSIMContactListVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMSIMContactList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMSIMContactList_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMSIMContactList_Release(This) (This)->lpVtbl->Release(This)
#define IMSIMContactList_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMSIMContactList_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMSIMContactList_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMSIMContactList_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMSIMContactList_SetService(This,pService,pApp) (This)->lpVtbl->SetService(This,pService,pApp)
#define IMSIMContactList_get_Service(This,pVal) (This)->lpVtbl->get_Service(This,pVal)
#define IMSIMContactList_put_Service(This,newVal) (This)->lpVtbl->put_Service(This,newVal)
#define IMSIMContactList_get_HasService(This,pVal) (This)->lpVtbl->get_HasService(This,pVal)
#define IMSIMContactList_get_AutoLogon(This,pVal) (This)->lpVtbl->get_AutoLogon(This,pVal)
#define IMSIMContactList_put_AutoLogon(This,newVal) (This)->lpVtbl->put_AutoLogon(This,newVal)
#define IMSIMContactList_get_LoggedOn(This,pVal) (This)->lpVtbl->get_LoggedOn(This,pVal)
#define IMSIMContactList_Logon(This,bstrAddress,bstrName,bstrPassword,bstrDomain) (This)->lpVtbl->Logon(This,bstrAddress,bstrName,bstrPassword,bstrDomain)
#define IMSIMContactList_Logoff(This) (This)->lpVtbl->Logoff(This)
#define IMSIMContactList_GetLocalState(This,pvarState,pvarDescription,pvarData) (This)->lpVtbl->GetLocalState(This,pvarState,pvarDescription,pvarData)
#define IMSIMContactList_SetLocalState(This,lState,varDescription,varData) (This)->lpVtbl->SetLocalState(This,lState,varDescription,varData)
#define IMSIMContactList_get_List(This,pvarList) (This)->lpVtbl->get_List(This,pvarList)
#define IMSIMContactList_put_List(This,varList) (This)->lpVtbl->put_List(This,varList)
#define IMSIMContactList_Add(This,vUser) (This)->lpVtbl->Add(This,vUser)
#define IMSIMContactList_Remove(This,vUser) (This)->lpVtbl->Remove(This,vUser)
#define IMSIMContactList_get_SelectedMenuOptions(This,lRow,pVal) (This)->lpVtbl->get_SelectedMenuOptions(This,lRow,pVal)
#define IMSIMContactList_InstantMessage(This,lRow) (This)->lpVtbl->InstantMessage(This,lRow)
#define IMSIMContactList_EMail(This,lRow) (This)->lpVtbl->EMail(This,lRow)
#define IMSIMContactList_Invite(This,lRow) (This)->lpVtbl->Invite(This,lRow)
#define IMSIMContactList_Block(This,lRow) (This)->lpVtbl->Block(This,lRow)
#define IMSIMContactList_Unblock(This,lRow) (This)->lpVtbl->Unblock(This,lRow)
#define IMSIMContactList_get_Count(This,pnCount) (This)->lpVtbl->get_Count(This,pnCount)
#define IMSIMContactList_get_Item(This,Var,pSafeContact) (This)->lpVtbl->get_Item(This,Var,pSafeContact)
#define IMSIMContactList_get__NewEnum(This,ppunkEnum) (This)->lpVtbl->get__NewEnum(This,ppunkEnum)
#define IMSIMContactList_get_LocalState(This,pnState) (This)->lpVtbl->get_LocalState(This,pnState)
#define IMSIMContactList_put_LocalState(This,nState) (This)->lpVtbl->put_LocalState(This,nState)
#define IMSIMContactList_get_LocalLogonName(This,pval) (This)->lpVtbl->get_LocalLogonName(This,pval)
#endif
#endif
  HRESULT WINAPI IMSIMContactList_get_List_Proxy(IMSIMContactList *This,VARIANT *pvarList);
  void __RPC_STUB IMSIMContactList_get_List_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactList_put_List_Proxy(IMSIMContactList *This,VARIANT varList);
  void __RPC_STUB IMSIMContactList_put_List_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactList_Add_Proxy(IMSIMContactList *This,VARIANT vUser);
  void __RPC_STUB IMSIMContactList_Add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactList_Remove_Proxy(IMSIMContactList *This,VARIANT vUser);
  void __RPC_STUB IMSIMContactList_Remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactList_get_SelectedMenuOptions_Proxy(IMSIMContactList *This,long lRow,long *pVal);
  void __RPC_STUB IMSIMContactList_get_SelectedMenuOptions_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactList_InstantMessage_Proxy(IMSIMContactList *This,long lRow);
  void __RPC_STUB IMSIMContactList_InstantMessage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactList_EMail_Proxy(IMSIMContactList *This,long lRow);
  void __RPC_STUB IMSIMContactList_EMail_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactList_Invite_Proxy(IMSIMContactList *This,long lRow);
  void __RPC_STUB IMSIMContactList_Invite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactList_Block_Proxy(IMSIMContactList *This,long lRow);
  void __RPC_STUB IMSIMContactList_Block_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactList_Unblock_Proxy(IMSIMContactList *This,long lRow);
  void __RPC_STUB IMSIMContactList_Unblock_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactList_get_Count_Proxy(IMSIMContactList *This,long *pnCount);
  void __RPC_STUB IMSIMContactList_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactList_get_Item_Proxy(IMSIMContactList *This,VARIANT Var,VARIANT *pSafeContact);
  void __RPC_STUB IMSIMContactList_get_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactList_get__NewEnum_Proxy(IMSIMContactList *This,IUnknown **ppunkEnum);
  void __RPC_STUB IMSIMContactList_get__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactList_get_LocalState_Proxy(IMSIMContactList *This,long *pnState);
  void __RPC_STUB IMSIMContactList_get_LocalState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactList_put_LocalState_Proxy(IMSIMContactList *This,long nState);
  void __RPC_STUB IMSIMContactList_put_LocalState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMSIMContactList_get_LocalLogonName_Proxy(IMSIMContactList *This,BSTR *pval);
  void __RPC_STUB IMSIMContactList_get_LocalLogonName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DIMContactListEvents_DISPINTERFACE_DEFINED__
#define __DIMContactListEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DIMContactListEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DIMContactListEvents : public IDispatch {
  };
#else
  typedef struct DIMContactListEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DIMContactListEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DIMContactListEvents *This);
      ULONG (WINAPI *Release)(DIMContactListEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DIMContactListEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DIMContactListEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DIMContactListEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DIMContactListEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DIMContactListEventsVtbl;
  interface DIMContactListEvents {
    CONST_VTBL struct DIMContactListEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DIMContactListEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DIMContactListEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DIMContactListEvents_Release(This) (This)->lpVtbl->Release(This)
#define DIMContactListEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DIMContactListEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DIMContactListEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DIMContactListEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_MSIMContactList;
#ifdef __cplusplus
  class MSIMContactList;
#endif
  EXTERN_C const CLSID CLSID_IMSafeContact;
#ifdef __cplusplus
  class IMSafeContact;
#endif
#endif

#ifdef __cplusplus
}
#endif
#endif
