首页 / 软件开发 / C++ / 《COM技术内幕》FAQ
《COM技术内幕》FAQ2011-04-25读书问题一:“自动化在许多不同的方面用开发人员编写的代码来代替编译器生成的代码......” 请问这句话如何理解?(第11章,分发接口与自动化,P231)答:这句话大意是说:我们原先所写的应用,都是源码一级,需要经过编译器编译,才能执行,现在,用脚本语言来操作自动化接口,可以动态的完成相同的应用(其实是解释执行)。一个简单的例子,你肯定没有Word的源码,如果你想用Word来生成一个针对具体应用领域(比方说政府公文)的应用,你只能找有源码的公司来修改源码,以适应你的特殊需要。(微软听你的?)但是,你可以用自动化接口来定制你的特定应用,用VBA脚本来控制Word的自动化接口就可以完成。是的,解释执行是慢了些,但是,对你来说不用改源码,不用再去测试你修改的源码部分,不是更好吗?读书问题二:“若C++程序员想在运行时从头开始构造一个vtbl,那他可以完全自行决定如何构造。另一方面......” 这段话应如何理解?(第11章,分发接口与自动化,P234)答:是的,一个VTBLE的生成是由你所用的编译器替你完成的,但是,如果你明白了 vtbl的构造过程,你可以仿制一个出来。建议读:《COM本质论》+《Inside C++ Object Model》,要有很好的心理准备,啃硬骨头。读书问题三:OleInitialize 和 CoInitialize(Ex)这两个函数有什么区别?P236倒数第六行有对OleInitialize的调用答:CoInitialize以及CoInitializeEx 是用来初始化COM运行环境的,就象练武的人在练武前先划了个圈,在圈里摆上了兵器。OleInitialize是初始化Ole的运行环境,Ole是在COM的基础上作的扩展,是ActiveX运行的基础。就象是在刚才的圈子里撑起了个钢丝,要表演钢丝上的表演一样。读书问题之四:P208页,关于对point_default关键字的解释,看不懂:1、“point_default关键字的作用就是告诉MIDL编译器在没有为指针指定其它属性时应如何处理此指针”“其它属性”都是些什么?2、“在函数内部,不能为它们指定别名......”,什么是别名?答:至于别名,是指MIDL语言中的typedef吧(非常抱歉,我对COM的调度部分没有太多的关注,只能简单回答,请你有了明确的答案后告诉我)。 读书问题之五:P234最后一句,“当然用COM接口来实现IDispatch::Invoke也是可能的,请参阅图11-2”1、用COM接口如何实现Invoke?2、图11-2中FooBar不是COM接口吧(没有IUnknown那三个函数)?答:COM是更好的C++,COM的实现其实借鉴了很多C++的实现方式,比如,利用我前面所说的vtbl,按照规定,我觉得我们不应该把图11-2的FooBar称为COM接口,但是,在广义的范围内,由于使用了vtbl,可以勉强认为他也是一个COM接口,(如果作者非要这样讲的话 ^_^)