一、理论基础:

创建COM组件有如下两种方式。

1。在开发过程中,客户程序通常都是通过CoCreateInstance()创建COM对象,但这样创建方式,客户必须知道该COM组件的CLSID或ProgID。COM库通过ID在注册表中找到COM,并加载。通过指针数组调用其内的函数。

2。另一种创建方式,就是通过名字对象(moniker)创建COM对象。名字技术允许客户程序通过符号化的方式创建COM对象,不必须再通过CLSID或ProgID,大大降低了系统的偶合性。

下面对第二种方式进行简单说明:

名字对象,其本身也是一个COM对象,它对通常的COM组件对象提供了符号化的表示方法,同时它对COM组件对象进行了全面的封装。客户只需创建相应的名字对象,然后利用名字对象的绑定功能得到组件对象。名字对象实现了标准的接口IMoniker,客户程序通过IMoniker接口获得组件对象。

例如在客户文档中插入一个电子表格文件:“C:/My Document / My.xls”,其处理过程如下:

1。客户程序首先调用CreateFileMoniker  API 函数创建一个文件名字对象,

2。调用名字对象的IMoniker::BindToObject()函数,绑定到Excle.exe,在后台运行,并加载"C:/My Document / My.xls",其绑定的详细过程如下:

2。1通过GetClassFile找到与该电子表格文件相联系的组件对象CLSID

2。1。1CLSID一般保存在文件中,直接从文件读取即可

2。1。2CLSID,也通过该电子表格文件的扩展名“。xls”,到注册表中查找相应的CLSID

2。2找到CLSID,后再调用CoCreateInstance()组件对象

2。3请求组件的IPersistFile指针,然后调用IPersistFile::Load(strFileName)加载电子表格文件。

2。4BindToObject返回

二、在MFC中的实际应用

在MFC中,利用COleClientItem类,将其加载过程封装掩盖起来了。所以,即使你不懂名字对象技术,也不会影响你使用OLE对象。

CView::OnInsertObject()

{

。。。

COleInsertDialog dlg ;                   //启动OLE插入对话框
  if (dlg.DoModal() != IDOK)
  return;

BeginWaitCursor();

COLECntrItem* pItem = NULL;
 TRY
 {
                           // Create new item connected to this document.
                            COLEDoc* pDoc = GetDocument();//获得容器指针
                            ASSERT_VALID(pDoc);
                           pItem = new COLECntrItem(pDoc);//创建OLE对象
                           ASSERT_VALID(pItem);

// Initialize the item from the dialog data.
                         if (!dlg.CreateItem(pItem))                 //装载所嵌入的文档
                                 AfxThrowMemoryException();  // any exception will do
                             ASSERT_VALID(pItem);
  
                             if (dlg.GetSelectionType() == COleInsertDialog::createNewItem)
                             pItem->DoVerb(OLEIVERB_SHOW, this);//激活

略。。。。

有关OLE对象的使用(1)相关推荐

  1. ACCESS的Ole对象读取

    Ole对象在Access中存储为二进制文件,读取的时候需要注意转换出的文件的编码格式  1OleDbConnection OleConn = new OleDbConnection();  2OleC ...

  2. java access ole word,利用OLE对象实现Word文档操作

    Word 是常用的字处理软件,在编程中充分利用现有的Word 文档就可以减少很多数据的处理.详细介绍了在ASP.NET 的程序中,利用数据库中的OLE 对象,实现Word文档的在线存取及预览. 1.引 ...

  3. C# 读写ACCESS的OLE对象,演示图片与长文件的读写

    网络上的读写OLE对象的代码是多,不过多是转载的,大部分人从来都没实际测试过,只是COPY来COPY去.我重来没看到一个真正可以运行的东东. 没办法,只有自力更生,花了一点时间出了点研究成果,写到这里 ...

  4. access的ole对象换成mysql_ACCESS的Ole对象读取写入

    Ole对象在Access中存储为二进制文件,读取的时候需要注意转换出的文件的编码格式 1 OleDbConnection OleConn=newOleDbConnection();2OleConn.C ...

  5. java excel 插入文件_Java 添加OLE对象到Excel文档

    本文介绍通过Java程序添加OLE对象到Excel文档.OLE分为两种形式,一种通过嵌入(Embed),方式,一种通过链接(Link)方式.前者是将对象嵌入到文档中,外部对该对象的更改不影响嵌入操作时 ...

  6. AutoCAD处理工具Aspose.CAD最新版三大新功能推荐——支持水印、CF2格式和OLE对象

    Aspose.CAD for .NET(点击下载)是一个独立的AutoCAD处理API.它提供将DWG,DWF和DXF文件转换为高质量PDF和光栅图像的功能.开发人员可以从AutoCAD文件中选择和转 ...

  7. OLE对象是什么?为什么要在CAD图形中插入OLE对象?

    OLE对象是什么?OLE对象的意思是指对象连接与嵌入.那为什么要在CAD图形中插入OLE对象?一般情况下,在CAD图形中插入OLE对象,是为了将不同应用程序的数据合并到一个文档中.本节内容小编就来给大 ...

  8. Word格式处理控件Aspose.Words for .NET教程——使用Ole对象和在线视频

    Aspose.Words for .NET是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsof ...

  9. CorelDRAW VBA - 在图层上创建一个新的OLE对象 Layer.CreateOLEObject

    Layer.CreateOLEObject 方法用来在图层上创建一个新的OLE对象. 参数说明 参数 描述 ObjectID 指定OLE对象的ID DisplayAsIcon 指定是否将OLE对象显示 ...

最新文章

  1. 深度解析机器学习中的置信区间(附代码)
  2. RabbitMQ 简介
  3. 利用Scala特征(trait)的堆叠操作特性进行切面编程
  4. 有关计算机组成原理知识的论文,关于计算机组成原理的论文_计算机组成原理_图灵机的组成...
  5. Leetcode--145. 二叉树的后序遍历(迭代递归)
  6. HTTP协议从入门到大牛,初识HTTP协议(学习笔记)
  7. iPhone未来怎么走?将融入脸部以及指纹辨识系统
  8. xenomai linux测试,Xenomai 实时线程 select 测试
  9. Ubuntu18.04 evo安装
  10. java培训之XML学习笔记(1)
  11. 系统应用和第三方应用跳转
  12. 【好题分享】适合C++初学者(数组的定义与初始化)
  13. 针对《面试心得与总结—BAT、网易、蘑菇街》一文中出现的技术问题的收集与整理...
  14. Java Gradle入门指南之gretty插件(安装、命令与核心特性)
  15. 天梯赛题目练习L1-001,L1-002,L1-003
  16. 使用python连接clickhouse并发送邮件
  17. Java空指针异常处理
  18. 读论文《A Neural Probabilistic Language Model》
  19. 数字化转型与智能创新100个案例
  20. 馆1:图书编码与定位

热门文章

  1. java实现 xls转xlsx
  2. Excel随机任意数的加减乘除法
  3. qt 文件大图标、列表等样式切换_跬步千里,厚积薄发:深度操作系统v15.9版正式发布...
  4. CC1310 架构组成,TX/RX+WOR嗅探过程,低功耗方法
  5. 网络唤醒的原理原来是这样的,GET!
  6. 黑马程序员前端实战项目---PC端品优购(下)
  7. NP-Hard问题--世界七大数学难题之首
  8. 【正点原子Linux连载】第三章 RV1126开发环境搭建 摘自【正点原子】ATK-DLRV1126系统开发手册
  9. 〖大前端 - 基础入门三大核心之CSS篇③〗- CSS选择器之复合选择器与伪类
  10. 【PHP】PHP7新特性