300分讨论COM技术问题 ( 积分: 300 )

  • 主题发起人 主题发起人 dinglj1760
  • 开始时间 开始时间
D

dinglj1760

Unregistered / Unconfirmed
GUEST, unregistred user!
基于COM的插件
1.插件制作
原理很简单,定义一个接口规范,每个插件都实现该接口就OK了。(这似乎没啥好讨论的)
2.插件和主程序的通信
如何将主程序的Application传递给插件,如何让插件去操作主程序的控件,比如,主程序中有一个公用的DBgrid,插件如何将将查询回来的数据集传递给它,等等其他的通信
3.一个跟COM没啥关系的问题
最近在搞ActionManager,觉得这控件挺好用的,但是想结合插件的功能,所以想拓展ActionManager,但没有一点思路,请大家指点指点。谢谢。
刚学COM不久,很多不懂,请大家谅解。。
 
基于COM的插件
1.插件制作
原理很简单,定义一个接口规范,每个插件都实现该接口就OK了。(这似乎没啥好讨论的)
2.插件和主程序的通信
如何将主程序的Application传递给插件,如何让插件去操作主程序的控件,比如,主程序中有一个公用的DBgrid,插件如何将将查询回来的数据集传递给它,等等其他的通信
3.一个跟COM没啥关系的问题
最近在搞ActionManager,觉得这控件挺好用的,但是想结合插件的功能,所以想拓展ActionManager,但没有一点思路,请大家指点指点。谢谢。
刚学COM不久,很多不懂,请大家谅解。。
 
COM是跨语言的,而Application,DBGrid等对象是特定语言的对象,而且还是区分版本,既然你的COM只用DELPHI调用,那还要写成COM干什么呢?
 
问题2,学ie的,在某个地方记录插件的guid,然后由application根据记录的去调用。IE是记录在注册表里,调用插件的时候可以把你希望插件操作的对象传递给插件。
 
to ysai:
说的对。但往往为了分工协助,是有这个需求的。
to satanmonkey:
插件的GUID的确是记录下来了,就跟Word一样,写在配置文件中,主程序启动的时候就去读取配置信息。至于你说的调用的时候去传递参数似乎是个变通的方法。呵呵
 
dinglj1760
你非常聪明也非常愚蠢,聪明的地方是你居然思考着利用COM来实现你的目的,愚蠢的地方是你对COM啥也不懂就想用COM。

如果用COM来实现,你应该实现的是一个OCX客户控件。连同你的COM服务,你甚至连具体的客户都不用写。
同样的,如果你选择了COM,难到你的COM比SQL的COM更强,所以你要写一个DBgrid在里头做SQL的代理?你强啊!

所以,我说你是聪明的笨蛋!
 
to flamingo:
呵呵,先不论我的做法是何用意。就具体问题讨论而言,上述的Ddgrid只是我举的一个例子,想说明的是主程序和插件之间的通信问题。
至于你说的一个一个的OCX,那只是我实现的一个一个的插件,至于插件的制作,在第一点我已经说明,我就不多说了。
说实话,我对COM了解的的确不够深入,真的希望有人能够指点我。
 
delphi对com的支持不怎么样啊
 
楼上的说的不对,delphi对com支持很全面,当年为了支持com专门引入了接口。
 
com只是支持局域网的, 不适合于广域网啊。要分清应用环境啊啊
 
jangill说的很对
 
//如何将主程序的Application
你应改传递过去的不是 Application而是IApplication,就是说传递过去的也只是一个接口而不是对象。
//一个跟COM没啥关系的问题
基本上你可以用一个很简单的包装类是先你所需要的接口,在包装/代理类中访问对象.
 
zjan521兄的话,让我茅塞顿开。都凌晨三点,老兄还在忙着回帖呐,让小弟十分佩服。。
 
第一,第二个问题都可以归结为你的接口定义的问题。
建议你重新定义你的接口,连数据传递,通信的问题都还没有定义好处理方式,这说明你的接口没有通用性,重新定义吧。重新提炼你的需求,不要急于编码。
 
to kkkchenA:
我也觉得接口可以实现传递必要信息,也正如zjan521兄所说,但我目前对COM的了解不是很深入,能否举点例子来示范一下。
 
后退
顶部