第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代码是什么?的更多相关文章

  1. 2017.11.1 微型计算机原理与接口技术-----第七章 中断系统与8237A DMA控制器

    第七章 微型计算机原理与接口技术-----中断系统与8237A DMA控制器 (1)数据传送的两种方式:中断方式和直接存储器存取方式(DMA):中断是微处理器与外部设备交换信息的一种方式:DMA是存储 ...

  2. 数据库原理 第七章 数据库设计和ER模型

    第七章讲述一个E-R设计如何转换成一个关系模式的集合以及如何在该设计中找到某些约束. 1.概念设计定义了数据库中表示的实体.实体的属性.实体之间的联系,以及实体和联系上的约束 在设计一个数据库模型的时 ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...

  4. 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7  标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...

  5. 第七章 LED将为我们闪烁:控制发光二极管

     第七章 LED将为我们闪烁:控制发光二极管 本章我们将会看到一个完整的linux驱动程序,通过linux驱动程序控制LED的四个小灯,通俗的说就是通过向linux驱动程序来控制LED小灯的开关.用到 ...

  6. Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧

    第六章 Android绘图机制与处理技巧 1.屏幕尺寸信息屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DP ...

  7. Android群英传笔记——第七章:Android动画机制和使用技巧

    Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最 近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中 ...

  8. 【转】第七章、Linux 文件与目录管理

    原文网址:http://vbird.dic.ksu.edu.tw/linux_basic/0220filemanager.php 第七章.Linux 文件与目录管理 最近升级日期:2009/08/26 ...

  9. 第七章移动互联网与移动IP

    第七章移动互联网与移动IP 本章延续前几章节,对该章节内容进行归纳总结. 文章中的Why表示产生的背景,也就是说为什么会产生该技术,What表示该技术是什么,How表示该技术是如何使用的.以下将用字母 ...

随机推荐

  1. PRCR-1065 Failed to stop resource ora.asm 处理

    在网上看到的一些关闭Oracle Grid Infrastructure教程中,很多在关闭数据后就开始关闭ASM,结果提示如下的错误. [grid@rhvm1 ~]$ srvctl stop asm ...

  2. 转weblogic 10.3新建域

    一.安装前准备 1.解决linux中文乱码问题 修改/etc/sysconfig/i18n文件 #LANG="en_US.UTF-8"#SUPPORTED="en_US. ...

  3. Linux学习方法

    应该如何提问? 先要尝试自己解决 - 帮助 - 文档 - 示例 提问的智慧 - 问题详尽 - 贴图

  4. hdu 4348 To the moon

    题意:n个数 m次操作 操作分别为 C l r d: 把区间[l, r] 加 d Q l r : 查询区间[l, r]的和 H l r t: 查询时间t的时候[l, r]的和 B t: 回到时间t 思 ...

  5. SCRUM项目 6.0

    6.0----------------------------------------------------- sprint演示 1.坚持所有的sprint都结束于演示. 团队的成果得到认可,会感觉 ...

  6. VPS折腾

    kali  源: deb http://ppa.launchpad.net/wagungs/kali-linux2/ubuntu raring main deb-src http://ppa.laun ...

  7. 安装初始化mysql后,默认几个库介绍

    背景介绍:  当我们安装初始化mysql后,默认建了几个数据库,那么这些数据库有什么作用呢?mysql> show databases;+--------------------+| Datab ...

  8. IDEA 中 显示 *.properties 为中文

      效果:  

  9. SSH 创建证书认证

    *******chmod 600 195-tempuser.txt******* useradd tempusersu tempusercdmkdir .sshchmod 700 .sshcd .ss ...

  10. mac10.9+php5.5.15+brew0.9.5的安装

      Brew 是 Mac 下面的包管理工具,通过 Github 托管适合 Mac 的编译配置以及 Patch,可以方便的安装开发工具. Mac 自带ruby 所以安装起来很方便,同时它也会自动把git ...