<COM原理和应用>第七章的ITextObject代码是什么?
第7章中有如下的描述:
-----------------------------------
为了在程序中使用"Text.Object"文本对象,我们利用ClassWizard引入文本对象控制类,ClassWizard会为我们创建
一个COleDispatchDriver的派生类ITextObject,在后面代码中我们将会看到ITextObject类的用法。
--------------------------------------
可是在书中自带的源代码中找不到相关的代码。我自己创建了一个继承自COleDispatchDriver的类,编译的时候提示:
---------------------------------------------------------------
'GetText' : is not a member of 'ITextObject'
-----------------------------------------------------------------
因为GetText是CTextObject类的自定义属性。
这个COleDispatchDriver的派生类ITextObject到底该怎么写才可以使CompFile项目正常运行那?
【解决方法】
首先是如何定义ITextObject的属性:
在类视图中找到ITextObject接口,右键选择Add property, 
进行如下的输入,属性的名字我用了MyText, 没有用书里面的Text, 原理是一样的,点击Next.

使用默认的不用改。点击 Finish.

现在来看生成结果:
打开.idl 文件。

打开TextObject.h文件。
(注意里面SetMyText的参数类是指针类型,因为我用默认的非指针传值总是不正确,所以这里自己改成了指针类型,传值就正常了。)

打开TextObject.cpp文件。
第一处:DISP_PROPERTY_EX_ID中

第二处:

将TextComp项目编译成功,并且注册成功后,就可以在CompFile项目中使用它了。
为了与例子中给出的代码兼容,需要创建一个TextComp.h 文件,创建步骤如下:
在项目上右键选择 Add Class,选择MFC Class From TypeLib, 然后点击 Add.

选择Registry(选择编译自动生成的tbl文件也可以),然后找到刚刚注册的TextComp组件,选择ITextObject接口,添加到右边。类的名字我用了CTextObject_Wrapper,而没有用代码例子中的ITextObject,这样可读性好一些。文件用了与代码例子兼容的TextComp.h。点击Finish。

打开生成的TextComp.h文件,可以看到继承自COleDispatchDriver的类已经被创建了,操作属性相关的代码也被自动生成了。

ReadWrite.cpp文件中的ReadDirectory函数需要改一下,以下是需要改的部分。在这里需要注意VARIANT变量的用法,使用前需要调用VariantInit,使用后需要调用VariantClear,这里说的:https://msdn.microsoft.com/en-us/library/windows/desktop/dd373687(v=vs.85).aspx
|
if(file.ReadString(szData, 511)) { TRACE("%s\n", szData); VERIFY(pStg->CreateStream(T2COLE(szStreamName), STGM_CREATE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE, 0, 0, &pStream) == S_OK); ASSERT(pStream != NULL); // Include the null terminator in the stream CTextObject_Wrapper textObject; VERIFY(textObject.CreateDispatch(g_clsid)); textObject.m_lpDispatch->QueryInterface(IID_IPersistStream, (void**) &pPersistStream); ASSERT(pPersistStream != NULL);
char buffer[1000]; int ret = wcstombs ( buffer, szData, sizeof(buffer) );
BSTR bstrText = _com_util::ConvertStringToBSTR(buffer);
VARIANT var; VariantInit(&var); var.vt = VT_VARIANT; var.bstrVal = bstrText;
//textObject.SetMyText(COleVariant(bstrText)); textObject.SetMyText(var); VariantClear(&var); pPersistStream->Save(pStream, TRUE); pPersistStream->Release(); pStream->Release(); |
<COM原理和应用>第七章的ITextObject代码是什么?的更多相关文章
- 2017.11.1 微型计算机原理与接口技术-----第七章 中断系统与8237A DMA控制器
第七章 微型计算机原理与接口技术-----中断系统与8237A DMA控制器 (1)数据传送的两种方式:中断方式和直接存储器存取方式(DMA):中断是微处理器与外部设备交换信息的一种方式:DMA是存储 ...
- 数据库原理 第七章 数据库设计和ER模型
第七章讲述一个E-R设计如何转换成一个关系模式的集合以及如何在该设计中找到某些约束. 1.概念设计定义了数据库中表示的实体.实体的属性.实体之间的联系,以及实体和联系上的约束 在设计一个数据库模型的时 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...
- 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7 标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...
- 第七章 LED将为我们闪烁:控制发光二极管
第七章 LED将为我们闪烁:控制发光二极管 本章我们将会看到一个完整的linux驱动程序,通过linux驱动程序控制LED的四个小灯,通俗的说就是通过向linux驱动程序来控制LED小灯的开关.用到 ...
- Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧
第六章 Android绘图机制与处理技巧 1.屏幕尺寸信息屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DP ...
- Android群英传笔记——第七章:Android动画机制和使用技巧
Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最 近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中 ...
- 【转】第七章、Linux 文件与目录管理
原文网址:http://vbird.dic.ksu.edu.tw/linux_basic/0220filemanager.php 第七章.Linux 文件与目录管理 最近升级日期:2009/08/26 ...
- 第七章移动互联网与移动IP
第七章移动互联网与移动IP 本章延续前几章节,对该章节内容进行归纳总结. 文章中的Why表示产生的背景,也就是说为什么会产生该技术,What表示该技术是什么,How表示该技术是如何使用的.以下将用字母 ...
随机推荐
- position置顶或某固定位置 兼容ie6ie7
用absolute来模拟fixed效果: /*相当于正常的position:fixed;top:0 */.sl_fixed_top{bottom:auto;top:0;_bottom:auto;_to ...
- 安装配置sock5代理
环境准备及安装 yum -y install pam-devel openldap-devel cyrus-sasl-devel yum -y install openssl-devel.x86_64 ...
- ubuntu 使用wine卸载软件
现在的网络应用许多被windows绑架了,有时候不得不下载一些.exe的的东西在ubuntu下载配合一下,但是后来我想卸载这些.exe应用程序,于是百度了一下,一位博主写的好,如下,晒出来: cd ~ ...
- 关于 MAXScript 中文路径返回上级目录(精简版)
之前写过一个 关于 MAXScript 中文路径返回上级目录 的博文 今天无意中发现了一个更简单的方法 代码如下: fn newfile filepath = ( nf = getfilenamepa ...
- 黑马程序员——JAVA基础之编码表
------- android培训.java培训.期待与您交流! --------- 字符编码 字符流的出现为了方便操作字符. 更重要是的加入了编码转换. 通过子类转换流来完成. • I ...
- windows多线程相关
1.多线程同步的方法 a)entercirticalsection leaveciriticalsection b)Mutex互斥对象 waitforsingleobject releasemutex ...
- HOG matlab练习
matlab练习程序(HOG方向梯度直方图) HOG(Histogram of Oriented Gradient)方向梯度直方图,主要用来提取图像特征,最常用的是结合svm进行行人检测. 算法流程图 ...
- Apache Shiro 使用手册(四)Realm 实现
在认证.授权内部实现机制中都有提到,最终处理都将交给Real进行处理.因为在Shiro中,最终是通过Realm来获取应用程序中的用户.角色及权限信息的.通常情况下,在Realm中会直接从我们的数据源中 ...
- js json排序
var p = [ {name:"kitty", age:12}, {name:"sonny", age:9}, ...
- 教你如何在word中像LaTex那样打出漂亮的数学公式
转载自: http://blog.csdn.net/ibingow/article/details/8613556 记得很久以前在word里打数学公式很痛苦,要用鼠标点啊点,效率奇低,包括像MathT ...