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] [返回顶部] [刷新] [同主题模式] [普通模式] [版内查询] [我的百宝箱] [返回首页] [上级目录] [根目录] [令狐冲精华区搜索] [返回顶部] [刷新] [返回]

近期下载者

相关文件


收藏者