首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要我的COM服务器的共享属性访问实例

需要我的COM服务器的共享属性访问实例
EN

Stack Overflow用户
提问于 2014-03-26 20:18:06
回答 2查看 219关注 0票数 2

我有一个具有共享属性的VB.NET COM类,如ABC。问题是组件是由几个C++ COM exe使用的,因此我的理解是,每个组件都将得到自己的程序集负载,并且共享属性对于每个EXE都是唯一的。是否有方法为此程序集获取交叉EXE共享属性?

Tx。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-26 20:50:33

在本机COM中,通过创建进程外COM服务器(也通常称为ActiveX EXE),您所描述的内容将“很容易”完成。顾名思义,进程外COM服务器在自己的进程中运行,并通过COM接口为其方法提供服务。如果多个客户端同时使用COM服务器,则它们都共享相同的服务器进程,因此该进程中的任何全局数据都在所有客户端之间共享。

不幸的是,.NET没有提供任何机制来创建进程外COM服务器.所有COM可见的.NET程序集都充当进程内COM库,因此每个使用它的客户端都在自己的进程中拥有自己的全局数据集。

唯一的选择是创建一个标准的进程内COM可见库,但让它只是一个传递包装器,调用其他进程。.NET中的进程间通信通常使用WCF处理,因此典型的解决方案是在COM-可见库通信的后端运行WCF服务。如果不想使用WCF,还可以查看.NET远程处理或原始的TCP/IP套接字。

这里有一张鸡爪抓图,可以帮助你可视化我的意思:

票数 1
EN

Stack Overflow用户

发布于 2014-03-26 23:07:47

创建一个Windows服务应用程序,或者在腐朽中注册您的共享单例对象,或者使用RegisterActiveObject/RevokeActiveObject将其注册为惟一的guid。

因此,使用ROT或GetActiveObject从任何其他地方获得该对象的COM代理。如果对象尚未注册,则需要手动启动windows服务。

更新了,也可以在单例对象上实现IClassFactory (这将返回自身)。该服务将通过CoRegisterClassObject注册单例,类似于程序外服务器的行为。最初的服务激活仍然是必需的。

最后,也许最简单的解决方案是将程序集注册为程序外DLL代理。我还没有尝试过,但是使用[ComRegisterFunction] / [ComUnregisterFunction]自定义互操作注册应该很容易。

更新了,这里是使用代理进程的示例

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22672133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档