我希望我将问题放在正确的位置。我找不到更近的标签。
我正在设置一个新的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()的调用。
我以管理员身份运行所有程序,因此我不会遇到任何权限问题。 专家能告诉我可能是什么问题吗?
谢谢
答案 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())