可以使用免注册COM组件而无需在开发机器上注册它吗?

时间:2011-06-14 23:07:17

标签: visual-studio com regfreecom

我开发了一个免注册的COM组件,它可以在目标机器上正常工作而无需注册组件。它是一个嵌入了tlb的dll,以及一个RT_MANIFEST资源,它具有列出组件的程序集依赖关系和CLSID的清单。

在Visual Studio(2008)中,我仍然需要注册这个COM组件来做至少我尝试过的两件事。添加对组件的引用时,除非注册组件,否则无法为引用选择隔离属性。除非已注册组件,否则在调试器运行时也无法创建对象的实例。然而,我可以添加引用并编译应用程序并在不注册组件的情况下运行它。

有没有办法在Visual Studio中使用免注册COM组件而不注册它,或者是否必须在开发机器上注册才能使一切正常工作?

1 个答案:

答案 0 :(得分:8)

了解COM组件的编译时和运行时使用之间的区别非常重要。无Reg的COM纯粹是一个运行时功能。您编写的描述COM接口的清单是免注册部分。您不必在计算机的注册表中注册COM组件。您可以在文件中提供注册信息。这意味着您不需要安装程序。这也意味着您不会遇到注册问题。更好地称为DLL地狱。

注册表中的键或清单中的条目对于帮助COM找出COM客户端要求它创建COM对象实例时需要加载的DLL非常重要。

这与编译时非常不同。类型库非常有助于告诉编译器您是否编写了正确的代码。 COM组件真的有IFoo接口吗? IFoo接口真的有一个带有两个参数的Mumble()方法吗?类型库告诉编译器界面是什么样的,并允许编译器对您编写的代码进行静态检查。与'late-binding'btw不同,这是一个允许您在没有类型库的情况下编写COM客户端代码的选项(因此没有类型检查)。在脚本语言中很常见。

重申:免注册COM纯粹是关于安装,而不是编写代码。

相关问题