这些天看COM/ATL的书,感觉到处都写着接口.该怎么解决

这些天看COM/ATL的书,感觉到处都写着接口.
这些天看COM/ATL的书,感觉到处都写着接口.
不管是COM异常处理,集合/枚举,还是连接点,处处都体现接口的光芒.

如果你觉得某些实现必须要传递某个结构或一个数组---且慢!一定是接口设计没有到位!
接口粒度还不够小!

1.传递结构数据的话,可以参考COM处理的实现
---用SetErrorInfo(,*IErrorInfo)和GetErrorInfo(,*IErrorInfo),来抛出或截获COM异常.
其实它也在作 "传递有关异常的结构数据 ",但它采用的接口的方式.避免结构数据的传递.
最终结构数据的传递,是通过接口IErrorInfo中的一些get/set实现的.

所以说,组件编程,要换脑子,避免以前养成的编程定势,处处要以接口方式思考问题.
可以将组件想象成一个芯片----只想怎样通过管脚来实现功能,而不是奢望打开芯片取数据---那是不可能

的!!

总结:组件编程,是不同于以往OP,OO编程的新的编程方式.-----一切都是接口!

------解决方案--------------------
你这篇帖子里,大部分内容的对的!你越来越接近真理了。

不过“如果你觉得某些实现必须要传递某个结构或一个数组---且慢!一定是接口设计没有到位!”这是错的。

你的问题在于你目前一门心思看COM的书籍,而缺乏实践---自己做几个组件,或调用几个别人的组件,这样才好。

用一用微软操作系统的一些组件,你会发现到处都是传递结构体或数组,根本不是什么新鲜事。呵呵。你现在还没有打破“技术的神秘感”,所以书上说不要传递结构体,你就说不要传递结构体。那么为什么不要传递结构体?坏处在哪里?COM的接口函数,与以前看到的C++类的公有函数,在二进制级别的实现上有什么不同吗?C是怎么实现COM接口的?C++又是怎么实现COM接口的?VB或Delphi大概是怎么实现的?

了解到这些低层细节,COM就没有神秘感了。传不传递结构体,传不传递数组,完全根据具体问题的具体情况来取舍。

没有能与不能,只有愿与不愿,这是真理殿堂的大门口。
------解决方案--------------------
支持 wishfly () AgedBOY(禁欲的情种)
------解决方案--------------------
主要是因为多数脚本语言,如VBS JS之类,多为弱类型的,所以要通过automation类型来传递.
当然也不是说传结构体不行,可以写一个COM组件定义一堆结构,将这个组件作为服务器端与客户端的数据传输通信协议来用,呵呵.