【问题标题】:Classic ASP error when using a COM+ DLL使用 COM+ DLL 时的经典 ASP 错误
【发布时间】:2019-01-16 01:38:18
【问题描述】:

我有一个旧网站,我的任务是在它坏了之后进行修复。我们收到以下错误:

ActiveX component can't create object for aBRR.Generato`r

那一行的代码是:

set taMaker = createObject("aBRR.Generator")

我在一台旧机器上找到了 DLL aBRR.dll。我认为它需要进入:

e$\components\COM+\theAppName\
  1. 要将其安装在 COM+ 文件夹中,我是否只需将其放入其中?还有什么吗?
  2. 我是否只需将具有什么权限的 IUSR 添加到 DLL 中?

我认为已经完成,但它仍然给出错误。

【问题讨论】:

标签: asp-classic com


【解决方案1】:

如果是经典的 COM DLL,您只需使用regsvr32 注册即可。

但是,如果该库依赖于 COM+,则需要将其放置在 COM+ 应用程序中。这样一来,对createObject() 的任何调用都会被 COM+ 目录管理器拦截,从而确保对象接收到额外的服务。

有关详细信息,请参阅this 链接。

【讨论】:

  • 处理 32 / 64 位 COM 没有什么是简单的。请务必记住,regsvr32.exe 有两个副本,具体取决于您在哪里注册 COM DLL 库(64 / 32 位 Windows 子系统)。
  • regsvr32 能够推断 COM DLL 的位数并在必要时生成另一个进程。请参阅this 帖子。
  • 这可能是一个特性(不确定,我第一次听说) 但这些年来我一直使用regsvr32.exe 注册它具有的 32 位 COM从来没有使用不正确的版本。可以自己测试,分别在 32/64 位注册表中找到条目。
  • 这很奇怪,因为 regsvr32 应该检测位不匹配。我可以确认它也可以反过来工作,即使用SysWOW64\regsvr32 注册一个 64 位 COM DLL。这会产生 System32\regsvr32,它将条目写入正确的注册表配置单元。
  • 现在看来这是一项功能,但并非一直如此。这完全取决于您运行的 Windows 版本,更安全的是首先了解如何使用它们以及注册时它们的去向。
猜你喜欢
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2013-05-29
  • 2011-08-04
  • 1970-01-01
相关资源
最近更新 更多