使用托管应用程序中的本机注册免费C ++ COM服务器

时间:2014-06-11 09:33:38

标签: c# c++ .net com com-interop

我有一个本机C ++ COM Server dll,附带类型库(.tlb文件)和TlbImp.exe生成的.NET Interop程序集。服务器是免费注册的,我有一个清单来激活它的上下文。我想使用托管C#应用程序中的服务器。我在创建服务器类的对象之前激活上下文,但我不确定何时应该停用它?我找到了文章(http://www.mazecomputer.com/sxs/help/sxsapi2.htm),上面写着

  

请注意,与上面的C ++示例不同,我们还无法停用激活上下文。 COM Interop将需要上下文来定位进行COM对象调用所需的类型库。

我是否应该为所有或仅第一个COM对象调用激活上下文? MSDN网站上有关于此事的详细说明吗?

1 个答案:

答案 0 :(得分:2)

  

我有一个清单来激活它的上下文

在代码中显式调用Create / ActivateActCtx()对于无reg的COM服务器来说永远不是正确的做法。有一些极端情况可能很有用,但仅适用于引用并排安装的程序集的清单条目。在c:\ windows \ winsxs中部署的DLL。规范示例是启用Visual Styles的清单条目,获取comctl32.dll的6.0版。如果您编写的DLL需要存在于不使用视觉样式的遗留应用程序中,则可能不希望这样做。

但是从不用于COM服务器,因为如果没有激活清单条目,它将无法正常运行。您希望它在程序开始时立即生效,这是客户端清单中清单条目的默认行为。

请记住,这完全是自动的。只需将类型库引用的Isolated属性设置为True即可。这使构建系统在注册表中查找服务器的注册并自动生成清单。你根本不需要做任何事情,你永远不会错。唯一的要求是服务器实际上已在您的计算机上注册,因此可以读取注册表项。哪个没问题,你只是真的关心用户的机器。