Почему в Classic ASP в Windows 10 при вызове метода comp + dll генерируется номер ошибки -2147164123 без описания? - PullRequest
0 голосов
/ 07 января 2019

Надеюсь, я поставлю свой вопрос в нужном месте. Я не мог найти более близкие признаки.

Я устанавливаю новую 64-битную систему, чтобы на ней было все, что есть в моей старой 32-битной системе.

Я использовал vb6 для создания тестового проекта ActiveX DLL, чтобы создать testProj.dll, упаковать его и установить, запустив setup.exe пакета от имени администратора.

Мой тестовый проект называется testProj, имеющий класс testClass, который имеет простую подпрограмму под названием testSub следующим образом:

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

TestSub просто печатает сообщение, чтобы подтвердить, что саб был вызван.

Я успешно устанавливаю / регистрирую 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 = 

Также, если я закомментирую «Call testObj.testSub ()», я не получу никакой ошибки. Это означает, что источником ошибки является вызов testSub ().

Я запускаю все как администратор, поэтому не ожидаю разрешения. Может ли эксперт сказать мне, в чем может быть проблема?

Спасибо

1 Ответ

0 голосов
/ 08 января 2019

Похоже, вы предполагаете, что у вас есть доступ к классическому контексту ASP изнутри COM DLL, что не так. Код терпит неудачу внутри COM DLL, потому что он не знает, что такое Response, что вызовет ошибку Object Required внутри DLL, которая пузырится на странице Classic ASP.

Самое простое решение - изменить то, что метод отправляет обратно. Поскольку вы не можете вызвать метод Response.Write() напрямую, лучше всего вместо этого вернуть строку, а затем использовать Response.Write() со страницы ASP для ее отображения.

Измените метод COM DLL так, чтобы он возвращал String;

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

Затем на странице ASP;

Call Response.Write(testObj.testSub())
...