免注册COM互操作和相关组件

时间:2009-10-29 16:03:02

标签: .net com interop regfreecom sxs

我们正在开发一个基于MFC的大型应用程序与少数托管(.NET)加载项的集成。与这些加载项的通信是通过COM完成的。

从历史上看,我们刚刚使用注册表将这些加载项(作为COM服务器)提供给应用程序。但是,现在我们正在尝试使用免注册的COM互操作来实现这一目标。

我们希望这些加载项能够与运行应用程序的目录位于一个单独的目录中 - 最好是在任何地方。但是,由于无法解析依赖程序集,我们显然遇到了服务器对象实例化的问题,这些程序集也存在于COM服务器DLL的目录中。

“老式”COM互操作在加载目标程序集时使用LoadFrom上下文来处理此问题。但激活上下文机制似乎没有这样做。

有谁知道如何让它发挥作用?目前尚不清楚我们是否可以在模块的SxS清单中识别依赖程序集,或者我们是否可以以不同方式创建激活上下文?

感谢您的任何想法/提示!

杰夫

4 个答案:

答案 0 :(得分:1)

希望我理解这个问题,因为我对MFC项目不是那么熟悉,也不是它的约束。带有接口(永久注册到MFC应用程序)的“知名”.NET类如何处理所有激活和实例化?

罗德尼

答案 1 :(得分:0)

当我看到文章时 Simplify App Deployment with ClickOnce and Registration-Free COM我注意到它们在应用程序清单中引用了免注册COM对象DLL的文件名。我猜这个文件名可以改为包含目录等。

其次,在“更复杂的示例”一节中,它们包含依赖的COM对象作为其项目的引用,并将它们设置为隔离。也就是说,他们现在也免费注册。我的猜测是他们的路径也可以更新。

答案 2 :(得分:-1)

您是否使用.net框架注册了中间(互操作)dll?

C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm“path .. \ AxInterop.xxx.dll” 要么 C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm“path .. \ Interop.xxx.dll”

此致 Phani

答案 3 :(得分:-1)

打开visual studio命令提示符并尝试使用regasm注册程序集

regasm /tlb:"path"