Недопустимая процедура вызова метода .NET DLL через COM в Classic ASP - PullRequest
2 голосов
/ 10 августа 2010

Когда я пытаюсь запустить код VB6, я получаю следующую ошибку:

Microsoft VBScript runtime error: Invalid procedure call or argument: 'stx.ResolveAddress'

Однако в приведенном ниже коде, если я НЕ установлю возвращаемое значение переменной "stx.ResolveAddress", я НЕ получу вышеуказанную ошибку.

Set stx = CreateObject("MyApp.Api.Wse3.STxTransactionService")
Set addr = CreateObject("MyApp.Api.Wse3.Address")
addr.Address1 = "1850 Table Mesa Dr"
addr.Address2 = "Boulder, CO 80305"
stx.ResolveAddress(addr)

Однако, если я изменю эту последнюю строку, чтобы она выглядела следующим образом:

result = stx.ResolveAddress(addr)

Я получаю ошибку "Недопустимый вызов процедуры". Я что-то упускаю? Почему назначение вызывает ошибку?

Ответы [ 2 ]

6 голосов
/ 20 июня 2012

У меня возникла та же самая проблема, которая была решена путем добавления дополнительной пары скобок вокруг аргумента, передаваемого проблемной функции, например:

result = stx.ResolveAddress((addr))

Существует обсуждение этогона 4гуйсфромролла .

1 голос
/ 10 августа 2010
stx.ResolveAddress(addr)

- неверный синтаксис в VB6.Использование скобок вокруг аргументов только для функций.Вы должны снять квадратные скобки, или добавить Call или вернуть переменную:

stx.ResolveAddress addr

или

Call stx.ResolveAddress(addr)

или

foo = stx.ResolveAddress(addr)

Вот почему выполучение разных результатов, когда вы присваиваете переменную, а когда нет.

Если вы вызываете dll .Net и работаете из среды ASP, убедитесь, что dll .Net правильно установлена ​​в GAC (VB6среда выполнения имеет некоторое волшебство, которое позволяет запускать .Net DLL не из GAC).Либо DLL должна быть в GAC, либо должна быть RegAsm'd и установлена ​​в том же каталоге, что и запущенное приложение (не уверен насчет классического ASP, но я предполагаю, что она должна работать в той же DLL, что и классический процесс ASP).

...