2010-06-02 68 views
5

“传统”方式是指在注册表中注册DLL。“传统”COM和COM +之间的区别(在组件服务中)

似乎还有另一种方法可以通过转到mmc-> Component Services-> COM + Applications并添加.tlb文件来设置它。

我有一个支持这两种方法的COM库。安装时,它将自己注册为注册表中的COM组件,并且它工作正常。但是,当我使用组件服务方法添加.tlb文件时,行为似乎不同并且它开始发出错误。

我怀疑它与编组和进程间对象传输有关吗? (对不起,我真的是COM领域的noob)

任何人都可以点我一个很好的资源来清除我的理解?

+0

什么是一些错误? – N0Alias 2010-06-02 04:26:41

+0

我有一个方法'X.Method()',它接受另一个类型'X',这意味着类似'void Method(X another)'。运行此方法会给我“无法将System .__ ComObject转换为X” – kizzx2 2010-06-02 05:50:41

回答

9

COM +(组件服务)提供了很多开箱即用的基础设施;例如COM +提供事务,安全性,对象池和其他一些服务。

当您在COM +下注册COM组件时,它将运行“Out Of Process”;在这种模式下,你可以保证你的COM服务器和它的客户端之间有代理。

我可以学习更多有关COM +想到的最好的地方是官方网站MS:http://msdn.microsoft.com/en-us/library/ms685978(VS.85).aspx

希望这有助于。

+2

COM组件是否将处于out-proc取决于您如何注册它。如果选择“服务器应用程序”,它将会处于运行状态,但如果选择“库应用程序”,它将处于进程状态。 – sharptooth 2010-06-02 05:26:55

+0

因此,如果我创建它在proc中,是不是我登记注册表,然后调用'CoCreateInstance'? – kizzx2 2010-06-02 05:45:51

+1

无论如何您都使用CoCreateInstance()。只是COM +拦截了这个调用并在out-proc服务器上创建。我没有得到COM +库应用程序 - 甚至有一个问题http://stackoverflow.com/questions/1762823/whats-the-purpose-of-com-library-applications – sharptooth 2010-06-02 06:10:39

3

同意上一篇文章。

需要补充的一件事:实际注册类型库(.tlb文件)对于COM来说也是正常的,不仅适用于COM +。 类型库由IDL编译器自动生成。它包含您的界面和对象的描述。

这样就可以将COM组件导入到某个项目中,并且界面和对象的定义是可见的。

4

COM是在本地机器上使用的组件对象模型,但COM +是Com plus activex功能。意味着它可以作为远程使用。

COM +是Microsoft组件对象模型(COM)和Microsoft Transaction Server(MTS)的演变。 DCOM:分布式COM。该协议使COM对象能够在使用代码的另一台计算机上实例化。该协议使用代码

MTS:Microsoft Transaction Server。 MS如何协调跨多个服务器的事务。

COM +处理许多以前必须对自己进行编程的资源管理任务,例如线程分配和安全性。通过提供线程池,对象池和即时对象激活,COM +还使您的应用程序更具可扩展性。可以使用COM +为Windows开发分布式应用程序。

如果您是应用程序员,您将编写组件并将它们作为应用程序进行集成。 COM +主要设计用于Microsoft Visual C++和Microsoft Visual Basic开发人员。