为什么在Windows 10上的经典ASP中,对comp + dll方法的调用会生成错误号-2147164123而没有描述?

时间:2019-01-07 00:51:35

标签: asp-classic vb6 windows-10

我希望我将问题放在正确的位置。我找不到更近的标签。

我正在设置一个新的64位系统,以便可以使用旧的32位系统上的所有内容。

我用vb6创建了一个activeX dll测试项目来制作一个testProj.dll,打包并通过以管理员身份运行程序包的setup.exe来安装它。

我的测试项目称为testProj,它具有一个名为testClass的类,该类具有一个名为testSub的简单子项,如下所示:

Public Sub testSub()
    Response.Write “--------- testSub is called ----------“
End Sub

testSub只是打印一条消息以确认该Sub被调用。

我成功安装/注册了testProj.dll,并在asp页面上成功调用了Server.CreateObject(“ testProj.testClass”)以实例化testProj以调用其testSub()。

On Error Resume Next

Dim testObj
Set testObj  =  Server.CreateObject(“testProj.testClass”)


if err.number <> 0 then
    Response.write "1----------err.number = " & err.number & "--------- err.description = " & err.description
    err.clear
end if


Call testObj.testSub()


if err.number <> 0 then
    Response.write "2----------err.number = " & err.number & "--------- err.description = " & err.description
    err.clear
end if


Set testObj = nothing

但是代码会生成错误没有描述

2----------err.number = -2147164123 ---------err. description = 

如果我注释掉“调用testObj.testSub()”,我也不会收到任何错误。意味着错误的根源是对testSub()的调用。

我以管理员身份运行所有程序,因此我不会遇到任何权限问题。 专家能告诉我可能是什么问题吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您似乎假设您可以从COM DLL内部访问Classic ASP上下文,但事实并非如此。该代码在COM DLL内部失败,因为它不知道什么Response会在DLL中冒出一个Object Required错误,并冒泡到Classic ASP页面。

最简单的解决方案是更改方法发送回的内容。由于您无法直接调用Response.Write()方法,因此,下一个最好的方法是返回一个字符串,而不是使用ASP页面中的Response.Write()来显示它。

修改COM DLL方法以返回String;

Public Function testSub() As String
  testSub = "--------- testSub is called ----------"
End Function

然后进入ASP页面;

Call Response.Write(testObj.testSub())