![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
COM
gfire2008
这个作者很懒,什么都没留下…
展开
-
DeskBand 实现2(实现声明)
<br />本文列出Desk Band的具体实现细节与代码。<br />我这个Desk Band都是用SDK直接实现,没有用ATL来实现,用ATL也是可以的。用SDK可能麻烦一点。<br /> <br />SdkDeskBandObject.h文件<br />说明:SdkDeskBandObject这个类定义了Band对象的接口。<br /> <br />#ifdef __cplusplus<br />#ifndef _SDKDESKBANDDEF_H_<br />#define _SDKDESKBANDD转载 2010-07-08 10:59:00 · 1130 阅读 · 0 评论 -
DeskBand 实现3(代码实现)
<br />SdkDeskBandObject.cpp文件<br />说明:这是Desk Band最核心的类,它主要完成Band对象的创建,销毁,窗体创建,关闭,显示等。当创建空上对象时,一定要把当前DLL的引用计数加1,对象析构时,DLL的引用计数要减1。<br /> <br />#define _DEFINE_GLOBAL_VARIABLES<br />#include "SdkDeskBandDef.h"<br />#include "SdkDeskBandObject.h"<br /><br />S转载 2010-07-08 11:00:00 · 1429 阅读 · 2 评论 -
DeskBand 实现1(对象介绍)
最近的项目上用到了Desk Band这种东西,我也是第一次做这个,做完后感觉收获很多,本文就讲一个如果实现一个自定义的Desk Band COM对象。一.Band对象介绍Windows的区(Bands)对象有三种:浏览栏(Explorer Bar)区对象,工具栏(Tools Bands)区对象,和桌面区对象(Desk Bands)。本文主要讲一下桌面区对象的实现。Desk Band出现在任务栏上,也可以是桌面浮动窗口。通过在任务栏上单击右键,然后在弹出的菜单中选择“工具栏”的子菜单项。如下图所示:桌面区位于转载 2010-07-08 10:57:00 · 1998 阅读 · 0 评论 -
DeskBand 实现4(四个函数)
<br />对于一个DeskBand来说,它应该是一个DLL,也是一个COM对象,它是由explorer来调用的。对于DLL来说,它有几个函数,相当重要,本文对这几个函数作一个简单说明。<br />1,DllMain<br />2,DllGetClassObject<br />3,DllCanUnloadNow<br />4,DllRegisterServer<br />5,DllUnregisterServer<br />其中函数2—5是需要导出的,作为该DLL与客户端通信的接口。<br />下面对这5个转载 2010-07-08 11:01:00 · 883 阅读 · 0 评论 -
DeskBand 实现5(注册)
有了COM对象后,必须对浏览栏的CLSID进行注册。另外如果要与IE或资源管理器协调运行,还必须进行的恰当的组件种类(CATID_DeskBand)注册。这个工作由DllRegisterServer处理。实现代码如下:注册表中的结构如下图: 一、注册 STDAPI DllRegisterServer(){ BOOL isSuccess = SdkDeskBandHelper::RegisterServer(g_hDllInst, CLS转载 2010-07-08 11:02:00 · 982 阅读 · 0 评论 -
DeskBand 实现6(遇到的问题)
<br />在做DeskBand过程中,遇到了一些问题,这些问题说大可大,说小可小,不是三下两下就解决了,还是花了一些时间来解决。<br />一、会导致explorer.exe挂掉<br /> 原因:<br /> 这个问题导致是由于当前DeskBand的DLL的引用计数不正确导致的。系统每隔一段时间就会去调用 DllCanUnloadNow函数来检测当前DLL是否可以被系统卸载。系统大约每隔15分钟会检查,当DllCanUnloadNow函数返回S_OK时,系统就会把这个DLL从他的进转载 2010-07-09 09:56:00 · 1034 阅读 · 0 评论 -
DeskBand 实现7(遇到的问题2)
<br />一、最近又发现一个问题,相当严重,但重现机率相当小,最后通过打LOG,调了半天,终于找到原因。<br />现象如下:<br />把Desk Band关闭,再重新打开就会把explorer弄挂掉。一定要多试几次才可能出现。<br />原因是什么呢?<br />Desk Band出来是会创建一个窗体的,同时也会注册一个全局类,调用RegisterClass函数就行。<br />RegisterClass会指定一个消息处理函数地址,也就是一个回调函数。<br />当你把DLL卸载后,这个全局类的信息还转载 2010-07-09 09:57:00 · 908 阅读 · 0 评论