REGCOM_VC6
所属分类:界面编程
开发工具:Visual C++
文件大小:7963KB
下载次数:127
上传日期:2007-03-23 08:53:02
上 传 者:
jimsoft
说明: 要手工注册\"E:\\CPCW.dll\",只需在\"开始→运行\"中键入\"Regsvr32 E:\\CPCW.dll\",单击\"确定\"按钮后会弹出提示信息\"DllRegisterServer in CPCW.dll succeeded\",说明组件注册成功;如果要卸载此组件,在\"开始→运行\"中键入\"Regsvr32 /u E:\\CPCW.dll\"即可。但这是一个可视界面下的操作实现
(To manually register E: \ CPCW.dll , only in the Start → Run , type Regsvr32 E: \ CPCW.dll , click OK button will pop-up message DllRegisterServer in CPCW.dll succeeded , note the success of component registration If you want to uninstall this component, in the Start → Run , type Regsvr32/u E: \ CPCW.dll can. But it is a visual interface of the operation to achieve)
文件列表:
REGCOM\REGCOM.clw (1202, 2007-03-08)
REGCOM\REGCOM.h (1324, 2007-01-27)
REGCOM\REGCOM.cpp (2063, 2007-01-27)
REGCOM\StdAfx.cpp (208, 2007-01-27)
REGCOM\REGCOM.dsp (4159, 2007-01-27)
REGCOM\REGCOM.dsw (520, 2007-01-27)
REGCOM\REGCOM.ncb (58368, 2007-03-08)
REGCOM\LUCKY_FILE.dll (36864, 2006-04-11)
REGCOM\REGCOM.plg (1549, 2007-03-08)
REGCOM\StdAfx.h (1112, 2007-01-27)
REGCOM\res\REGCOM.rc2 (398, 2007-01-27)
REGCOM\res\REGCOM.ico (1078, 2007-01-27)
REGCOM\Debug\REGCOM.res (2636, 2007-03-08)
REGCOM\Debug\vc60.idb (246784, 2007-03-08)
REGCOM\Debug\REGCOM.pch (8194024, 2007-03-08)
REGCOM\Debug\vc60.pdb (438272, 2007-03-08)
REGCOM\Debug\StdAfx.obj (110931, 2007-03-08)
REGCOM\Debug\REGCOMDlg.obj (36149, 2007-03-08)
REGCOM\Debug\REGCOM.obj (13380, 2007-03-08)
REGCOM\Debug\REGCOM.ilk (206612, 2007-03-08)
REGCOM\Debug\REGCOM.exe (139264, 2007-03-09)
REGCOM\Debug\REGCOM.pdb (287744, 2007-03-08)
REGCOM\REGCOMDlg.h (1468, 2007-02-05)
REGCOM\REGCOM.rc (5422, 2007-02-05)
REGCOM\Resource.h (868, 2007-02-05)
REGCOM\REGCOM.APS (20892, 2007-03-08)
REGCOM\REGCOMDlg.cpp (6394, 2007-02-05)
REGCOM\REGCOM.opt (118784, 2007-03-08)
REGCOM\REGCOM.exe (106557, 2007-03-08)
REGCOM\MFC80CHS.dll (18432, 2007-01-22)
REGCOM\mfc80.dll (400896, 2006-12-02)
REGCOM\1.bmp (1440054, 2007-03-08)
REGCOM\MSVCP60D.DLL (516173, 1998-06-17)
REGCOM\MFC70FRA.DLL (61440, 2004-06-03)
REGCOM\MFC70ESP.DLL (61440, 2004-06-03)
REGCOM\MFC70ENU.DLL (57344, 2004-06-03)
REGCOM\MFC70DEU.DLL (61440, 2004-06-03)
REGCOM\MFC70CHT.DLL (45056, 2004-06-03)
REGCOM\MFC70CHS.DLL (40960, 2004-06-03)
... ...
鼓浪听涛 - 电脑技术 - Program版(进版画面 | 添加到收藏夹 | 我的百宝箱 )
Program(编程高手) 版
版主 诚征版主中
在线 3 人 文摘区 | 精华区 | 版内查询
令狐冲精华区搜索引擎 搜索范围 全站 Program版
精华区文章阅读
发信人: future (新世纪), 信区: Program
标 题: COM与ATL大扫盲(第一回书)(zz)
发信站: 鼓浪听涛 (Tue Mar 13 19:37:27 2001), 转信
发信人: pqf (Job Hunter), 信区: VisualC
标 题: COM与ATL大扫盲(第一回书)(zz)
发信站: 华南网木棉站 (Sat Dec 18 20:14:02 1999), 转信
转载自V星系,作者达明一排
COM与ATL大扫盲 (第一回书)
也许你曾用MFC建立过activeX 控件;也许你已经厌倦于再建立拖着
MFC??.DLL大尾巴的控件;也许你正准备跟着M$的潮流转而使用COM
开发更快、更小的组件;也许你已注意到基于COM的数据访问将逐步
代替传统的数据访问方式;也许你更讨厌在COM程序中一遍一遍反反
复复没完没了磨磨叽叽烦人8啦的执行早已烂熟于心的IUnknown和
IFactory还有最易出错的Release()...朋友,不,同学们(“嗖”
一只拖鞋飞上了讲台...),没打着!气死你!继续,能完成COM
功能并能简化代码编写的ATL(Active Template Library)库就
是为了实现以上功能而出现的。
ATL个头很小,也许你并不相信,它的初始版本只封装了四个头文
件,而其中一个是空的!!ATL并不是为解决所有问题而设计的,
如果你要创建不可视的COM部件,并从目标代码规模、运行时性能
、组件重用等方面来考虑,ATL比MFC更好;倒过来,如果你要用
ATL创建简单的可双击,满是UI的应用程序,那纯粹是装B,还是
用MFC方便。
ATL为简化COM开发,充分利用了C++类和模板,让我们从Release()...
中解脱出来。如新增加的CComPtr指针就是一个用C++类封装好的COM
接口指针,重载了许多操作符,它能在析构函数中自己调用COM接口
的Release(),也能在指针赋值及引用时正确调用COM接口的AddRef()
,从而让广大程序员感觉编写COM程序时不再感到那么痛苦,大大加
快开发COM的速度。
(后面有人喊:“快说两句下去得了!”)
好!好!等我举个例子的啊!在举例子之前,我要对正在使用MFC
的初哥初姐(下面有人说:“靠!你不就是初哥吗?”)说一句:
如果你要学习ATL,对常用操作(如常用控件)在不影响程序结构
及可读性的前提下(其实跟本不会影响)尽量用API函数比较好,
一是因为如果你在ATL中使用MFC的话那ATL的一个优势就会荡然无
存(还得拖着MFC??.DLL的尾巴!);二是可以很容易地转而学习
其它Windows开发工具(MFC、OWL虽然很普遍,但必竟没有API通
用啊!)。
(“咣 !-----”“哎呀!”) &@# 8-( 一块砖头正中脑袋。
哈哈!对对!走题了!谢谢啊!谢谢!
嗨!你们都抱着笔记本电脑看我干嘛?快启动我们可爱的VC6哇!
这年头谁再用VC5我就把谁干掉!选“File->New”新建一个“ATL
COM AppWizard”,在project name栏输入:“AtlHello”然后
按OK。
随即屏幕上会出现ATL COM AppWizard - Step 1 of 1对话框,
上面最多只有6个检查框让你按,并且Next钮无效,只能按Finish。
如果你有过在MFC编写ActiveX控件的经验,你也许会问:“咦?
用MFC写控件向导有三步呢!还让定义项目中包含的控件数、用户
许可、帮助文件...怎么功能强大的ATL可定制性倒更少了呢?”
这个问题问得好!谁呀?我这可是新衣服哇!不许再吐啦啊!ATL
COM向导的功能只是生成一个ATL应用程序的空框架,不信你看:那
上面可定制的都是与应用程序有关的项,如:Server Type可以
选DLL、EXE和Service(这是在NT下才有效的一个选项,我们先不
看它),另外还可以选择是否支持MFC、MTS及与残根/***DLL(你
可以假装没看到这个选项)相关的选项。其实在ATL程序中我们可
以在程序用“Insert->New ATL Object”启动ATL Object Wizard
,这样你可以有更多的定制性!先别扯太远!我们先只选Dynamic
Link Library(DLL)一项,然后按Finish再点OK,然后上ClassView
打开Globals看看。
ClassView的Globals树下整整齐齐的5个输出函数和一个全局变量,
下面分别介绍一下:
再说一遍:本课程是为DarkSide大哥的第三讲用VC建立ATL项目之前
打打基础,对一些你必须了解的东西做一介绍。因为我有亲身体会
,开始学COM时,哇塞!真是天地连成一片,头顶雾水蒙蒙,天也蒙
胧地也蒙胧。所以这儿我只对ATL及COM眼巴前儿的东西说说,不然
真的发蒙啊!其实COM很复杂,绝对不是几次就能说清的,还得
DarkSide大哥的学员们自己发奋啊!(一个啤酒瓶飞了上来“TMD,
你算个哈么呀!敢来教训老子!”)别生气!别生气!我错了还不
行吗?
再声明一下,我们要编写的是一个进程内服务器,也就是一个DLL,
需要用户来调用时它才起作用。记住,它自己什么也做不了,需要
用户来使用它、调用它。
DllMain()的用处:不用说了8?这您要是不知道,我想您已经没
有必要继续往下看了,先回去趴在被窝里哭一场得了!
DllCanUnloadNow()的用处:COM有个函数叫
CoFreeUnusedLibraries顾名思意,这个函数是释放那些不再需要
要的库所占用的内存的,用户需要在程序空闲期间经常调用这个
函数以节省内存。这个函数怎么知道某个DLL不再有用了呢?哈!
对啦!它对每个DLL调用其DllCanUnloadNow就等于问它:我现在可
以干掉你不?在内部,我们的DLL维护一个计数器,当一个组件申
请使用,则它加一,用完了则减一(这也就是IUnknown接口AddRef
和Release的实质,它们就是计数器)。它返回S_OK则该DLL会被
CoFreeUnusedLibraries宰了,返回S_FALSE则会多活一会儿。
DllRegisterServer()和DllUnRegisterServer()的用处:它们
是注册和卸载组件库用的。我们建立组件库(DLL)后总不能让用户
一天到晚记着DLL在Description机器上的路径吧?实际上使用组件
的时候是要用LoadLibrary函数装载DLL的,但我们还可以把DLL的
相关信息记录在Registry里而让用户通过访问注册表得到此DLL的路
径!对!实际上这两个函数在内部最终都是调用API函数Reg*来直接
操作注册表,将相关信息写在注册表中(或从注册表中删除)的。这
样,用户可以更灵活地使用组件而不必知道DLL的路径,其实访问注
册表和装载DLL的工作都隐藏在COM结构的内部了。怎么样?详细吧?
再给你举个常见的例子,听了这个例子后你应该恍然大悟“啊!原来
是这么回事儿啊!”。听说过RegSvr32.EXE没?它是用来注册控件
啊、DLL啊、组件啊等东西用的,如果你要注册一个组件库,DLL名叫
MyCOM.DLL,则你可以用REGSCR32 /s MyCom.DLL注册该DLL(如果想
知道REGSCR32.EXE的用法,可以在Windows\system目录下
按“Regscr32”得到)。在内部,它就是调用DLL
的DLLRegisterServer函数来注册DLL的啊!!!!!!怎么样?
是不是很出人意料?最开始我也以为注册的功能集中在Regscr32里
边呢!闹了半天还是调用DLL的函数!这样8!今天的家庭作业就是
回去每人给我编一个RegSvr32.EXE明天交作业!
我觉得还是有必要再说一遍,我说的这些可能对初学COM和ATL的你
来说暂时没什么用处,但如果你真的要自己编写COM服务器的时候,
这些却是你必须掌握的知识,而且是基础的基础。如果你在读这个贴
子以前对这方面的知识并不了解的话,那你真的应该谢谢我!(又一
根黄瓜迎面飞来)真的!
说到这儿,也许你对“DLL”和“组件库”两个词有点儿分不清,我
说的时候好像也没分清,那在这儿就绍一下DLL与组件之间的关系:
组件与DLL的关系和鸡蛋与篮子的关系一样,DLL是组件的载体,是
组件发行的一种方式。在一个DLL中可以存放多个组件,所以也可以
把存放组件的DLL叫组件库。
DllGetClassObject()的用处:如果你没有COM基础的话这可不好说
了!试着说说吧!COM库中有一个叫CoCreateInstance的函数,翻翻
MSDN的例子,绝大多数的与接口有关的例子都使用CoCreateInstance
来创建一个组件(调用我们要写的DLL库)并返回指定接口的指针。那
么在这个函数的内部是怎么做的呢?(TMD!还是内部!可是不说内部
您就不知道外部哇!凑合听着吧!)在内部,它调用一个叫做
CoGetClassObject的COM函数,用于得到负责生产我们想要的组件的
“工厂”。工厂?工厂。真的,这个接口就叫IClassFactory。如果看
不懂,就继续往下看,只是以后再看到IClassFactory时没说从来没见
过我,我的目的就达到了。这个工厂当然是包含在我们的DLL里(我们
自己做的组件,当然只有我们自己才知道怎么生产它),但它包含在D
LL的哪个地方呢?哈!绕了一大圈终于绕回来了,这就是我们的GetCl
assObject呀!就是这个函数对外暴露我们DLL中的IClassFactory,只
有IClassFactory才能创建组件并将组件和组件接口对外暴露。我们才
能使用组件!
MD,累死了。赖闻死鸡!我这么累你还在那儿睡觉!快起来!不然我
削你!
大家静一静啦啊!下面我们讲讲_Module...
_Module的用处:如果要了解它,你需要先熟悉一个类,它是:
CComModule,它在AtlBase.h中定义,建议你先读一读这个文件和
MSDN示范程序ATLIMPL.CPP(不是VC源程序,在MSDN的search中输入
“atlimpl.cpp”然后选择“位置”在“Internet Code Sample...”
标题就是“ATLIMPL.CPP”的那个)。
CComModule实现了一个COM服务器Module,可以接受用户使用Module
中的组件,它支持两种DLL:进程内服务器与本地服务器。上MSDN里
查查它的Class Member就知道它节省了我们多少工作了:对
RegisterServer你是不是感觉面熟?还记得前面的DllRegisterServer
吗?也许你会想:“既然它定义成一个全局变量,那是不是在那些DLL导
出函数中使用的都是它的功能?”哈!你又对啦!快用鼠标双击左边
的DllRegisterServer()看看右边代码是什么?哇!它真的调用了
_Module.RegisterServer()!
这样答案就明朗了!_Module是个CComModule类,它用来完成一些服务
器事务性的工作,以简化COM服务器程序员的编码负担。这个类并不
算大,仔细读一读它你对发现,还有几个我们前面说的函数都能在这
儿找到影子......
不行啦!我实在是受不了啦!各位!我要上趟WC!(记得有一课
DarkSide说的是要去倒一杯咖啡,多有诗意啊!)今天的课也不能
继续上啦!我眼睛都要花啦!改天8,等Darkside大哥回来一看允许
我接着说,同时有人愿意继续听,我再继续说8!
DarkSide大哥,我可一点儿你的课都没讲啊!讲的全是一些擦边球,
实质性内容等着我们的大教授回来呢!
的确,这堂课的内容有点儿杂!......不过,这必竟是达明第一次上公开课啊!
--
有一种鸟,它没有脚。它一生下来,就在
天空中飞呀飞呀飞,累了就在云朵中栖息。它
的一生只有一次坠落,那就是死亡。
※ 来源:.鼓浪听涛 bbs.xmu.edu.cn.[FROM: 210.34.6.118]
[返回顶部] [刷新] [同主题模式] [普通模式] [版内查询]
[我的百宝箱] [返回首页] [上级目录] [根目录] [令狐冲精华区搜索] [返回顶部] [刷新] [返回]
近期下载者:
相关文件:
收藏者: