首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveX注册

ActiveX注册
EN

Stack Overflow用户
提问于 2012-07-05 15:20:46
回答 1查看 803关注 0票数 0

我正在开发一个ActiveX,其中相同的代码库应该用于两个不同的ActiveX,这意味着我有一个由多个DLL构建的单一解决方案。当我构建用于为ActiveX A创建CAB的解决方案时,我将DLL类ID更改为特定的类ID;当我构建用于为第二个ActiveX创建CAB的解决方案时,我将类ID更改为其他值。

我需要两个ActiveX能够在同一台机器上运行。基本上,它工作得很好,除了在某些情况下,我运行不同版本的ActiveX (ActiveX A来自比ActiveX B更早的代码版本),会出现不希望看到的行为。看起来ActiveX从ActiveX B(来自不同的代码版本)加载了一些DLL。

很抱歉冗长的描述,但最后一个重要的信息,因为这两个ActiveX来自相同的代码,我有相同的类名,它公开给调用ActiveX的javascript。在注册表中,除了以下项(NetworkInterface是公开的类)之外,所有键都是完全分离的:

代码语言:javascript
复制
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyActiveX.NetworkInterface\CLSID]
@="{31ED2205-F6AE-4133-AD30-60CA2783ADA6}"

在安装ActiveX时,我看到此条目具有正确的类ID,但在安装第二个ActiveX时,密钥会被第二个ActiveX覆盖。

我想要达到的目标有可能实现吗?有没有办法让同一个类用不同的类ID注册?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-05-27 17:10:19

@Lior,你用这句话回答了你的问题:“让同一个类用不同的类ID注册”。实际上,我们谈论的是ProgID,或者编程标识符--在你的例子中是MyActiveX.NetworkInterface。

ProgID的HKEY_LOCAL_MACHINE\SOFTWARE\Classes\只有一个专用的注册表配置单元,如果您在客户端代码中使用ProgID来实例化一个组件,则只能对一个ActiveX组件执行此操作。当您使用ProgID创建实例时,将使用该注册表配置单元确定相应的CLSID,并使用实现该类的可执行DLL/OCX/EXE。对于后一种情况,相应的注册表配置单元如下所示:

HKEY_CLASSES_ROOT\Wow6432Node\Clsid{6935DB93-21E8-4ccc-BEB9-9FE3C77A297A}\InProcServer32

在这种情况下,最好的做法是为您的两个ActiveX组件使用两个不同的ProgID。即使你对主类使用相同的源代码,你也可以在两个不同的项目中“按原样”使用它们,这两个项目用于编译具有不同ProgID的组件。似乎,所有的开发环境(你可能正在使用的VB6)都允许你这样做。

有关这方面的更多信息可以在本文中找到:http://www.vbaccelerator.com/progid.htm

我们的ActiveX组件也有同样的问题,我们的经验告诉我们,拥有不同的ProgID是最好的选择。即使您发布了下一个版本,也要更改ProgID。这将允许两个版本在同一操作系统中共存而不会出现任何问题,开发人员可以逐步升级现有的项目。

===

作为对你问题的回答,我有一个想法,如果你不能改变ProgID,你可以尝试解决你的问题。据我所知,你可以直接使用他们的CLSID激活ActiveX,不同的开发环境使用不同的技术。我没有您的项目,但是如果您使用JavaScript,您可以尝试本文中的食谱:

http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/08652e9e-7deb-40a3-8c1a-f9becdcbf56e/

简而言之,您不需要使用这样的调用来创建ActiveX对象:

代码语言:javascript
复制
myobject = new ActiveXObject("SAMPLEACTIVEX.sampleActiveXCtrl.1");

您需要使用OBJECT标记将两个ActiveX控件放在页面上,并在网页上使用对象的名称(Id)调用对象的方法。如果您查看HTML OBJECT标记的示例,您将看到如下所示:

如您所见,您可以使用指定的ID来访问所需对象的成员。已经有很多这样的例子了--这里就是其中之一:

javascript: "Object doesn't support this property or method" when ActiveX object called

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

https://stackoverflow.com/questions/11339552

复制
相关文章

相似问题

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