192 lines
4.9 KiB
C++
192 lines
4.9 KiB
C++
// MarshalableTI.h : Declaration of the CMarshalableTI
|
|
|
|
#ifndef __MARSHALABLETI_H_
|
|
#define __MARSHALABLETI_H_
|
|
|
|
#include "MarshalableTI.h"
|
|
#include "mslablti.h"
|
|
#include "resource.h" // main symbols
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMarshalableTI
|
|
class ATL_NO_VTABLE CMarshalableTI :
|
|
public CComObjectRootEx<CComSingleThreadModel>,
|
|
public CComCoClass<CMarshalableTI, &CLSID_MarshalableTI>,
|
|
public IMarshalableTI,
|
|
public IMarshal,
|
|
public ITypeInfo
|
|
{
|
|
private:
|
|
CComTypeInfoHolder m_TIHolder;
|
|
GUID m_guid;
|
|
GUID m_libid;
|
|
LCID m_lcid;
|
|
bool m_bCreated;
|
|
|
|
public:
|
|
|
|
|
|
DECLARE_REGISTRY_RESOURCEID(IDR_MSLABLTI)
|
|
DECLARE_NOT_AGGREGATABLE(CMarshalableTI)
|
|
|
|
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
|
|
|
BEGIN_COM_MAP(CMarshalableTI)
|
|
COM_INTERFACE_ENTRY(IMarshalableTI)
|
|
COM_INTERFACE_ENTRY(IMarshal)
|
|
COM_INTERFACE_ENTRY(ITypeInfo)
|
|
END_COM_MAP()
|
|
|
|
HRESULT FinalConstruct();
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
// IMarshalableTI methods
|
|
|
|
STDMETHOD(Create)(/*[in]*/ REFIID clsid,
|
|
/*[in]*/ REFIID iidLib,
|
|
/*[in]*/ LCID lcid,
|
|
/*[in]*/ WORD dwMajorVer,
|
|
/*[in]*/ WORD dwMinorVer);
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
// IMarshal methods
|
|
|
|
STDMETHOD(GetUnmarshalClass)(
|
|
/* [in] */ REFIID riid,
|
|
/* [unique][in] */ void *pv,
|
|
/* [in] */ DWORD dwDestContext,
|
|
/* [unique][in] */ void *pvDestContext,
|
|
/* [in] */ DWORD mshlflags,
|
|
/* [out] */ CLSID *pCid);
|
|
|
|
STDMETHOD(GetMarshalSizeMax)(
|
|
/* [in] */ REFIID riid,
|
|
/* [unique][in] */ void *pv,
|
|
/* [in] */ DWORD dwDestContext,
|
|
/* [unique][in] */ void *pvDestContext,
|
|
/* [in] */ DWORD mshlflags,
|
|
/* [out] */ DWORD *pSize);
|
|
|
|
STDMETHOD(MarshalInterface)(
|
|
/* [unique][in] */ IStream *pStm,
|
|
/* [in] */ REFIID riid,
|
|
/* [unique][in] */ void *pv,
|
|
/* [in] */ DWORD dwDestContext,
|
|
/* [unique][in] */ void *pvDestContext,
|
|
/* [in] */ DWORD mshlflags);
|
|
|
|
STDMETHOD(UnmarshalInterface)(
|
|
/* [unique][in] */ IStream *pStm,
|
|
/* [in] */ REFIID riid,
|
|
/* [out] */ void **ppv);
|
|
|
|
STDMETHOD(ReleaseMarshalData)(
|
|
/* [unique][in] */ IStream *pStm);
|
|
|
|
STDMETHOD(DisconnectObject)(
|
|
/* [in] */ DWORD dwReserved);
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
// ITypeInfo methods
|
|
|
|
STDMETHOD(GetTypeAttr)(
|
|
TYPEATTR ** ppTypeAttr);
|
|
|
|
STDMETHOD(GetTypeComp)(
|
|
ITypeComp ** ppTComp);
|
|
|
|
STDMETHOD(GetFuncDesc)(
|
|
UINT index,
|
|
FUNCDESC ** ppFuncDesc);
|
|
|
|
STDMETHOD(GetVarDesc)(
|
|
UINT index,
|
|
VARDESC ** ppVarDesc);
|
|
|
|
STDMETHOD(GetNames)(
|
|
MEMBERID memid,
|
|
BSTR * rgBstrNames,
|
|
UINT cMaxNames,
|
|
UINT * pcNames);
|
|
|
|
|
|
STDMETHOD(GetRefTypeOfImplType)(
|
|
UINT index,
|
|
HREFTYPE * pRefType);
|
|
|
|
STDMETHOD(GetImplTypeFlags)(
|
|
UINT index,
|
|
INT * pImplTypeFlags);
|
|
|
|
|
|
STDMETHOD(GetIDsOfNames)(
|
|
LPOLESTR * rgszNames,
|
|
UINT cNames,
|
|
MEMBERID * pMemId);
|
|
|
|
STDMETHOD(Invoke)(
|
|
PVOID pvInstance,
|
|
MEMBERID memid,
|
|
WORD wFlags,
|
|
DISPPARAMS * pDispParams,
|
|
VARIANT * pVarResult,
|
|
EXCEPINFO * pExcepInfo,
|
|
UINT * puArgErr);
|
|
|
|
STDMETHOD(GetDocumentation)(
|
|
MEMBERID memid,
|
|
BSTR * pBstrName,
|
|
BSTR * pBstrDocString,
|
|
DWORD * pdwHelpContext,
|
|
BSTR * pBstrHelpFile);
|
|
|
|
|
|
STDMETHOD(GetDllEntry)(
|
|
MEMBERID memid,
|
|
INVOKEKIND invKind,
|
|
BSTR * pBstrDllName,
|
|
BSTR * pBstrName,
|
|
WORD * pwOrdinal);
|
|
|
|
|
|
STDMETHOD(GetRefTypeInfo)(
|
|
HREFTYPE hRefType,
|
|
ITypeInfo ** ppTInfo);
|
|
|
|
|
|
STDMETHOD(AddressOfMember)(
|
|
MEMBERID memid,
|
|
INVOKEKIND invKind,
|
|
PVOID * ppv);
|
|
|
|
STDMETHOD(CreateInstance)(
|
|
IUnknown * pUnkOuter,
|
|
REFIID riid,
|
|
PVOID * ppvObj);
|
|
|
|
|
|
STDMETHOD(GetMops)(
|
|
MEMBERID memid,
|
|
BSTR * pBstrMops);
|
|
|
|
|
|
STDMETHOD(GetContainingTypeLib)(
|
|
ITypeLib ** ppTLib,
|
|
UINT * pIndex);
|
|
|
|
STDMETHOD_(void, ReleaseTypeAttr)(
|
|
TYPEATTR * pTypeAttr);
|
|
|
|
STDMETHOD_(void, ReleaseFuncDesc)(
|
|
FUNCDESC * pFuncDesc);
|
|
|
|
STDMETHOD_(void, ReleaseVarDesc)(
|
|
VARDESC * pVarDesc);
|
|
|
|
|
|
private:
|
|
HRESULT _GetClassInfo(ITypeInfo** ppTI);
|
|
};
|
|
|
|
#endif //__MARSHALABLETI_H_
|