我有一个我开发的免注册 COM 组件,它在目标机器上运行良好,无需注册该组件。它位于一个嵌入了 tlb 的 dll 和一个 RT_MANIFEST 资源中,该资源具有列出组件依赖项和 CLSID 的 list 。

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

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

最佳答案

理解 COM 组件在编译时和运行时使用之间的区别很重要。 Reg-free COM 纯粹是一个运行时特性。您编写的描述 COM 接口(interface)的 list 是免注册部分。您不必在机器的注册表中注册 COM 组件。您可以在文件中提供注册信息。这意味着您不需要安装程序。这也意味着您不会遇到注册问题。更好地称为 DLL hell 。

注册表中的键或 list 中的条目对于帮助 COM 确定当 COM 客户端要求它创建 COM 对象的实例时需要加载什么 DLL 很重要。

这与编译时非常不同。类型库非常有助于告诉编译器您是否编写了正确的代码。 COM 组件真的有 IFoo 接口(interface)吗? IFoo 接口(interface)真的有一个接受两个参数的 Mumble() 方法吗?类型库告诉编译器接口(interface)是什么样的,并允许编译器对您编写的代码进行静态检查。与“后期绑定(bind)”不同,顺便说一句,该选项允许您在没有类型库的情况下编写 COM 客户端代码(因此无需类型检查)。常见于脚本语言。

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

关于visual-studio - 免注册 COM 组件可以在没有在开发机器上注册的情况下使用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6351226/

10-17 00:26