Mr.Victor

梦里不知身是客,一晌贪欢!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  COM编程

摘要:本实例是《杨老师之Blog——COM组件设计与应用(四)》中的实例四,本人实现后并加以注释。在阅读代码之前,先看一下关于“快捷方式”组件的结构示意图。 快捷方式组件的接口结构示意图 从结构图中可以看出,“快捷方式”组件(CLSID_ShellLink),有3个(其实不止)接口,每个接口完成一组相关功能的函数。IShellLink 接口(IID_IShellLink)提供快捷方式的参数读写功能(见下图),IPersistFile 接口(IID_IPersistFile)提供快捷方式持续性文件的读写功能。对象的持续性,是一个非常常用,并且功能强大的接口家族。但今天,我们只要了解其中两函数,就可以了 阅读全文

posted @ 2011-08-21 00:22 Mr-Victor 阅读(900) 评论(0) 推荐(0)

摘要:本实例是《杨老师之Blog——COM组件设计与应用(四)》中的实例三,本人实现后并加以注释。void CShowJPGView::OnDraw(CDC* pDC){ CShowJPGDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 ::CoInitialize(NULL); //初始化COM HRESULT hr; CFile file; file.Open("D:\\test.jpg",CFile::modeRead | CFile::shar 阅读全文

posted @ 2011-08-20 22:45 Mr-Victor 阅读(792) 评论(0) 推荐(0)

摘要:本文摘自:http://blog.vckbase.com/teacheryang/archive/2005/07/04/9135.html一、前言 在 VCKBASE 的顶力支持下,在各位网友回帖的鼓励下,我才能顺利完成系列论文的前三回。书到本回,我们终于开始写代码啦。写点啥那?恩,有了!咱们先从如何调用现成的简单的组件开始吧,同时也顺便介绍一些相关的知识。二、组件的启动和释放 在第三回中,大家用“小本本”记录了一个原则:COM 组件是运行在分布式环境中的 。于是,如何启动组件立刻就遇到了严重的问题,大家看这段代码: p = new 对象; p->对象函数(); delete p; 这样 阅读全文

posted @ 2011-08-20 20:59 Mr-Victor 阅读(815) 评论(0) 推荐(1)

摘要:本文摘自:http://blog.vckbase.com/teacheryang/archive/2005/06/27/8885.html一、前言 上回书介绍了GUID、CLSID、IID和接口的概念。本回的重点是介绍 COM 中的数据类型。咋还不介绍组件程序的设计步骤呀?咳......别着急,别着急!孔子曰:“饭要一口一口地吃”;老子语:“心急吃不了热豆腐”,孙子云:“走一步看一步吧” ...... 先掌握必要的知识,将来写起程序来才会得心应手也:-) 走入正题之前,请大家牢牢记住一条原则:COM 组件是运行在分布式环境中的。比如,你写了一个组件程序(DLL或EXE),那么使用者可能是在本机 阅读全文

posted @ 2011-08-20 20:53 Mr-Victor 阅读(445) 评论(0) 推荐(0)

摘要:本文摘自:http://blog.vckbase.com/teacheryang/archive/2005/06/27/8884.html一、前言 书接上回,话说在 doc(Word) 复合文件中,已经解决了保存 xls(Excel) 数据的问题了。那么,接下来又要解决另一个问题:当 WORD 程序读取复合文件,遇到了 xls 数据的时候,它该如何启动 Excel 呢?启动后,又如何让 Excel 自己去读入、解析、显示 xls 数据呢?二、CLSID 概念 有一个非常简单的解决方案,那就是在对象数据的前面,保存有处理这个数据的程序名。(见下图左上)图一、CLSID 的概念 这的确是一个简单的 阅读全文

posted @ 2011-08-20 20:46 Mr-Victor 阅读(592) 评论(0) 推荐(0)

摘要:本文摘自:http://blog.vckbase.com/teacheryang/archive/2005/06/27/8883.html一、前言 公元一九九五年某个夜黑风高的晚上,我的一位老师跟我说:“小杨呀,以后写程序就和搭积木一样啦。你赶快学习一些OLE的技术吧......”,当时我心里就寻思 :“开什么玩笑?搭积木方式写程序?再过100年吧......”,但作为一名听话的好学生,我开始在书店里“踅摸”(注1)有关OLE的书籍(注2)。功夫不负有心人,终于买到了我的第一本COM书《OLE2 高级编程技术》,这本800多页的大布头花费了我1/5的月工资呀......于是开始日夜耕读.... 阅读全文

posted @ 2011-08-20 19:55 Mr-Victor 阅读(463) 评论(0) 推荐(1)

摘要:以下代码出自《杨老师之Blog——COM组件设计与应用(四)》。地址:http://blog.vckbase.com/teacheryang/archive/2005/07/04/9135.html一、由CLSID得到ProgID(以Word为例子)void CGetProgIDFromCLSIDDlg::OnBnClickedButton1(){ ::CoInitialize(NULL); HRESULT hr; CLSID clsid = {0x209ff,0,0,{0xc0,0,0,0,0,0,0,0x46}}; LPOLESTR lpwProgID = NULL; hr = ::Pro 阅读全文

posted @ 2011-08-20 17:21 Mr-Victor 阅读(2406) 评论(0) 推荐(0)

摘要:本文摘自:http://www.cnblogs.com/wangliang651/archive/2006/07/07/445473.html(稍作修改)有时我们需要获得某个文件夹的路径,而不是文件的路径,这时需要用API函数SHBrowseForFolder来实现。函数原型为:LPITEMIDLIST SHBrowseForFolder(LPBROWSEINFO lpbi);其中LPBROWSEINFO为BROWSEINFO结构的指针。Visual C++(VC)中,BROWSEINFO结构中包含有用户选中目录的重要信息,其结构如下:typedef struct_browseinfo{ HW 阅读全文

posted @ 2011-08-20 16:33 Mr-Victor 阅读(740) 评论(0) 推荐(0)