扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:李汉鹏 来源:VCKBASE 2007年10月19日
关键字:
HRESULT CDocHostSite::XDocHostUIHandler::GetExternal(IDispatch ** ppDispatch) { METHOD_PROLOGUE(CDocHostSite, DocHostUIHandler); return pThis->m_pView->OnGetExternal( ppDispatch ); } CLhpHtmlView::CLhpHtmlView(BOOL isview) { ...... EnableAutomation();// 允许自动化 } HRESULT CLhpHtmlView::OnGetExternal(LPDISPATCH *lppDispatch) { *lppDispatch = GetIDispatch(TRUE);// 返回自身的IDispatch接口 return S_OK; }请注意上面代码中,在OnGetExternal返回的是自身IDispatch接口, 这样就不比为脚本扩展而另外写一个从CCmdTarget派生的新类, CLhpHtmlView本身就是从CCmdTarget派生,直接在上面实现接口就是。
--------------------------------------------------------------------------- 文件 DemoView.h --------------------------------------------------------------------------- ....... class CDemoView : public CLhpHtmlView { ...... DECLARE_DISPATCH_MAP() // 构建dispatch映射表以暴露方法或属性 ...... void WobbleWnd();// 抖动窗口 }; --------------------------------------------------------------------------- 文件 DemoView.cpp --------------------------------------------------------------------------- ...... // 把成员函数映射到Dispatch映射表中,暴露方法给脚本 BEGIN_DISPATCH_MAP(CDemoView, CLhpHtmlView) DISP_FUNCTION(CDemoView, "WobbleWnd", WobbleWnd, VT_EMPTY, VTS_NONE) END_DISPATCH_MAP() ...... void CDemoView::WobbleWnd() { // 在这里实现抖动窗口 ...... } --------------------------------------------------------------------------- 文件 Demo.htm --------------------------------------------------------------------------- ...... onclick="external.WobbleWnd()" ......这里我要介绍一下DISP_FUNCTION宏,它的作用是将一个函数映射到Dispatch映射表中,我们看
DISP_FUNCTION(CDemoView, "WobbleWnd", WobbleWnd, VT_EMPTY, VTS_NONE)
CDemoView是宿主类名, "WobbleWnd"是暴露给外面的名字(脚本调用时使用的名字), VT_EMPTY是返回值得类型为空,VTS_NONE说明此方法没有参数,如果要映射的函数有返回值和参数该 如何映射,通过下面举例来说明
DISP_FUNCTION(CCalendarView,"TestFunc",TestFunc,VT_BOOL,VTS_BSTR VTS_I4 VTS_I4) BOOL TestFunc(LPCSTR param1, int param2, int param3) { ..... }参数表VTS_BSTR VTS_I4 VTS_I4是用空格分隔,他们的类型映射请参考MSDN,这要提醒的是不要把VTS_BSTR与CString对应,而应与LPCSTR对应。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者