使用本地注册免费c++ COM服务器从托管应用程序

本文关键字:服务器 应用程序 COM c++ 注册 免费 | 更新日期: 2023-09-27 18:08:01

我有一个本地的c++ COM Server dll伴随着类型库(。TlbImp.exe生成的. net互操作程序集。服务器是免费注册的,我有一个清单来激活它的上下文。我想从托管c#应用程序中使用服务器。在创建服务器类的对象之前,我激活了上下文,但我不确定什么时候应该停用它?我找到了一篇文章(http://www.mazecomputer.com/sxs/help/sxsapi2.htm),上面写着

注意,与上面的c++示例不同,我们还不能取消激活上下文。COM互操作将需要上下文来定位进行COM对象调用所需的类型库。

我应该保持上下文激活所有或只是第一个COM对象调用?MSDN网站上有关于这件事的详细说明吗?

使用本地注册免费c++ COM服务器从托管应用程序

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

在代码中显式地调用Create/ActivateActCtx()对于一个没有regg的COM服务器来说永远都不是正确的事情。在一些极端情况下,它可能很有用,但仅适用于引用并排安装的程序集的清单项。部署在c:'windows'winsxs目录下的dll。典型的例子是启用Visual Styles的清单项,它的comtl32 .dll的版本是6.0。如果您编写的DLL需要驻留在不使用视觉样式的遗留应用程序中,则可能不想这样做。

但是永远不能用于COM服务器,因为它不能在没有活动的清单条目的情况下正确操作。您希望它在程序开始时立即激活,这是客户端清单中清单条目的默认行为。

请记住,这是完全自动的。只需将类型库引用的isolation属性设置为True。这将使生成系统在注册表中查找服务器的注册并自动生成清单。你根本不需要做任何事,那样你永远不会出错。唯一的要求是服务器实际上已在您的机器上注册,以便可以读取注册表项。这很好,在用户的机器上只有真正的关心这个