只能回答第2题,msdn中有一本书inside ole,hehe

解决方案 »

  1.   

    Native data 
    The data used by an OLE server application when editing an embedded object. See also Presentation data. Presentation data 
    The data used by a container to display embedded or linked objects. See also Native data. 
    上述由MSDN中获得。
    我的理解是这样的:在OLE中存在嵌入和链接两种方式,也存在SERVER和CLIENT(CONTAINER)两种关系。在CONTAINER中可以嵌入或链接入SERVER所提供的对象。这个对象由SERVER负责编辑和显示。当一个对象被放入一个CONTAINER中时,它自己本身有对应的信息,由自己处理。比如说对象是如何存放的,内容是如何组织的。而放入CONTAINER中的部分只是对象本身所提供的显示方法来完成的,也就是说是一个显示。这种显示数据与对象自身的数据不一定是完全一样的,它取决于对象中设计的方法。将一个对象的自身以及存放在CONTAINER中的数据联系起来是通过对象或SERVER所注册的CLSID来实现的。在CONTAINER中双击对象,由CONTAINER执行对象所提供的VERB,然后把处理交由对象具体完成。
    MSDN中的“INSIDE OLE”不错。
      

  2.   

    基本上就象929说的那样,在对象嵌入时,对象中保存了如何画出自身的数据,这样在没有Server介入的情况下,对象也可以在container中显示出来,但该数据只是用来显示对象的,一般是以元文件的形式放在对象中的cache中,这就是Presentation data 。(其实还可能有一种叫handler的东西,是一种轻量级的服务器,以dll的形式存在,可以实现Server的一定功能,与Server结合工作,可以提高效率--大部分工作都是在dll中完成的,在handler中不只有Presentation data ,还可能有native data,这要看它的具体实现而定).
    在Server中,对象不只要知道如何画出自身,还保存了对象的状态等数据,对象正是依据这些数据实现其功能的,当然对象在画出自己时也要参考这些数据,这就是Native data。
    当你打开文档,其中的嵌入(连接对象会更复杂一些,但原理差不多)对象,被读到内存中,container会要求该对象画出自身,为避免不必要的激活server,有handler完成此功能,如果该对象没有自己的handler,OLE提供了一个缺省的handler,handler读出对象中缓存的Presentation data,将他画在container提供的DC中,当你双击对象激活它时,或要编辑对象时,handler已无法处理此请求,只有激活server了,在server中对对象的改变导致native data改变,而Presentation data相应也会改变,这时server会通知handler数据已变化,并将新的Presentation data传给它,handler以此来更新对象的形象。
      

  3.   

    netmare的解释非常清楚,理解presentation data和 native data之间关系的关键在于handler,这也是OLE的复杂之处。在container-handler-server三者之间,有许多具体的规范,上面提到的是对于数据对象的处理,其他还有in-place editing、moniker(用于链接的情形)等。
    要想全面了解OLE,一定要读“Inside OLE”(2nd Edition),但是按照我的经验,读起来并不轻松。尽管这本书写在四、五年之前,但是读下来仍然会有许多收获,只是是否有实际意义,那是另一回事了。