您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:126 来源:vckbase.com

本文章共4714字,分3页,当前第2页,快速翻页:
 


三、用 MFC 实现自动化组件
我写的这整个系列文章---《COM 组件设计与应用》,多是用 ATL 写组件程序,但由于自动化非常有用,在后续的文章中,还要给大家介绍组件的“事件”功能,还要介绍如何在 MFC 的程序中象 WORD 一样支持“宏”的功能。这些都要用到 MFC,所以就给读者唠一唠啦:-)
逆风者
3-1:建立一个解决方案
3-2:建立一个 MFC DLL 项目,项目名称为“Simple7”


3-3:一定要选择附加功能中的“自动化”,切记!切记!


3-4:添加新类



3-5:在新建类中支持自动化



类名 你随便写个类名子啦
基类 一定要从 CComTarget 派生呀,只有它才提供了 IDispatch 的支持
自动化 - 无 表示不支持自动化,你要选择了它,那就白干啦
自动化 - 自动化 支持自动化,但不能被直接实例化。后面在讲解多个 IDispatch 的时候就用到它了,现在先不要着急。
自动化 - 可按类型ID创建 一定要选择这个项目,这样我们在后面的调用中,VB就能够CreateObject(),VC就能够CreateDispatch()对组件对象实例化了。注意一点,这个 ID 其实就是组件的 ProgID 啦。

3-6:选择接口,添加函数



3-7:添加函数。我们要写一个整数加法函数Add()。



3-8:再增加一个转换字符串大小写的函数 Upper()。



3-9:好了,下面开始输入程序代码:
LONG CDispSimple::Add(LONG n1, LONG n2)

{

	AFX_MANAGE_STATE(AfxGetStaticModuleState());



	return n1   n2;

}



BSTR CDispSimple::Upper(LPCTSTR str)

{

	AFX_MANAGE_STATE(AfxGetStaticModuleState());



	CString strResult(str);

	strResult.MakeUpper();



	return strResult.AllocSysString();

}
3-10:编译注册

如果上面的操作由于疏忽而发生了错误,那么你可以手工进行改正。
其一、你可以打开 IDL 文件进行修改,修改时要特别小心函数的声明中,有一个[id(n)] 的函数序号,可不要乱了;
其二、同步修改 H/CPP 中的函数声明和函数体;
其三、在CPP文件中,根据情况也要修改 BEGIN_DISPATCH_MAP/END_DISPATCH_MAP()函数影射宏。
正确编译后,vc.net 2003 比 vc6.0 要聪明多了,它会自动注册组件。如果复制到其它计算机上,你也需要手工执行 regsvr32.exe 进行注册。

四、用 ATL 实现双接口组件(操作方法和步骤,请参考COM 组件设计与应用(六)》)
4-1:建立一个 ATL 项目,项目名称为“Simple8”
4-2:选择 DLL 类型、非属性方式、不要选择任何附加选项
4-3:添加新类,选择ATL 的简单对象
4-4:输入简称和选项,选项按默认进行,也就是双重接口方式(注2)





4-5:增加函数。选择接口、鼠标右键菜单、添加方法...
Add([in] VARIANT v1, [in] VARIANT v2, [out, retval] VARIANT * pVal);
Upper([in] BSTR str, [out,retval] BSTR * pVal);
关于Add()函数,你依然可以使用 Add([in] long n1, [in] long n2, [out,retval] long * pVal) 方式。但这次我们没有使用 long ,而是使用了 VARIANT 做参数和返回值。这里我先卖个关子,往下看,就知道使用 VARIANT 的精彩之处了。
 
本文章更多内容<<上一页 - 1 - 2 - 3 - 下一页>>
相关文章

MFC程序员的WTL指南: Part II - WTL 界面基
用VC 制作QQ自动登陆软件
用udp协议通讯示例
SendMessage和PostMessage,total ordering
关于调试时输出的字符串信息
创建分层窗口,实现图像渐变
关于CEdit控件的透明 --作者:monsoon
think window procedure
DCT快速变换
如何提取网页中所有链接
一个简单的读写注册表实例
利用辅助线程更新用户界面UI
如何更改其它程序 ListView 控件中某个 Ite
如何在NT下获取进程的路径
ATL布幔之下的秘密(5)
定制编辑框的上下文菜单
初试驱动---OV511 摄像头驱动开发
关于SendMessage
COM 组件注册方法
枚举声明,模板函数特化

相关评论


本文章所属分类:首页 VC++

  热门关键字: