注册和使用ActiveX/COM组件,该组件是使用运行时生成的UUID通过IDL创建的
Registering and using an ActiveX / COM component that is created with an IDL with the UUIDs generated at runtime
我有一个现有的ActiveX/COM组件,它已经运行了一段时间。这个ActiveX组件最初设计为每台机器一个客户端应用程序使用。然而,现在需要扩展这个ActiveX组件,以便在同一台PC中由一个以上的客户端应用程序使用。
我知道COM之所以存在,是因为它的可重用性,而且有一些方法可以管理它,比如引用计数等。但我的问题不同。请阅读…
我的每个客户端应用程序都是不同的,这些客户端应用程序充当独立的应用程序——从某种意义上说,它们是作为单独的应用程序安装和卸载的。它们各自携带一个ActiveX组件的副本,并将其安装在自己的安装目录中。每个客户端应用程序都有自己的ActiveX组件副本,可以安装、使用和卸载。
以下是基本发生的步骤。下面的第4步是实际问题:
-
第一次安装客户端应用程序X时,由于它使用COM,安装程序会注册COM组件,并在注册表中创建一个条目,即"typelib"条目,该条目具有IDL和.rgs.中定义的UUID
-
若我安装另一个客户端应用程序Y,在卸载客户端应用程序X之前,Y的安装程序会用Y当前目录中ActiveX组件的路径更新"typelib"的"win32"值。
-
当我卸载客户端应用程序X时,它会从注册表中删除这个typelib条目。
-
因此,在这一点上,如果我试图卸载应用程序Y,它会失败,因为缺少typelib条目。X的卸载程序已删除此条目。
为了解决这个问题,我正在尝试绕过使用类型库,或者使用其他方式(如果可能的话)来使用ActiveX组件,而不会出现我现在面临的问题。
问题归结为:对于不同的客户端应用程序,但对于相同的ActiveX组件,使用不同的类型库条目。
有人能指导我并提出一个好的、优雅的解决方案吗?
我通过修改rgs文件创建IDL解决了这个问题。
- 通过方法访问结构
- 通过递归进行因子分解
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 尝试通过多个向量访问变量时,向量下标超出范围
- C++如何通过用户输入删除列表元素
- 通过多个头文件使用常量变量
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何通过 UActor组件获取演员列表?
- 如何确保将对象通过许多层的组件时,不会制作副本
- C DLL通过C#UWP应用程序中的Win运行时组件适用于ARM,但对于X86/X64不适用于
- 如何通过最快的方法删除指定的标签组件
- 通过浏览器使用 Java/C 访问 HTML TextField 组件
- 通过调用C++函数设置加载器组件
- 通过组策略安装 VC++ 可再发行组件的最佳方法是什么?
- 通过 [ " " ] 或 [int] 为自定义类C++访问组件
- 是由通过互操作传递到C++的C#组件引发的异常消息
- c++是一种基于组件的体系结构,通过继承实现,被认为是良好的实践
- 注册和使用ActiveX/COM组件,该组件是使用运行时生成的UUID通过IDL创建的
- 通过windows phone 8.1运行时组件访问CoreWindow