以前没做过COM,手头碰到个问题,被逼着用COM组件开发。】
于是闷着头看,由于我熟悉MFC开发,所以我想看懂COM原理后就直接学习如何在MFC下开发COM。
可惜市面上没有专门讲如何用MFC开发COM的书,我只好看潘爱民的《COM原理和应用》,看了三五天了,一头雾水啊。
我知道类厂了,知道接口了,知道ADDREF和RELEASE了,可是我在我的工程如何用MFC开发COM组件啊,郁闷啊。我光知道原理,可我怎么用MFC开发COM啊,哪位XDJM给我点指点。
我刚入com门,渴望各位的指点。
感激不尽:)
在线等。

解决方案 »

  1.   

    我要的项目全是基于MFC的,我用ATL 开发的组件能用吗?
    问题可能很笨,还请指点。
    万事开头难啊
      

  2.   

    组件编译后,就是DLL
    相信楼主会显示调用 DLL 吧。
      

  3.   

    ADO,MSXML,SHELL一大堆不都是一样用吗Com在Windows下面都通用的BCB,Delphi,VB。
      

  4.   

    问题是ATL开发组件时,我想在组件程序中调用MFC库,怎么办?
    毕竟MFC基础庞大,很多类我可以直接使用,方便得很。】
    可是ATL据称只为开发小型组件使用,能行吗?各位批评。在线等。
      

  5.   

    You can add MFC support in ATL project. ATL is a great class library. You can abandon MFC at all. ATL had many server-side class also, it's helpful for coding server.
      

  6.   

    哈哈,不是有现成的ATL向导么,就是这个玩意啊,MFC帮你做的很好的啦,你只要添加自己的代码就可以了!
      

  7.   

    既然ATL中可以添加MFC支持,那我就考虑用ATL了。
    有没有什么专门讲ATL 开发COM的书呢?
    对于初学COM各位过来人有没有什么指点(经验啊教训啊)给小弟呵呵
      

  8.   

    楼上不要吓人,好怕怕!
    据我所了解的,要想用ATL开发一些简单的com还是很simple的,按照向导来做,定义接口,这些基本操作都很简单,楼主别怕~
      

  9.   

    谢谢菜菜的鼓励。
    我对我的VC底子很自信呵呵明天去找本ATL 的书看看吧。各位XDJM还能给小弟什么建议吗,比如推荐点好书。在线等。十点结贴。谢谢大家的指点。
      

  10.   

    不好意思,有点事先离线了。明晚再回来揭帖。感谢楼上的帮助。各位XDJM还能给小弟什么建议吗,比如推荐点好书。谢谢你
      

  11.   

    有一本书专门讲atl的,好像是老潘的
      

  12.   

    ATL用完了都不知道怎么回事
    呵呵,你才开始几天,,要肯COM,不下两个月工夫我看不行,比较累,哈哈
      

  13.   

    2 组件服务
    2.1 COM
    2.1.1 ATL,MFC和COM
    问:我通常使用ATL来编写组件,但是我的同事更喜欢MFC。更加复杂的是,我不断听说VB也能编写组件。
    我和我的同事在讨论用何种环境来编写组件。我想知道,我们该使用MFC还是ATL?什么时候两者都用?什么时候应该用VB代替C++?
    答:很高兴你用C++来编写组件。这是理解COM工作机制的最好方法。懂得了COM原理之后,你可以使用一些工具,例如VB或VC来加速你的代码的编写。尽管一些其他的语言,例如Java也是很好的编写组件的语言,但是我不知道是否有对应的向导来快速生成COM组件骨架。
    通常编写组件需要编写如下代码
     编写COM类并且实现IUnknown,这包括引用计数机制和接口查询机制
     添加IDispatch或者双接口使得组建可用于脚本环境
     编写一个类厂
     自注册
     适当的入口函数(DLL)或者注册(EXE)
     选择适当的线程套间
    如果你不使用任何类库,你需要负责上述代码的正确性。
    MFC用于基于Windows的开发。如果你对MFC的根基——窗口过程和句柄的封装——有所了解,那么你可以避免编写老式的大型switch窗口过程。MFC还提供了广泛的编程模型,例如文档视图框架和活动文档,以及有用的用户界面,例如可停靠控制栏和切分窗口。
    基于历史的原因,MFC和COM是基本上独立发展的。COM的普及使得MFC不得不在语言中加入OLE和COM支持——以一个相对繁琐的方式。MFC在CCmdTarget类中实现COM支持,使得程序员们可以用几个宏就可以声明和实现COM相关的操作。BEGIN_INTERFACE_PART和END_ INTERFACE_PART声明一个嵌套类,DECLARE_OLECREATE和IMPLEMENT_OLECREATE声明和实现一个类厂,用类似于消息映射的机制编写接口查询。这样做的优点是可以在派生类中重载一个接口的实现,坏处是需要为每个嵌套类编写自己的IUnknown实现。由于这样的实现很容易用宏实现,所以我觉得MFC居然没有提供这样的宏实在是一件很奇怪的事。MFC是一个快速编写大型程序的框架,应用程序向导可以在几秒钟之内生成一个完全可以工作的应用程序骨架,而类向导生成消息处理和自动化代码是小菜一碟。MFC同时还有很好的OLE支持——拖放、扩展,活动文档——使得编写大型组件更加迅速。引入MFC的代价是大约1兆的内存,以及性能和发布的问题。ATL是那些懒得一次又一次编写QueryInterface而又不想跟随控件那个很大的MFC运行时刻库的人搞出来的。ActiveX在网络上大行其道的时候,互联网的带宽还很小。尽管用MFC可以迅速开发ActiveX组件,但是MFC的再发布对于当时的网络是一个严重的问题。ATL是一个轻量级的框架,主要是提供了编写组件的向导、模板和宏,以及一些简单的平台SDK支持。用它可以迅速编写很小的组件和ActiveX控件,但是这也意味着程序员需要编写部分原来MFC封装了的代码,比如通用控件的操作。不幸的是,一些观察者认为既然MFC和ATL都提供了COM支持,那么他们就是竞争者。通常这是错的。两个框架都提供了ActiceX控件向导,但是MFC的实现更加获益于类向导、平台SDK的封装和MFC架构——这也增加了需要发布的字节数——而ATL需要你对COM有更深的了解。ATL代码中平台SDK的操作更少——部分是因为复杂度,部分是因为MFC有更好的平台SDK封装——而COM的接口,例如容器、集合等等实现更多。尽管ATL的应用程序向导中增加了MFC支持这个选项,但是引入MFC也失去了选择ATL的大部分理由——不需要发布那个好几兆的MFC支持库。建议的方式是参考MFC的源代码,尽可能自己实现需要的MFC类。VB是快速开发的一个很好的工具。它自动替你实现了组件创建、接口查询、引用计数和组件的生命期问题。通常你要做的只是实现接口。同时如果你添加了一个到组件类型库的引用,那么你可以在自动完成功能中看到它会自动提示接口的成员。VB的优点在于快速开发,缺点是降低了灵活度,以及混淆了接口及其实现。区分接口及其实现是COM的核心之一。总体来说,使用VB不需要对COM有深入的了解,而ATL提供了更多高级的COM支持。MFC是这两者之间的一个折衷,同时有大量的平台SDK封装和类向导可以利用。
      

  14.   

    我们先来看看进程内COM组件是怎样被加载及执行起来的
    1.客户调用CoCreateInstance,指定组件的GUID和接口的GUID2.CoCreateInstance是COM库函数,它在内部查找注册表,找到该组件对应的DLL。因此你的DLL中要有相应的在注册表中添加信息的函数。这些函数有固定导出名称,以便regsvr32程序调用。这些函数是DllRegisterServer和DllUnregisterServer。3.COM库找到DLL后,在DLL导出函数DllGetClassObject创建一个类厂。这样,你的DLL必须实现DllGetClassObject并在DllGetClassObject中创建类厂,并把类厂接口返回到COM库中。4.现在COM库有了类厂接口了,它就要用该接口查询你在第1点中指定的接口GUID,并把接口送回到客户中。因而你的DLL中还要实现类厂,供COM库查询接口。5.最后,客户有了接口就可以使用该接口支持的功能了。因而,DLL中还要有实现该接口的部分。综上所述,你要用MFC实现进程内COM的话,写个DLL,其中导出函数DllRegisterServer,DllUnregisterServer,DllGetClassObject,及一个类厂和供客户使用的接口。关于进程外组件,稍微复杂一些,COM库调用组件代码的机理不一样,你把进程内的搞清楚了,进程外的也就不复杂了
      

  15.   

    什么套间啊,包容,聚合,有什么列集散集什么的,还有双接口,还有...有的你肯的你现在连类厂都没有看到,估计有苦头吃呀,给你加加油吧你要是急的话建议你用BCB或VB,DELPHI之类的做,那东西相对理论少,实用,上手快,既使你不会用BCB的话,现学都比用ATL开发出来的快的多,ATL东西不少呢,难度要比MFC深的多,
      

  16.   

    HOHO
    开始的时候烦了我半年,看看停停
    理论先搞懂
    再看看一下例子
    codeproject/codeguru上都有很多不错的教程May you succeed!
      

  17.   

    只是msdn上的文章相信能帮助你http://www.microsoft.com/mind/0497/mfc.asp
    例外我建议你还是读〈com技术内幕〉这本书,比潘爱民的写得好,很多地方都有下载的电子书!配套代码的下载地址http://neweb.dhcn.net/ebook/com/918.asp