有关OLE对象的使用(1)
一、理论基础:
创建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)相关推荐
- ACCESS的Ole对象读取
Ole对象在Access中存储为二进制文件,读取的时候需要注意转换出的文件的编码格式 1OleDbConnection OleConn = new OleDbConnection(); 2OleC ...
- java access ole word,利用OLE对象实现Word文档操作
Word 是常用的字处理软件,在编程中充分利用现有的Word 文档就可以减少很多数据的处理.详细介绍了在ASP.NET 的程序中,利用数据库中的OLE 对象,实现Word文档的在线存取及预览. 1.引 ...
- C# 读写ACCESS的OLE对象,演示图片与长文件的读写
网络上的读写OLE对象的代码是多,不过多是转载的,大部分人从来都没实际测试过,只是COPY来COPY去.我重来没看到一个真正可以运行的东东. 没办法,只有自力更生,花了一点时间出了点研究成果,写到这里 ...
- access的ole对象换成mysql_ACCESS的Ole对象读取写入
Ole对象在Access中存储为二进制文件,读取的时候需要注意转换出的文件的编码格式 1 OleDbConnection OleConn=newOleDbConnection();2OleConn.C ...
- java excel 插入文件_Java 添加OLE对象到Excel文档
本文介绍通过Java程序添加OLE对象到Excel文档.OLE分为两种形式,一种通过嵌入(Embed),方式,一种通过链接(Link)方式.前者是将对象嵌入到文档中,外部对该对象的更改不影响嵌入操作时 ...
- AutoCAD处理工具Aspose.CAD最新版三大新功能推荐——支持水印、CF2格式和OLE对象
Aspose.CAD for .NET(点击下载)是一个独立的AutoCAD处理API.它提供将DWG,DWF和DXF文件转换为高质量PDF和光栅图像的功能.开发人员可以从AutoCAD文件中选择和转 ...
- OLE对象是什么?为什么要在CAD图形中插入OLE对象?
OLE对象是什么?OLE对象的意思是指对象连接与嵌入.那为什么要在CAD图形中插入OLE对象?一般情况下,在CAD图形中插入OLE对象,是为了将不同应用程序的数据合并到一个文档中.本节内容小编就来给大 ...
- Word格式处理控件Aspose.Words for .NET教程——使用Ole对象和在线视频
Aspose.Words for .NET是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsof ...
- CorelDRAW VBA - 在图层上创建一个新的OLE对象 Layer.CreateOLEObject
Layer.CreateOLEObject 方法用来在图层上创建一个新的OLE对象. 参数说明 参数 描述 ObjectID 指定OLE对象的ID DisplayAsIcon 指定是否将OLE对象显示 ...
最新文章
- 深度解析机器学习中的置信区间(附代码)
- RabbitMQ 简介
- 利用Scala特征(trait)的堆叠操作特性进行切面编程
- 有关计算机组成原理知识的论文,关于计算机组成原理的论文_计算机组成原理_图灵机的组成...
- Leetcode--145. 二叉树的后序遍历(迭代递归)
- HTTP协议从入门到大牛,初识HTTP协议(学习笔记)
- iPhone未来怎么走?将融入脸部以及指纹辨识系统
- xenomai linux测试,Xenomai 实时线程 select 测试
- Ubuntu18.04 evo安装
- java培训之XML学习笔记(1)
- 系统应用和第三方应用跳转
- 【好题分享】适合C++初学者(数组的定义与初始化)
- 针对《面试心得与总结—BAT、网易、蘑菇街》一文中出现的技术问题的收集与整理...
- Java Gradle入门指南之gretty插件(安装、命令与核心特性)
- 天梯赛题目练习L1-001,L1-002,L1-003
- 使用python连接clickhouse并发送邮件
- Java空指针异常处理
- 读论文《A Neural Probabilistic Language Model》
- 数字化转型与智能创新100个案例
- 馆1:图书编码与定位
热门文章
- java实现 xls转xlsx
- Excel随机任意数的加减乘除法
- qt 文件大图标、列表等样式切换_跬步千里,厚积薄发:深度操作系统v15.9版正式发布...
- CC1310 架构组成,TX/RX+WOR嗅探过程,低功耗方法
- 网络唤醒的原理原来是这样的,GET!
- 黑马程序员前端实战项目---PC端品优购(下)
- NP-Hard问题--世界七大数学难题之首
- 【正点原子Linux连载】第三章 RV1126开发环境搭建 摘自【正点原子】ATK-DLRV1126系统开发手册
- 〖大前端 - 基础入门三大核心之CSS篇③〗- CSS选择器之复合选择器与伪类
- 【PHP】PHP7新特性