原创 基于 dialog 的vc project 与 内嵌java script的相互调用(三)

2010-5-5 15:08 2566 14 16 分类: 消费电子

<续上>

8.
现在回到我们关注的 GetExternal 的话题, 我们需要改写 ROleControlSite  GetExternal():

// GetExternal
STDMETHODIMP ROleControlSite::XDocHostUIHandler::GetExternal(
  /* [out] */ IDispatch __RPC_FAR *__RPC_FAR *ppDispatch)
{
 METHOD_PROLOGUE(ROleControlSite, DocHostUIHandler)
  
 // return the IDispatch we have for extending the object Model
 if(our_web_ctrl) {
  IDispatch* pDisp = (IDispatch*)(our_web_ctrl->GetIDispatch(TRUE));
  *ppDispatch = pDisp;
 }
         
 return S_OK;
}

这里清楚说明了, 我们无法从 MFC 获得 IDocHostUIHandler   GetExternal 方法, 所以我们也许不得不借用 Lake 的贡献核心用法是替换无论 doc/view or dialog AfxEnableControlContainer(), 用我们重写的 IDocHostUIHandler  方法接管一切. 既然 IDocHostUIHandler  为我们重写, 这里对 GetExternal() 我们准确进行改写 js 激活的 external.ourcall() 事件对应的 handler, 直接指向我们的 CHtmlCtrl 的实例  instance .

9.
最后的步骤, 就是完成 js window.external.ourcall() 对应的方法 ourcall. 很多网络资源, 说明对 instance source 的改写, 例如主动加上 BEGIN_DISPATCH_MAP, EnableAutomation(), DECLARE_DISPATCH_MAP 定义等等. 我做不好这些, 因为我不知道有什么 format 我们表达不好, MFC 不喜欢我写的. 比方说, 现在我知道, 进行方法的写作, 就要加上afx_msg 前缀(很令人熟悉``` 说明方法与属性的机制, message 的管理机制的一致性).
简单而又合适的方法, 是在构建 based class CHtmlView CHtmlCtrl class 的时候, 选择 automation, IDE 将为我们加上前面说一切.
而我们的 ourcall() 方法, 也用 class 向导来添加到了合适的地方. 同使用向导, 完成其他的重载函数的 coding, 没什么两样, IDE 给了我们直接写作 ourcall() 的便利.

10.
另外似乎还要注意到一个重要的地方, microsoft 认为 CHtmlView 存在着 memory leak, 什么据说5种成员调用中, 导致 leak 的发生... 我们很无语, 但是既然有细节的 microsoft support  source fix, 照做就好.
http://support.microsoft.com/kb/241750

实现效果:
我们在 google map 上绘画区域, 完成后, 触发 external.report(), 在型参中并输出了对角2marker 的经纬度给 host 进行处理.

- Allen 发表于 2010.05.01 于<电子工程专刊>之Allen Zhan's blog

<3/3 OVER>

<补充>
在着手改写 GetExternal 的过程中, 我们不可避免遇到了令人烦恼的 redefine 导致编译失败. 尝试了至少 30mins 的各种手段后, 我们放弃了其他的方式, 直接去改写 IDE 的头文件 occimpl.h, 手动给它加上 #ifndef 去避免 link error. 从工程学的角度出发, 这原本是不应该发生的事情(我们应尽量尊重工具, 并不去改动工具, 这样我们所有人都在同样的环境下讨论和交流). 但我们也要埋怨工具的本身... 这片 source 已经陈旧到没有 writer 去补丁一下, 至少放个 ifndef 去防止 redefine? 或者说, IDE 设计便是不许可该文件被暴露与使用的?

基于 dialog 的vc project 与 内嵌java script的相互调用(一)

基于 dialog 的vc project 与 内嵌java script的相互调用(二)

基于 dialog 的vc project 与 内嵌java script的相互调用(三)

文章评论2条评论)

登录后参与讨论

allen_zhan_752827529 2010-5-1 20:53

Mike` 劳动节里劳动, 十分快乐.

用户1277994 2010-5-1 20:24

多谢allen! 节日快乐!
相关推荐阅读
allen_zhan 2023-02-27 19:08
对"三极管"译名由来的探讨
想讨论一个有意思的话题:今天中国大陆的电子业界, 为何将 BJT 称呼为 "三极管"? 或因其象形, 前辈自行进行随意的不严谨定义么? 带着疑问我们做了一下延伸查阅, 或得出这样的结论, 即中译名"三...
allen_zhan 2023-02-19 18:15
对知乎提问"为何三极管的一个PN结工作在反偏"的回复
将这个回复, 也发表在博文中, 作为自己的一个学习笔记叭.知乎问题: "三极管里面的PN结相当于二极管,为什么里面PN结加反向电压也能导通?"我的回复:首先, 二极管的"反向"概念, 容易给初学者某种...
allen_zhan 2023-02-18 10:17
从肖特基二极管到PN结与三极管
最近数个工作日的兴趣是回顾电子基础器件的发明/发展历史, 期待夯实技术基础的底蕴. 在学习与搜索资料的过程中, 顺便对知乎的一个同学的基础问题, 进行了回复. 不小心回复一下就成了千字文, 觉得挺有趣...
allen_zhan 2023-01-28 11:53
微功率 ISM 频率探讨相关文档组总结
不知不觉, 自开启关于微功率频率的话题起, 即从第一份文章写就到今天总结之日, 已经接近 10 个工作日左右. 早先的想法是对工程界未来的微功率设备相关项目, 从项目规划开始, 对选择系统, 频率, ...
allen_zhan 2023-01-27 22:50
关于 LoRa 应用场景的讨论
说明: 本文中斜体部分表示来自公告文件的部分内容剪贴或合并整理.1. "第52号文" 对 470MHz 的约束引自 如下:(四)民用计量仪表限在建筑楼宇、住宅小区及村庄等小范围内组网应用,任意时刻限...
allen_zhan 2023-01-25 13:24
ISM 频段中 2.4G 与 5.8GHz 设备的使用与限制
说明: 本文中斜体部分表示来自公告文件的部分内容剪贴或合并整理.1. ISM 频段定义中的 2.4G 与 5.8GHz正如同 文中确定的, 2.4G, 5.8GHz 属于中国大陆 ISM 频段的定义...
我要评论
2
14
关闭 站长推荐上一条 /2 下一条