Visual c++ 创建不带tlb文件的ITypeInfo对象

Visual c++ 创建不带tlb文件的ITypeInfo对象,visual-c++,com,idispatch,typelib,Visual C++,Com,Idispatch,Typelib,我想创建一个没有tlb文件的ITypeInfo对象 class CExternalHelperM:public IDispatch,public IDocHostUIHandler { public: CExternalHelperM(); virtual ~CExternalHelperM(); BEGIN_JSOBJECT_MAP() JSOBJECT_MAP(L"config",CConfigObject) JSOBJECT_MAP(L"sqlite",CSqliteOb

我想创建一个没有tlb文件的ITypeInfo对象

class CExternalHelperM:public IDispatch,public IDocHostUIHandler
{
public:
CExternalHelperM();
virtual ~CExternalHelperM();

BEGIN_JSOBJECT_MAP()
    JSOBJECT_MAP(L"config",CConfigObject)
    JSOBJECT_MAP(L"sqlite",CSqliteObject)
    JSOBJECT_MAP(L"filesystem",CFileSystemObject)
END_JSOBJECT_MAP()

int SetExternal(IUnknown* pUnknow);

STDMETHOD(ShowContextMenu)( DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved );
STDMETHOD(GetHostInfo)( DOCHOSTUIINFO *pInfo );
STDMETHOD(ShowUI)( DWORD dwID, IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget, IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc );
STDMETHOD(HideUI)( void );
STDMETHOD(UpdateUI)( void );
STDMETHOD(EnableModeless)( BOOL fEnable );
STDMETHOD(OnDocWindowActivate)( BOOL fActivate );
STDMETHOD(OnFrameWindowActivate)( BOOL fActivate );
STDMETHOD(ResizeBorder)( LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow );
STDMETHOD(TranslateAccelerator)( LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID );
STDMETHOD(GetOptionKeyPath)( LPOLESTR *pchKey, DWORD dw );
STDMETHOD(GetDropTarget)( IDropTarget *pDropTarget, IDropTarget **ppDropTarget );
STDMETHOD(GetExternal)( IDispatch **ppDispatch );
STDMETHOD(TranslateUrl)( DWORD dwTranslate, OLECHAR *pchURLIn, OLECHAR **ppchURLOut );
STDMETHOD(FilterDataObject)( IDataObject *pDO, IDataObject **ppDORet );
STDMETHOD(QueryInterface)( REFIID riid, void **ppvObject );

STDMETHOD(GetTypeInfoCount)( UINT *pctinfo);
STDMETHOD(GetTypeInfo)( UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo );
STDMETHOD(GetIDsOfNames)( REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId );
STDMETHOD(Invoke)( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr );

virtual ULONG STDMETHODCALLTYPE AddRef( void );
virtual ULONG STDMETHODCALLTYPE Release( void );
private:
LONG                m_cRef;
BOOL                m_bEnableMenu;
};
我想实现方法GetTypeInfo,所以我需要返回ITypeInfo的指针,但我没有tlb文件。 在谷歌搜索之后,我发现了这个

我需要更多关于如何在没有tlb文件的情况下创建ITypeInfo对象的信息。
METHOD0,METHOD1未定义。

如果将0返回给GetTypeInfoCount*pctinfo=0,则可以避免在javascript中实现GetTypeInfoin,因为需要枚举所有方法和属性,因此typeinfo是必需的!METHOD0和METHOD1只是可以声明的宏,以帮助更快地定义METHODDATA结构。类似于define METHOD0szName、iMeth、dispid、vtreurn{NULL、NULL、dispid、iMeth、CALLCONV::CC_CDECL、0、DISPATCH_METHOD、vtreurn}也许您应该退一步解释一下它的用途。如果您想处理C++端的JS方法/属性请求,那么只需在接口上支持IDISPATCHEX,而不是构建动态类型信息就更有意义。谢谢,我将尝试实现这个接口。