这些天看COM/ATL的书,感觉到处都写着接口.
不管是COM异常处理,集合/枚举,还是连接点,处处都体现接口的光芒.如果你觉得某些实现必须要传递某个结构或一个数组---且慢!一定是接口设计没有到位!
接口粒度还不够小!1.传递结构数据的话,可以参考COM处理的实现
---用SetErrorInfo(,*IErrorInfo)和GetErrorInfo(,*IErrorInfo),来抛出或截获COM异常.
其实它也在作"传递有关异常的结构数据",但它采用的接口的方式.避免结构数据的传递.
最终结构数据的传递,是通过接口IErrorInfo中的一些get/set实现的.所以说,组件编程,要换脑子,避免以前养成的编程定势,处处要以接口方式思考问题.
可以将组件想象成一个芯片----只想怎样通过管脚来实现功能,而不是奢望打开芯片取数据---那是不可能的!!总结:组件编程,是不同于以往OP,OO编程的新的编程方式.-----一切都是接口!

解决方案 »

  1.   

    你这篇帖子里,大部分内容的对的!你越来越接近真理了。不过“如果你觉得某些实现必须要传递某个结构或一个数组---且慢!一定是接口设计没有到位!”这是错的。你的问题在于你目前一门心思看COM的书籍,而缺乏实践---自己做几个组件,或调用几个别人的组件,这样才好。用一用微软操作系统的一些组件,你会发现到处都是传递结构体或数组,根本不是什么新鲜事。呵呵。你现在还没有打破“技术的神秘感”,所以书上说不要传递结构体,你就说不要传递结构体。那么为什么不要传递结构体?坏处在哪里?COM的接口函数,与以前看到的C++类的公有函数,在二进制级别的实现上有什么不同吗?C是怎么实现COM接口的?C++又是怎么实现COM接口的?VB或Delphi大概是怎么实现的?了解到这些低层细节,COM就没有神秘感了。传不传递结构体,传不传递数组,完全根据具体问题的具体情况来取舍。没有能与不能,只有愿与不愿,这是真理殿堂的大门口。
      

  2.   

    不过补充一点,估计你目前是看到了Automation接口那旮沓,所以告诉说不能传递结构体或数据,呵呵。这倒是没错。自动化接口传递结构体或数据,到脚本语言客户端可能无法被理解。因为脚本语言弱智呗,还能因为啥~我个人的意见是只要不是与脚本语言通信,只要不是其他某模块必须要求自动化,否则尽量不使用自动化接口,甚至连Dual都不要。
      

  3.   

    支持 wishfly () AgedBOY(禁欲的情种)
      

  4.   

    >>AgedBOY(禁欲的情种) 
    不错!要包装的组建的确需要通过脚本语言和C++来调用,所以才有了“不要传递数组和结构”的感慨!这段时间看COM,以前自以为清楚的c++的概念有模糊了:)。只得又拿起c++的书看起来,c++真是博大精深啊!!!希望多多交流!
      

  5.   

    主要是因为多数脚本语言,如VBS JS之类,多为弱类型的,所以要通过automation类型来传递.
    当然也不是说传结构体不行,可以写一个COM组件定义一堆结构,将这个组件作为服务器端与客户端的数据传输通信协议来用,呵呵.