让 COM 脱离注册表
摘要:引言 在上一篇《在 DLL 中加入第二个 COM 类》的“单用户注册”一节中,我们曾提到脱离注册表依赖一事,现在我们来把这事儿给办了。 注册 我们在之前支持了“regsvr32 /n /i:user COMProvider.dll”这一注册命令。这一注册命令给了我们一定的扩展余地。从ATL默认的代码
阅读全文
posted @
2012-09-21 00:34
溪流
阅读(19)
推荐(0) 编辑
在 DLL 中加入第二个 COM 类
摘要:引言 在前面几篇文章里,我们已经成功脱离ATL写了一个COM组件,并且实现了自动化。今天,我们来加入第二个类,并且为加入第二个类做一些整理工作。 为DLL建立一个Module类 在前面,我们为了使得DllCanUnloadNow能正确工作而放了一个全局变量LONG g_nModuleCount,并且
阅读全文
posted @
2012-09-12 00:23
溪流
阅读(36)
推荐(0) 编辑
让COM组件可被跨语言调用
摘要:错误修正 首先修正一下上篇(《裸写一个进程内 COM 组件》)中的例子的一个小问题。类厂的CreateInstance里面,上次是这么写的: STDMETHODIMP ClassFactory::CreateInstance(_In_opt_ IUnknown *pUnkOuter, _In_ RE
阅读全文
posted @
2012-09-09 12:43
溪流
阅读(57)
推荐(0) 编辑
裸写一个进程内 COM 组件
摘要:引言 前几天山寨了ATL的COM_INTERFACE,了解了一个COM类的如何进行通用的组织。今天再来学习下COM协议,看看如何实现一个COM组件——当然,也是不能用ATL的,不然就学不到什么了。 COM DLL说简单简单,说复杂也很复杂。说简单呢,其实貌似只要导出下面这五个函数就可以了: DllC
阅读全文
posted @
2012-09-07 00:23
溪流
阅读(70)
推荐(0) 编辑
写个含 Windows Media Player 的窗口
摘要:在上一篇中,我们实现了COM_INTERFACE宏,并且重新写了一个含有WebBrowser的窗口。在那里我们留了中间层OleContainer。为了验证OleContainer的可用性,现在来写一个含有Windows Media Player(下文简称“WMP”)控件的窗口。 WMP控件的容器类除
阅读全文
posted @
2012-09-04 22:16
溪流
阅读(23)
推荐(0) 编辑
山寨一下 ATL 的 COM_INTERFACE
摘要:上一篇我们简单学习了下ATL 的继承链处理。可是,如果要裸写一个含内嵌IE控件的窗口,还是要写一个很长的QueryInterface,以及AddRef和Release,确保引用计数的正确性。于是我们不得不参考ATL的COM_TNTERFACE的处理技巧,来达到一定程度上的易用性。 首先,除了IUnk
阅读全文
posted @
2012-09-03 23:17
溪流
阅读(21)
推荐(0) 编辑
学习下 ATL 的继承链处理
摘要:我们先来看一组接口定义: struct IX { virtual void MethodX() = 0; }; struct IXA : public IX { virtual void MethodXA() = 0; }; struct IXB : public IX { virtual void
阅读全文
posted @
2012-09-02 13:56
溪流
阅读(18)
推荐(0) 编辑
裸写一个含内嵌IE控件的窗口
摘要:引言 之前也做过一些含内嵌IE控件的东西,只是一直用MFC/ATL等框架,对于里面的原理其实一知半解,只有脱离它们写一遍,才算能真正懂。前不久在写一个SkyDriveClient的时候正好有一个需求,就练习了一下。技术含量没有,在此记录一笔,供后来人入门,供前辈们批评。 本文中,行文以流水帐、贴代码
阅读全文
posted @
2012-09-01 01:04
溪流
阅读(18)
推荐(0) 编辑