|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(SunMicrosystems)公司的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发。念书成绩一:“主动化在很多分歧的方面用开辟职员编写的代码来取代编译器天生的代码......”叨教这句话怎样了解?(第11章,分发接口与主动化,P231)
答:这句话粗心是说:我们本来所写的使用,都是源码一级,必要经由编译器编译,才干实行,如今,用剧本言语来操纵主动化接口,能够静态的完成不异的使用(实际上是注释实行)。
一个复杂的例子,你一定没有Word的源码,假如你想用Word来天生一个针对详细使用范畴(例如说当局公函)的使用,你只能找有源码的公司来修正源码,以顺应你的特别必要。(微软听你的?)
可是,你能够用主动化接口来定制你的特定使用,用VBA剧本来把持Word的主动化接口就能够完成。是的,注释实行是慢了些,可是,对你来讲不必改源码,不必再往测试你修正的源码部分,不是更好吗?
念书成绩二:“若C++程序员想在运转时重新入手下手机关一个vtbl,那他能够完整自行决意怎样机关。另外一方面......”这段话应怎样了解?(第11章,分发接口与主动化,P234)
答:是的,一个VTBLE的天生是由你所用的编译器替你完成的,可是,假如你分明了vtbl的机关历程,你能够仿造一个出来。倡议读:《COM实质论》+《InsideC++ObjectModel》,要有很好的心思筹办,啃硬骨头。
念书成绩三: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也是大概的,请参阅1-2”
1、用COM接口怎样完成Invoke?
2、1-2中FooBar不是COM接口吧(没有IUnknown那三个函数)?
答:COM是更好的C++,COM的完成实在自创了良多C++的完成体例,好比,使用我后面所说的vtbl,
依照划定,我以为我们不该该把1-2的FooBar称为COM接口,可是,在狭义的局限内,因为利用了vtbl,能够委曲以为他也是一个COM接口,(假如作者非要如许讲的话 ^_^)
念书成绩之六:分发接口是COM接口(切合COM接口的界说吗)?它跟Invoke函数有何干系?假如不是COM接口,那末分发接口的界说是甚么?
答:分发接口能够是COM接口,也能够不是,这只是完成时的分歧体例罢了,分发接口是一个观点,外部应当包括两个数组,一个寄存dispid与接口办法称号的对值(pair),一个寄存的是dispid与接口办法指针(也就是函数指针)的对值。只需有这两部分我们就以为它是一个分发接口,至因而不是COM接口,那都无所谓。
Invoke的时分,必要供应dispid和对应的参数,如许,就能够使用分发接口的详细完成机制失掉函数指针举行功效挪用了。
念书成绩之七:P234第七行:“IDispatch::Invoke的一个完成所完成的函数集被称作一个分发接口,和dispinterface......”Invoke是一个函数,怎样可以完成“函数集”?Invoke函数跟分发接口之间是甚么干系?
答:关于IDispatch::Invoke,我们能够看一下它的运转历程:
在挪用Invoke之前,我们经由过程各类体例失掉了一个dispid,(不要觉得只要GetIDsOfNames才干失掉,我已经在一个组件里完成了依据形态分歧,将可实行的dispid静态传出,然后在组件内供应了一个办法,ExecuteCmd(dispid),如许客户程序也能够静态实行组件的接口办法了)。接口的实质就是一组函数指针的数组,而dispid就是函数指针数组的索引(注重,只要完成IDispatch接谈锋有dispid),经由过程指定索引,我们能够失掉指定的函数指针,如许我们能够用(*函数指针)(参数,参数…)的体例来挪用详细的接口办法了。
“等等......”我闻声你在喊,“我们的参数是以数组的情势传出去的,而你用函数指针挪用的时分是用参数列表的情势挪用的,我要如何才干完成它呢?”
是的,假如要你本人写一个Invoke的完成,光参数的压栈和范例处置就会累逝世你的,告知你一个好举措,用MS的API函数(DispCallFunc大概DispInvoke),大概用利用MFC/ATL对IDispatch完成的封装()(MFC用的是一个helper,而ATL用的是IDispatchImpl模版)。
分发接口是一个逻辑观点,它是指有个中央寄存了函数办法名和函数的指针,经由过程这个接口,你能够用指定的办法名来检索到函数的指针,最年夜的用途,是供应给剧本注释器利用。
如果你学习的是市场营销,是销售,也许参加大课堂的学习会更合适,因为你的工作能力中有个基础就是搭建自己的人脉, |
|