com
Hustudent20080101
MFC Qt 瑞萨 ARM Linux
展开
-
#import "..\Simple3\Simple3.tlb" no_namespace
// stdafx.h : include file for standard system include files,// or project specific include files that are used frequently, but// are changed infrequently//#if !defined(AFX_STDAFX_H__F0A6AE转载 2012-12-16 17:16:56 · 1002 阅读 · 0 评论 -
COM组件设计与应用(十六) 连接点(vc.net)
COM组件设计与应用(十六)连接点(vc.net)作者:杨老师下载源代码一、前言 上回书介绍了回调接口,在此基础上,我们理解连接点就容易多了。二、原理图一、连接点组件原理图。左侧为客户端,右侧为服务端(组件对象) 看着好复杂呀......呵呵,其实简单的紧:(注1)1、一个 COM 组件,允许有多个连接点对象(IConnectio转载 2012-04-19 15:45:32 · 1547 阅读 · 0 评论 -
客户端实现步骤
四、客户端实现步骤 大家下载示例程序后,去浏览客户端的实现程序吧。这里我只说明一下关于接收器是如何构造的:图八、从 ICallBack 派生接收器类 CSink 从 ICallBack 派生一个类 CSink。确认后 IDE 会有一个警告,说它找不到 ICallBack 的头文件,不用理它,因为只有当编译的时候,#import 才会为我们生成 xxxx.tlh、xxxx转载 2012-04-19 09:47:26 · 546 阅读 · 0 评论 -
事件和通知
一、前言 我的 COM 组件运行时产生一个窗口,当用户双击该窗口的时候,我需要通知调用者; 我的 COM 组件用线程方式下载网络上的一个文件,当我完成任务后,需要通知调用者; 我的 COM 组件完成一个钟表的功能,当预定时间到达的时候,我需要通知调用者; ... ... ... ... 本回书开始话说 COM 的事件、通知、连接点......这些内容比较多,我分两次(转载 2012-04-18 21:39:51 · 457 阅读 · 0 评论 -
错误信息接口
三、错误信息接口 既然 COM 是靠各种各样的接口来提供服务的,于是很自然地就会想到,是否有一个接口能够提供更丰富的错误信息报告那?答案是:ISupportErrorInfo。下面这段代码是使用 ISupportErrorInfo 的一般方法:STDMETHODIMP Cxxx::fun(){ ... ... ... ... CComQIPtr spCEI; ::CreateE转载 2012-04-18 15:27:07 · 658 阅读 · 0 评论 -
错误与异常处理
一、前言 程序设计中,错误处理必不可少,而且通常要占用很大的篇幅。本回书着落在 COM 中的错误(异常)的处理方法。 在组件程序中,如果遇到错误,一般有两个方式进行处理。二、简单返回 对于比较简单的错误,直接返回表示错误原因的 HRESULT。比如下面几个就是常见的错误值: E_INVALIDARG0x80070057参数错误E_O转载 2012-04-18 15:24:22 · 763 阅读 · 0 评论 -
组件实现步骤
三、组件实现步骤1、建立一个工作区(WorkSpace)2、在工作区中,建立一个 ATL 工程(Project)。示例程序中工程名称叫 Simple11,接受全部默认选项。3、ClassView 中,执行鼠标右键菜单命令 New Atl Object...,添加 ALT 类。 3-1、左侧分类 Category 选择 Objects,右侧 Objects 选择 SimpleOb转载 2012-04-19 09:46:09 · 608 阅读 · 0 评论 -
编写支持错误处理的组件程序
六、编写支持错误处理的组件程序 非常简单,只要在增加 ATL 组件对象的时候选中 ISupportErrorInfo 即可。图三、vc6.0 中,选中组件支持错误处理接口图四、vc.net 2003 中,选中组件支持错误处理接口转载 2012-04-18 15:31:35 · 397 阅读 · 0 评论 -
客户端接收组件的错误信息
五、客户端接收组件的错误信息 1、如果使用 API 方式调用组件,接收错误的方法是:HRESULT hr = spXXX->fun() // 调用组件功能if( FAILED( hr ) ) // 如果发生了错误{ CComQIPtr spSEI = spXXX; // 组件是否提供了 ISupportErrorInfo 接口? if( spSEI ) // 如果支持,那么转载 2012-04-18 15:30:16 · 518 阅读 · 0 评论 -
关于 try/catch
四、关于 try/catch 学习了 C++ 后,很多人都喜欢使用 try/catch 的异常处理结构。如果你使用 vc6.0 的ATL,编译器默认是不支持异常处理的,编译后会报告“warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify -GX”,解决方法是手工加上编译开转载 2012-04-18 15:28:42 · 550 阅读 · 0 评论 -
使用方法
三、使用方法 如果你的开发环境是 vc6.0,那么我们使用第九回中的Simple6组件为例,快去下载呀...... 如果你的开发环境是 vc.net 2003,那么用第十回中的Simple8组件为例,快去下载呀...... 嘿嘿,其实不下载也没有关系,因为你只要下载本回的示例程序,里面已经包含了所需的组件。但使用前不要忘了去注册呀:regsvr32.exe simpl转载 2012-04-18 14:48:26 · 521 阅读 · 0 评论 -
CLSID Type Library 保证全球唯一
CLSID 和Type Library由于要记录到注册表中,用于区分不同组件,因此要在整个系统上可以区分,也就要求在全球的Windows系统上可以区分。IID_XXX仅用于在组件与客户程序内部区分不同的接口,所以只要求整个组件内可以区分,就不担心组件之间出现重复了。原创 2012-04-18 09:34:34 · 750 阅读 · 0 评论 -
关于编译
二、关于编译 2-1 最小依赖 “最小依赖”,表示编译器会把 ATL 中必须使用的一些函数静态连接到目标程序中。这样目标文件尺寸会稍大,但独立性更强,安装方便;反之系统执行的时候需要有 ATL.DLL 文件的支持。如何选择设置为“最小依赖”呢?答案是:删除预定义宏“_ATL_DLL”,操作方法见图一、图二。图一、在vc6.0中,设置方法图二、在 vc.net转载 2012-04-18 08:02:10 · 457 阅读 · 0 评论 -
IDispatch 接口和双接口
二、IDispatch 接口和双接口 使用者要想调用普通的 COM 组件功能,必须要加载这个组件的类型库(Type library)文件 tlb(比如在 VC 中使用 #import)。然而,在脚本程序中,由于脚本是被解释执行的,所以无法使用加载类型库的方式进行预编译。那么脚本解释器如何使用 COM 组件那?这就是自动化(IDispatch)组件大显身手的地方了。IDispatch转载 2012-04-18 13:14:14 · 1731 阅读 · 0 评论 -
.idl与.odl的区别
A:odl和.idl在com中的功能相同.前者是ActiveX中的 后者是ATL中.可在前者的文件中 用 #import "XXXXX.idl " 的方式包含后者. 反过来没有试过. B:odl ---对象描述语言idl ---接口描述语言其实是一个功能就是在写法上有些不同,eg:odl:[转载 2012-04-18 10:45:50 · 1180 阅读 · 0 评论 -
CLSID Type Library 注册表结构
Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\CLSID\{C6F241E2-43F6-4449-A024-B7340553221E}]@="Mathe Class"[HKEY_CLASSES_ROOT\CLSID\{C6F241E2-43F6-4449-A024-B7340553221E}\InprocS原创 2012-04-18 09:19:23 · 1531 阅读 · 0 评论 -
关于组件调用
四、关于组件调用 总的来说,调用组件程序大概有如下方法: #include 方法IDL编译后,为方便C/C++程序员的使用,会产生xxx.h和xxx_i.c文件。我们真幸福,直接#include后就可以使用了#import 方法比较通用的方法,vc 会帮我们产生包装类,让我们的调用更方便加载类型库包装类 方法如果组件提供了 IDis转载 2012-04-18 08:15:58 · 543 阅读 · 0 评论 -
COM 组件设计与应用(十七)——持续性
COM 组件设计与应用(十七)——持续性作者:杨老师下载源代码一、前言 我们写程序,经常需要实现这样的需求:例一、程序运行产生一个窗口,用户关闭的时候需要记录窗口的位置,以便下次运行时保持位置不变;例二、由于程序运行时间很长,今天执行一部分,明天继续执行。那么在下次运行前要恢复前次的状态;... ... ... ...智慧的老师:以上这些需求,如何转载 2012-04-19 16:11:38 · 667 阅读 · 0 评论 -
连接点
连接点(vc6.0)作者:杨老师下载源代码一、前言 上回书介绍了回调接口,在此基础上,我们理解连接点就容易多了。二、原理图一、连接点组件原理图。左侧为客户端,右侧为服务端(组件对象) 看着好复杂呀......呵呵,其实简单的紧:(注1)1、一个 COM 组件,允许有多个连接点对象(IConnectionPoint)。 也就转载 2012-04-19 14:00:42 · 557 阅读 · 0 评论 -
实现组件(一)
三、实现组件(一)1、建立一个工作区(WorkSpace)2、在工作区中,建立一个 ATL 工程(Project)。示例程序中工程名称叫 Simple15,接受全部默认选项。3、ClassView 中,执行鼠标右键菜单命令 New Atl Object...,添加 ALT 类。4、左侧分类 Category 选择 Objects,右侧 Objects 选择 SimpleObje转载 2012-04-19 14:03:38 · 468 阅读 · 0 评论 -
.NET COM+技术
.NET COM+技术分类: C#__base2007-10-10 15:22 464人阅读 评论(0) 收藏 举报 一、问题的提出:(下面举出我遇到的问题) 1、最终用户的每次请求,都将读取Mapping文件--可以通过缓存解决; 2、xxx子系统需要不断的写入Mapping文件--也可以先写入内存然后批量写入文件解决; 二、分析解决问题: 由于分别有转载 2012-12-15 21:40:39 · 713 阅读 · 0 评论 -
COM组件
3.COM组件编辑本义项求助编辑com目录简介技术内幕COM与C++区别COM+特性COM是个开放的组件标准COM组件类型编辑本段简介 什么是COM组件 COM是Component Object Model (组件对象模型)的缩写。 用户需要什么样的软件产品?这转载 2012-12-15 21:28:31 · 691 阅读 · 0 评论 -
COM, COM+ and .NET 的区别
所有的优秀程序员都会尽自己的最大努力去使自己所写的程序具有更好的可重用性,因为它可以让你快速地写出更加健壮和可升级性的程序。 有两种使代码重用的选择: 1.白盒:最简单的一种,就是把你的程序片拷贝到另一个文件中。 2.黑盒:它包括把编译过的程序片连接起来。因此客户端可以调用的编译过的黑盒类库就叫作组件。 .Net中也同样为开发者提供了类似于COM的建立和展开转载 2012-12-15 21:34:09 · 694 阅读 · 0 评论 -
LINUX下的COM实现----XPCOM
xpcom 组件开发技术分类: C/C++2010-03-30 18:56 300人阅读 评论(1) 收藏 举报COM技术作为微软推行的一种组件技术,在WINDOWS平台站有重要地位,在模块重用,跨语言通信等方面都能见到其身影。但今天 给我要介绍的是LINUX下的COM实现----XPCOM,这是MOZILLA浏览器项目中所使用的基本技术,我们可以用C++制作XPCOM组件转载 2012-12-23 16:35:06 · 1011 阅读 · 0 评论 -
COM 组件设计与应用(二)——GUID 和 接口
COM 组件设计与应用(二)——GUID 和 接口发布日期:2005-06-21 16:36浏览次数:3069次标 签:COM文章概要:书接上回,话说在 doc(Word) 复合文件中,已经解决了保存 xls(Excel) 数据的问题了。那么,接下来又要解决另一个问题:当 WORD 程序读取复合文件,遇到了 xls转载 2012-12-10 08:35:33 · 753 阅读 · 0 评论 -
tlb tlh tli文件(COM)
tlb tlh tli文件(COM) (2012-02-01 11:03:31)转载▼标签: 杂谈分类: Win32tlb文件:com类型库文件。在需要使用对应com类的模块里,“#import ...*.tlb”使用之。tlh、tli文件:他们是vc++编译器解析tlb文件生成的标准c++文件。因为odl和t转载 2012-08-16 15:00:27 · 1800 阅读 · 0 评论 -
COM线程模型(一)
本文讲解COM提出的各个类型的线程模型,再说明COM运行时期库是如何实现它们的线程模型是一种数学模型,专门针对多线程编程而提供的算法,但也仅是算法,不是实现。本文讲解COM提出的各个类型的线程模型,再说明COM运行时期库是如何实现它们的,就像说明Windows是如何实现线程这个数学模型的一样,最后指明一下跨套间调用和各种类型套间编写的要求以帮助理解。希望读者对于Windows操作系统的线程转载 2012-05-20 09:12:34 · 602 阅读 · 0 评论 -
COM线程模型(五)
根据上面所说,STA其实和MTA逻辑上是完全一样的,只是一个是关联一个线程,一个是关联多个线程而已。但把它们分开是必要的,因为线程安全就是针对是一个线程还是多个线程。而NA之所以不关联线程是因为它的目的是消除上面跨套间调用时产生的线程切换损耗,关联线程没有任何意义。COM强行规定(不遵守也没辙,因为全是COM实现套间的,根本没有插手的余地)一个进程可以拥有多个STA的套间,但只能拥有一个M转载 2012-05-20 09:26:27 · 689 阅读 · 0 评论 -
COM线程模型(四)
外界(不属于这个套间的线程)对这个套间里的对象的调用将会导致调用线程(外界线程,也就是STA线程,因为NA没有线程)挂起,然后向RPC管理的一个线程池请求一个线程(RPC线程,并已经进入了这个MTA套间)以调用那个对象的方法。对象返回后,调用线程被唤醒,继续运行。虽然可以让STA线程直接调用对象(而不用像前述的挂起等待另一个线程来调用对象),但这是必须的,因为可能会有回调问题,比如这个MTA线程又转载 2012-05-20 09:21:43 · 579 阅读 · 0 评论 -
COM线程模型(三)
COM套间 Apartment被翻译成套间或是单元,是线程模型的一个实现者,就像在操作系统课程中讲到的线程只是一个数学模型,而Windows的线程、进程是它(数学模型的线程、进程)的实现者。套间只是逻辑上的一个概念,实现时只是一个结构(由COM管理)而已,记录着相关信息,如它的种类(只能是上面那三个,至少现在是),并由COM根据那个结构进行相应的处理。下面说明这三种套间的实现方式:转载 2012-05-20 09:17:49 · 577 阅读 · 0 评论 -
COM线程模型(七)——the end
汇集代码前面已经说明了套间的规则都是通过对代理对象而非组件对象发起调用以截取对组件对象的调用由代理对象来实现的。代理对象要和组件对象交互,将方法参数传递给组件对象,需要使用到汇集技术,也就是列集→传输→散集这个过程。列集(Marshaling)指将信息以某种格式存为流(IStream*)形式的操作;散集(Unmarshaling)则是列集的反操作,将信息从流形式中反还出来;传输则只转载 2012-05-20 09:32:04 · 648 阅读 · 0 评论 -
COM线程模型(六)
当是进程外组件时,由主函数调用CoInitializeEx或CoInitialize指定组件所在套间,与上面的相同,CoInitialize代表STA,CoInitializeEx( NULL, COINIT_MULTITHREADED );代表MTA,没有NA。因为NA是COM+提供的,而COM+服务只能提供给进程内服务器,因此只使用上面的注册表项的规则决定DLL组件是否放进NA套间,而没有提供转载 2012-05-20 09:28:26 · 792 阅读 · 0 评论 -
COM线程模型(二)
STA 一个对象只能由一个线程访问(通过对象的接口指针调用其方法),其他线程不得访问这个对象,因此对于这个对象的所有调用都是同步了的,对象的状态(也就是对象的成员变量的值)肯定是正确变化的,不会出现线程访问冲突而导致对象状态错误。其他线程要访问这个对象,必须等待,直到那个唯一的线程空闲时才能调用对象。注意:这只是要求、希望、协议,实际是否做到是由COM决定的。如上所说,这个模型很像Windows提转载 2012-05-20 09:14:49 · 560 阅读 · 0 评论 -
CoClass(即COM接口类),实例化模式和线程模型
然后将显示Remote Data Module向导(见图15.2)。该向导过程中,您需要输入CoClass(即COM接口类)的名字、实例化模式和线程模型。COCLASS名 当在Remote Data Module向导中输入CoClass名字时,实际是在定义自动化接口的类名。该值将成为远程数据模块的name特性,加上前缀T后,就是数据模块的类名。新的远程数据模块继承了TRemoteDataMo转载 2012-05-14 14:59:08 · 2588 阅读 · 0 评论 -
COM组件设计与应用(十八)——属性包
COM组件设计与应用(十八)——属性包作者:杨老师下载源代码一、前言 书接上回,本回着落在介绍属性包 IPersistPropertyBag 接口的实现方法和调用方式。属性包,是以“名称 - 值”的方式提供组件持续性的支持,而“名称 - 值”恰恰又适合于用文本方式来表现。下面的片段是在 HTML 中插入 Microsoft MonthView Control Ac转载 2012-04-23 09:33:00 · 743 阅读 · 0 评论 -
示例(二) library MULTCONNECTLib
五、示例(二) 示例程序中的第2个组件(MultConnect),我们再增加一个连接点( _IDispConnectEvents2 )。这个接口对象负责完成一个时钟,每间隔一定的毫秒就向调用者发出“时钟事件”。增加第二个连接点的方法是要手工修改 IDL 文件......library MULTCONNECTLib{ importlib("stdole32.tlb"); imp转载 2012-04-19 15:37:18 · 501 阅读 · 0 评论 -
#import 指令 (c++)
#import 指令 (c++)Visual Studio 11其他版本此主题尚未评级 - 评价此主题[本文档仅供预览,并可能在以后的版本中更改。 Blank topics are included as placeholders.]C++ 特定用于将类型库的信息。 该类型库的内容转换为 C转载 2012-04-18 08:06:45 · 2601 阅读 · 0 评论 -
填写接口属性
填写接口属性,见图四。图四、接口属性 Threading Model 选择组件支持的线程模型。COM 中的线程,我认为是最讨厌,最复杂的部分。COM 线程和公寓的概念,留待后续介绍。现在吗......大家都选 Apartment,它代表什么那?简单地说:当在线程中调用组件函数的时候,这些调用会排队进行。因此,这种模式下,我们可以暂时不用考虑同步的问题。(注1) Int转载 2012-04-17 19:46:04 · 925 阅读 · 0 评论 -
参数传递方向
四、参数传递方向 在C语言的函数声明中,尤其当参数为指针的时候,你是看不出它传递方向的。比如:void fun(char * p1, int * p2); 请问,p1、p2 哪个是入参?哪个是出参?甚或都是入参或都是出参?由于牵扯到内存分配和释放等问题,COM 需要明确标注参数方向。以后我们写程序,就类似下面的样子: HRESULT Add([in] long n1,转载 2012-04-17 16:57:08 · 749 阅读 · 0 评论 -
ActiveX 文档服务器中的IOleDocument 接口。。。
在 ActiveX 文档服务器中的IOleDocument 接口使一个文档对象能够与其包容器进行通信,并用其数据去创建视图,该接口也可以使一个文档对象能够枚举其视图并为包容器提供相关信息,如是否支持多视等。IOleDocumentView 接口则使一个包容器程序能够通过文档对象的支持而与每一个视图进行通信。IOleCommandTarget接口可以使服务器对象及其包容器程序分发命令转载 2012-04-02 10:28:59 · 965 阅读 · 1 评论