2

I want to create a ITypeInfo Object Without tlb file.

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;
};

i want to implement method GetTypeInfo,so i need to return a pointer of ITypeInfo,but i don't have tlb file. after google it,i found this link

i need more information about how to create ITypeInfo Object without tlb file. "METHOD0","METHOD1" is not defined.

Roman R.
  • 68,205
  • 6
  • 94
  • 158
tfzxyinhao
  • 334
  • 5
  • 19
  • If you return 0 to GetTypeInfoCount (`*pctinfo=0`), you can avoid implementing GetTypeInfo – Simon Mourier Jun 17 '13 at 10:11
  • in javascript need to enumerate all of the method and property,so the typeinfo is necessary! – tfzxyinhao Jun 17 '13 at 12:55
  • 1
    METHOD0, METHOD1 are just macros you can declare to help define METHODDATA structure quicker. Something like `#define METHOD0(szName, iMeth, dispid, vtReturn) {NULL, NULL, dispid, iMeth, CALLCONV::CC_CDECL, 0, DISPATCH_METHOD, vtReturn}` – Simon Mourier Jun 17 '13 at 13:26
  • 1
    Maybe you should step back and explain what it is for. If you want to handle JS method/property requests on C++ side then it would make more sense to just support `IDispatchEx` on your interface instead of building dynamic type information. – Roman R. Jun 17 '13 at 15:43
  • thanks ,i will try to implements this interface . – tfzxyinhao Jun 17 '13 at 16:01
  • in C++ how to control thr return value of the javascript function typeof ? – tfzxyinhao Jun 18 '13 at 00:47
  • @RomanR. in C++ how to control thr return value of the javascript function typeof ? – tfzxyinhao Jun 18 '13 at 01:19

0 Answers0