COM组件原理_Com组件

2022-11-16 18:18:35 浏览数 (1)

在COM中,接口就是一个抽象类,每个接口有一个接口ID(uuid)。一个COM组件通常是连续继承下来的类,比如 IUNknow ->IDispath->IXX->CXX。这就形成了一个COM组件,当然组件一般是一个钻石继承的样子,这里为了简化原理把他们当成一个串形继承下来。

每个COM组件都有一个CLSID(uuid),这个CLSID是注册的时候写进注册表的,可以把这个CLSID理解为这个组件最终可以实例化的子类的一个ID。这样就可以通过查询注册表中的CLSID来找到COM组件所在的dll的名称。然后调用的时候。会调用DllGetClassObject()函数, 这个函数中第一个参数是CLSID,表明想要调用DLL中的哪个组件(需要提醒的是,一个DLL中不一定只有一个组件)。第二个参数为IID。表明要返回这个组件的哪个接口。一般都会有IUnKnow 和IDispath接口。如果想用到IXX接口,就可以使用接口查询来转成IXX接口。如果想使用接口调度,不包含IXX的头文件来调用IXX的方法,就可以使用IDispath接口的Invoke方法。

需要注意的是:COM可以看作一种框架,但这个框架可大可小。有时候我们不需要太多的其它功能。就会对这个框架精简一些(如windows登录机制里的CP)。但原理还是一样的。所以遇到COM组件的时候不要一根筋,非要纠结这个与标准的COM的不同之处。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234630.html原文链接:https://javaforall.cn

0 人点赞