thanks

解决方案 »

  1.   

    列集(marshalling)       说到代理和存根,自然少不了列集,什么是列集?       列集,对函数参数进行打包处理得过程,因为指针等数据,必须通过一定得转换,才能被另一组件所理解,列集完成后,RPC调用就会产生。可以说列集是一种数据格式的转换方法。 列集有3种方式:1. 类型库列集       它可以列集与OLEAUTOMATION兼容的任何接口,意思是你的接口的返回值必须是HRESULT,所使用的参数的类型也应该是与C++的VARIANT结构兼容。2. 通过创建Stub / proxy DLL       这个DLL的源代由MIDL产生。你必须在服务器和客户机上都注册这个DLL(这是标准的marshal 方式)使用吃方法时,最好把stub / proxy代码编译作为一个独立的组件。3. 自定义marshaling       自定义marshal要求在你的组件中必须实现IMarshal接口。当COM需要marchal时,他首先通过QueryInterface看你是否支持IMarshal接口,如果你实现了该接口,也就是说,由你控制了你的COM的所有参数和返回值的打包、解包的方法模式。
      

  2.   

    marshal对函数参数和返回值进行打包处理似的不同线程或进程之间能够通过RPC通信,有对象marshal,接口marshal等