COM 组件设计与应用(六)——用 ATL 写第一个组件(vc.net)
1、与 《COM 组件设计与应用(五)》的内容基本一致。但本回讲解的是在 vc.net 2003 下的使用方法,即使你不再使用vc6.0,也请和上一回的内容,参照比对。
图一、新建 ATL 项目
图二、选择非属性化的DLL组件类型
图三、选择建立ATL简单对象
图五、接口选项
图六、调出增加接口方法的菜单
图七、增加接口函数 Add
图八、接口函数定义完成后的图示
{
*pVal = n1 + n2;
return S_OK;
}这个太简单了,不再浪费“口条”。下面我们实现字符串连接的Cat()函数:STDMETHODIMP CFun::Cat(BSTR s1, BSTR s2, BSTR *pVal)
{
int nLen1 = ::SysStringLen( s1 ); // s1 的字符长度
int nLen2 = ::SysStringLen( s2 ); // s2 的字符长度
*pVal = ::SysAllocStringLen( s1, nLen1 + nLen2 );// 构造新的 BSTR 同时把 s1 先保存进去
if( nLen2 )
{
::memcpy( *pVal + nLen1, s2, nLen2 * sizeof(WCHAR) ); // 然后把 s2 再连接进去
// wcscat( *pVal, s2 );
}
return S_OK;
}学生:上面的函数实现,完全是调用基本的 API 方式完成的。
{
CComBSTR sResult( s1 );
sResult.AppendBSTR( s2 );
*pVal = sResult.Copy();
// *pVal = sResult.Detach();
return S_OK;
}学生:哈哈,好!使用了 CComBSTR,这个就简单多了。CComBSTR::Copy()和CComBSTR::Detach()有什么区别?
注1:Apartment,系统通过隐藏的窗口消息来排队组件调用,因此我们可以暂时不考虑同步问题。注意,是暂时哈。
注2:双接口表示在一个接口中,同时支持自定义接口和 IDispatch 接口。以后,以后,以后就讲。因为双接口非常重要,我们以后会天天讲、夜夜讲、常常讲------简称“三讲”:)
注3:组件的重用方法有2个,聚合和包容。
注4:这些都是 IDL 文件中的概念,以后用到什么,就介绍什么。
转载于:https://blog.51cto.com/studoc/281697
COM 组件设计与应用(六)——用 ATL 写第一个组件(vc.net)相关推荐
- COM 组件设计与应用
目录 COM 组件设计与应用(一) 起源及复合文件... 1 COM组件设计与应用(二) GUID 和 接口... 10 COM组件设计与应用(三) 数据类型... 20 COM组件设计与应用(四) ...
- COM 组件设计与应用(一)
COM 组件设计与应用(一) 起源及复合文件 作者:杨老师 一.前言 公元一九九五年某个夜黑风高的晚上,我的一位老师跟我说:"小杨呀,以后写程序就和搭积木一样啦.你赶快学习一些OLE的技术吧 ...
- AngularJs的UI组件ui-Bootstrap分享(六)——Tabs
tabs控件使用uib-tabset指令和uib-tab指令,效果是这样的: 1 <!DOCTYPE html> 2 <html ng-app="ui.bootstrap. ...
- COM 组件设计与应用(六)
一.前言 1.与 <COM 组件设计与应用(五)>的内容基本一致.但本回讲解的是在 vc.net 2003 下的使用方法,即使你不再使用vc6.0,也请和上一回的内容,参照比对. 2.这第 ...
- COM组件设计与应用(十三)(转载)
COM组件设计与应用(十三) 事件和通知(VC6.0) 作者:杨老师 下载源代码 一.前言 我的 COM 组件运行时产生一个窗口,当用户双击该窗口的时候,我需要通知调用者: 我的 COM 组件用线程方 ...
- COM组件设计与应用(三)(转载)
COM组件设计与应用(三) 数据类型 作者:杨老师 一.前言 上回书介绍了GUID.CLSID.IID和接口的概念.本回的重点是介绍 COM 中的数据类型.咋还不介绍组件程序的设计步骤呀?咳..... ...
- React组件设计实践总结05 - 状态管理
今天是 520,这是本系列最后一篇文章,主要涵盖 React 状态管理的相关方案. 前几篇文章在掘金首发基本石沉大海, 没什么阅读量. 可能是文章篇幅太长了?掘金值太低了? 还是错别字太多了? 后面静 ...
- COM 组件设计与应用(十一)—— IDispatch 及双接口的调用
原文:http://www.vckbase.com/index.php/wv/1236 一.前言 前段时间,由于工作比较忙,没有能及时地写作.其间收到了很多网友的来信询问和鼓励,在此一并表示感谢.咳. ...
- 【转载】COM 组件设计与应用(四)——简单调用组件
原文:http://vckbase.com/index.php/wv/1211.html 一.前言 同志们.朋友们.各位领导,大家好. VCKBASE 不得了, 网友众多文章好. 组件设计怎么学? 知 ...
最新文章
- 多路复用select和epoll的区别(转)
- python可以做什么工作好-学Python能找到什么工作?这4种工作最热门!
- IntelliTest实战直通车(上集)
- linux不能识别 符号,在linux中文件中^M符号的问题以及中文识别问题
- 【Elasticsearch】 Full text queries query_string 等 字符串查询
- 为什么说Java中要慎重使用继承
- ubuntu16.04安装天气预报软件
- 【图论】图的深度优先遍历与广度优先遍历(图文讲解)
- 执行挂起状态线程的终止与暂停
- VB程序设计—For循环结构
- 哈佛幸福课 24种人格力量测试
- Oracle大幅裁员,甲骨文云计算业务在华遭遇“滑铁卢”?
- Microsoft SQL Server2005服务器安全与维护-李晨光-专题视频课程
- shopify 与国内第三方建站服务平台的比较(店匠、shopline、shopyy、ueeshop)
- Muse-UI自定义主题的使用方法
- vue-router 两种模式
- 密码算法测试向量——HMAC-SM3
- JAVA简易推箱子小游戏制作
- Windows安装Maven(图文解说详细版)
- BISTU数据库期末复习指导
热门文章
- Ajax简单示例之改变下拉框动态生成表格
- 只在必要时保存服务器控件视图状态
- Python3中with用法
- C++/C++11中用于定义类型别名的两种方法:typedef和using
- Caffe源码中syncedmem文件分析
- 【linux】Matchbox(一):启动脚本
- c++ 测试串口速率_Raspberry Pi Zero W:串口(UART)的配置和使用
- python对数运算符号_科学网—Python中算数运算符之注意及np.logspace - 张伟的博文...
- python nginx部署_Python 应用 uWSGI + Nginx 部署
- laytpl语法_layui语法基础