Click here to Skip to main content
15,892,537 members
Articles / Programming Languages / C#

Lingering COM Objects Caused by ActiveX Control Event Handlers

Rate me:
Please Sign up or sign in to vote.
4.67/5 (6 votes)
14 Mar 20068 min read 45.9K   501   22  
This article describes how, under some circumstances, an ActiveX control event handler can cause COM objects to linger.

/* this ALWAYS GENERATED file contains the definitions for the interfaces */


 /* File created by MIDL compiler version 6.00.0366 */
/* at Mon Mar 13 18:54:05 2006
 */
/* Compiler settings for _InfoSource.idl:
    Oicf, W1, Zp8, env=Win32 (32b run)
    protocol : dce , ms_ext, c_ext, robust
    error checks: allocation ref bounds_check enum stub_data 
    VC __declspec() decoration level: 
         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
         DECLSPEC_UUID(), MIDL_INTERFACE()
*/
//@@MIDL_FILE_HEADING(  )

#pragma warning( disable: 4049 )  /* more than 64k source lines */


/* verify that the <rpcndr.h> version is high enough to compile this file*/
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif

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

#ifndef __RPCNDR_H_VERSION__
#error this stub requires an updated version of <rpcndr.h>
#endif // __RPCNDR_H_VERSION__

#ifndef COM_NO_WINDOWS_H
#include "windows.h"
#include "ole2.h"
#endif /*COM_NO_WINDOWS_H*/

#ifndef ___InfoSource_h__
#define ___InfoSource_h__

#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif

/* Forward Declarations */ 

#ifndef __IDataInfo_FWD_DEFINED__
#define __IDataInfo_FWD_DEFINED__
typedef interface IDataInfo IDataInfo;
#endif 	/* __IDataInfo_FWD_DEFINED__ */


#ifndef __IDataViewer_FWD_DEFINED__
#define __IDataViewer_FWD_DEFINED__
typedef interface IDataViewer IDataViewer;
#endif 	/* __IDataViewer_FWD_DEFINED__ */


#ifndef __CDataInfo_FWD_DEFINED__
#define __CDataInfo_FWD_DEFINED__

#ifdef __cplusplus
typedef class CDataInfo CDataInfo;
#else
typedef struct CDataInfo CDataInfo;
#endif /* __cplusplus */

#endif 	/* __CDataInfo_FWD_DEFINED__ */


#ifndef ___IDataViewerEvents_FWD_DEFINED__
#define ___IDataViewerEvents_FWD_DEFINED__
typedef interface _IDataViewerEvents _IDataViewerEvents;
#endif 	/* ___IDataViewerEvents_FWD_DEFINED__ */


#ifndef __CDataViewer_FWD_DEFINED__
#define __CDataViewer_FWD_DEFINED__

#ifdef __cplusplus
typedef class CDataViewer CDataViewer;
#else
typedef struct CDataViewer CDataViewer;
#endif /* __cplusplus */

#endif 	/* __CDataViewer_FWD_DEFINED__ */


/* header files for imported files */
#include "prsht.h"
#include "mshtml.h"
#include "mshtmhst.h"
#include "exdisp.h"
#include "objsafe.h"

#ifdef __cplusplus
extern "C"{
#endif 

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

#ifndef __IDataInfo_INTERFACE_DEFINED__
#define __IDataInfo_INTERFACE_DEFINED__

/* interface IDataInfo */
/* [unique][helpstring][dual][uuid][object] */ 


EXTERN_C const IID IID_IDataInfo;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("7ABA04DC-3684-4FF2-A725-E19F17ACBF87")
    IDataInfo : public IDispatch
    {
    public:
        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Initialize( 
            /* [in] */ BSTR bstrFileName) = 0;
        
        virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_DataContents( 
            /* [retval][out] */ BSTR *pVal) = 0;
        
        virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_DataContents( 
            /* [in] */ BSTR newVal) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IDataInfoVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IDataInfo * This,
            /* [in] */ REFIID riid,
            /* [iid_is][out] */ void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IDataInfo * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IDataInfo * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( 
            IDataInfo * This,
            /* [out] */ UINT *pctinfo);
        
        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( 
            IDataInfo * This,
            /* [in] */ UINT iTInfo,
            /* [in] */ LCID lcid,
            /* [out] */ ITypeInfo **ppTInfo);
        
        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( 
            IDataInfo * This,
            /* [in] */ REFIID riid,
            /* [size_is][in] */ LPOLESTR *rgszNames,
            /* [in] */ UINT cNames,
            /* [in] */ LCID lcid,
            /* [size_is][out] */ DISPID *rgDispId);
        
        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( 
            IDataInfo * This,
            /* [in] */ DISPID dispIdMember,
            /* [in] */ REFIID riid,
            /* [in] */ LCID lcid,
            /* [in] */ WORD wFlags,
            /* [out][in] */ DISPPARAMS *pDispParams,
            /* [out] */ VARIANT *pVarResult,
            /* [out] */ EXCEPINFO *pExcepInfo,
            /* [out] */ UINT *puArgErr);
        
        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Initialize )( 
            IDataInfo * This,
            /* [in] */ BSTR bstrFileName);
        
        /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_DataContents )( 
            IDataInfo * This,
            /* [retval][out] */ BSTR *pVal);
        
        /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_DataContents )( 
            IDataInfo * This,
            /* [in] */ BSTR newVal);
        
        END_INTERFACE
    } IDataInfoVtbl;

    interface IDataInfo
    {
        CONST_VTBL struct IDataInfoVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define IDataInfo_QueryInterface(This,riid,ppvObject)	\
    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)

#define IDataInfo_AddRef(This)	\
    (This)->lpVtbl -> AddRef(This)

#define IDataInfo_Release(This)	\
    (This)->lpVtbl -> Release(This)


#define IDataInfo_GetTypeInfoCount(This,pctinfo)	\
    (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)

#define IDataInfo_GetTypeInfo(This,iTInfo,lcid,ppTInfo)	\
    (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)

#define IDataInfo_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)	\
    (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)

#define IDataInfo_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)	\
    (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)


#define IDataInfo_Initialize(This,bstrFileName)	\
    (This)->lpVtbl -> Initialize(This,bstrFileName)

#define IDataInfo_get_DataContents(This,pVal)	\
    (This)->lpVtbl -> get_DataContents(This,pVal)

#define IDataInfo_put_DataContents(This,newVal)	\
    (This)->lpVtbl -> put_DataContents(This,newVal)

#endif /* COBJMACROS */


#endif 	/* C style interface */



/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IDataInfo_Initialize_Proxy( 
    IDataInfo * This,
    /* [in] */ BSTR bstrFileName);


void __RPC_STUB IDataInfo_Initialize_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);


/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IDataInfo_get_DataContents_Proxy( 
    IDataInfo * This,
    /* [retval][out] */ BSTR *pVal);


void __RPC_STUB IDataInfo_get_DataContents_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);


/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IDataInfo_put_DataContents_Proxy( 
    IDataInfo * This,
    /* [in] */ BSTR newVal);


void __RPC_STUB IDataInfo_put_DataContents_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);



#endif 	/* __IDataInfo_INTERFACE_DEFINED__ */


#ifndef __IDataViewer_INTERFACE_DEFINED__
#define __IDataViewer_INTERFACE_DEFINED__

/* interface IDataViewer */
/* [unique][helpstring][dual][uuid][object] */ 


EXTERN_C const IID IID_IDataViewer;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("57FE0CB5-7B2E-4A95-977F-CA8837CB16C3")
    IDataViewer : public IDispatch
    {
    public:
        virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_DataInfo( 
            /* [retval][out] */ IDispatch **pVal) = 0;
        
        virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_DataInfo( 
            /* [in] */ IDispatch *newVal) = 0;
        
        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE CloseViewer( void) = 0;
        
        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OpenViewer( 
            /* [in] */ BSTR fileName) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IDataViewerVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IDataViewer * This,
            /* [in] */ REFIID riid,
            /* [iid_is][out] */ void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IDataViewer * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IDataViewer * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( 
            IDataViewer * This,
            /* [out] */ UINT *pctinfo);
        
        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( 
            IDataViewer * This,
            /* [in] */ UINT iTInfo,
            /* [in] */ LCID lcid,
            /* [out] */ ITypeInfo **ppTInfo);
        
        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( 
            IDataViewer * This,
            /* [in] */ REFIID riid,
            /* [size_is][in] */ LPOLESTR *rgszNames,
            /* [in] */ UINT cNames,
            /* [in] */ LCID lcid,
            /* [size_is][out] */ DISPID *rgDispId);
        
        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( 
            IDataViewer * This,
            /* [in] */ DISPID dispIdMember,
            /* [in] */ REFIID riid,
            /* [in] */ LCID lcid,
            /* [in] */ WORD wFlags,
            /* [out][in] */ DISPPARAMS *pDispParams,
            /* [out] */ VARIANT *pVarResult,
            /* [out] */ EXCEPINFO *pExcepInfo,
            /* [out] */ UINT *puArgErr);
        
        /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_DataInfo )( 
            IDataViewer * This,
            /* [retval][out] */ IDispatch **pVal);
        
        /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_DataInfo )( 
            IDataViewer * This,
            /* [in] */ IDispatch *newVal);
        
        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *CloseViewer )( 
            IDataViewer * This);
        
        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OpenViewer )( 
            IDataViewer * This,
            /* [in] */ BSTR fileName);
        
        END_INTERFACE
    } IDataViewerVtbl;

    interface IDataViewer
    {
        CONST_VTBL struct IDataViewerVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define IDataViewer_QueryInterface(This,riid,ppvObject)	\
    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)

#define IDataViewer_AddRef(This)	\
    (This)->lpVtbl -> AddRef(This)

#define IDataViewer_Release(This)	\
    (This)->lpVtbl -> Release(This)


#define IDataViewer_GetTypeInfoCount(This,pctinfo)	\
    (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)

#define IDataViewer_GetTypeInfo(This,iTInfo,lcid,ppTInfo)	\
    (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)

#define IDataViewer_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)	\
    (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)

#define IDataViewer_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)	\
    (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)


#define IDataViewer_get_DataInfo(This,pVal)	\
    (This)->lpVtbl -> get_DataInfo(This,pVal)

#define IDataViewer_put_DataInfo(This,newVal)	\
    (This)->lpVtbl -> put_DataInfo(This,newVal)

#define IDataViewer_CloseViewer(This)	\
    (This)->lpVtbl -> CloseViewer(This)

#define IDataViewer_OpenViewer(This,fileName)	\
    (This)->lpVtbl -> OpenViewer(This,fileName)

#endif /* COBJMACROS */


#endif 	/* C style interface */



/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IDataViewer_get_DataInfo_Proxy( 
    IDataViewer * This,
    /* [retval][out] */ IDispatch **pVal);


void __RPC_STUB IDataViewer_get_DataInfo_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);


/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IDataViewer_put_DataInfo_Proxy( 
    IDataViewer * This,
    /* [in] */ IDispatch *newVal);


void __RPC_STUB IDataViewer_put_DataInfo_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);


/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IDataViewer_CloseViewer_Proxy( 
    IDataViewer * This);


void __RPC_STUB IDataViewer_CloseViewer_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);


/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IDataViewer_OpenViewer_Proxy( 
    IDataViewer * This,
    /* [in] */ BSTR fileName);


void __RPC_STUB IDataViewer_OpenViewer_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);



#endif 	/* __IDataViewer_INTERFACE_DEFINED__ */



#ifndef __InfoSource_LIBRARY_DEFINED__
#define __InfoSource_LIBRARY_DEFINED__

/* library InfoSource */
/* [helpstring][uuid][version] */ 


EXTERN_C const IID LIBID_InfoSource;

EXTERN_C const CLSID CLSID_CDataInfo;

#ifdef __cplusplus

class DECLSPEC_UUID("D7BF7BD9-C764-4173-8679-0BAB5A097075")
CDataInfo;
#endif

#ifndef ___IDataViewerEvents_DISPINTERFACE_DEFINED__
#define ___IDataViewerEvents_DISPINTERFACE_DEFINED__

/* dispinterface _IDataViewerEvents */
/* [helpstring][uuid] */ 


EXTERN_C const IID DIID__IDataViewerEvents;

#if defined(__cplusplus) && !defined(CINTERFACE)

    MIDL_INTERFACE("4E7D62B5-07F4-45F9-BB4E-41DFA1DE7D04")
    _IDataViewerEvents : public IDispatch
    {
    };
    
#else 	/* C style interface */

    typedef struct _IDataViewerEventsVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            _IDataViewerEvents * This,
            /* [in] */ REFIID riid,
            /* [iid_is][out] */ void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            _IDataViewerEvents * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            _IDataViewerEvents * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( 
            _IDataViewerEvents * This,
            /* [out] */ UINT *pctinfo);
        
        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( 
            _IDataViewerEvents * This,
            /* [in] */ UINT iTInfo,
            /* [in] */ LCID lcid,
            /* [out] */ ITypeInfo **ppTInfo);
        
        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( 
            _IDataViewerEvents * This,
            /* [in] */ REFIID riid,
            /* [size_is][in] */ LPOLESTR *rgszNames,
            /* [in] */ UINT cNames,
            /* [in] */ LCID lcid,
            /* [size_is][out] */ DISPID *rgDispId);
        
        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( 
            _IDataViewerEvents * This,
            /* [in] */ DISPID dispIdMember,
            /* [in] */ REFIID riid,
            /* [in] */ LCID lcid,
            /* [in] */ WORD wFlags,
            /* [out][in] */ DISPPARAMS *pDispParams,
            /* [out] */ VARIANT *pVarResult,
            /* [out] */ EXCEPINFO *pExcepInfo,
            /* [out] */ UINT *puArgErr);
        
        END_INTERFACE
    } _IDataViewerEventsVtbl;

    interface _IDataViewerEvents
    {
        CONST_VTBL struct _IDataViewerEventsVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define _IDataViewerEvents_QueryInterface(This,riid,ppvObject)	\
    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)

#define _IDataViewerEvents_AddRef(This)	\
    (This)->lpVtbl -> AddRef(This)

#define _IDataViewerEvents_Release(This)	\
    (This)->lpVtbl -> Release(This)


#define _IDataViewerEvents_GetTypeInfoCount(This,pctinfo)	\
    (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)

#define _IDataViewerEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo)	\
    (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)

#define _IDataViewerEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)	\
    (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)

#define _IDataViewerEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)	\
    (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)

#endif /* COBJMACROS */


#endif 	/* C style interface */


#endif 	/* ___IDataViewerEvents_DISPINTERFACE_DEFINED__ */


EXTERN_C const CLSID CLSID_CDataViewer;

#ifdef __cplusplus

class DECLSPEC_UUID("688EB11A-B9C7-4DB2-82A8-B5412E8F71D5")
CDataViewer;
#endif
#endif /* __InfoSource_LIBRARY_DEFINED__ */

/* Additional Prototypes for ALL interfaces */

unsigned long             __RPC_USER  BSTR_UserSize(     unsigned long *, unsigned long            , BSTR * ); 
unsigned char * __RPC_USER  BSTR_UserMarshal(  unsigned long *, unsigned char *, BSTR * ); 
unsigned char * __RPC_USER  BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); 
void                      __RPC_USER  BSTR_UserFree(     unsigned long *, BSTR * ); 

/* end of Additional Prototypes */

#ifdef __cplusplus
}
#endif

#endif


By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Software Developer (Senior)
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions