在Classic ASP中通过COM调用.NET DLL方法的过程无效

时间:2010-08-09 20:37:46

标签: com vb6

当我尝试运行一些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 个答案:

答案 0 :(得分:6)

我有一个似乎完全相同的问题,通过在传递给有问题的函数的参数周围添加一对额外的括号来解决这个问题,如下所示:

result = stx.ResolveAddress((addr))

4guysfromrolla就此进行了讨论。

答案 1 :(得分:1)

stx.ResolveAddress(addr)

是VB6中不正确的语法。在参数周围使用括号仅适用于函数。您必须删除括号,或添加一个Call或返回一个变量:

stx.ResolveAddress addr

Call stx.ResolveAddress(addr)

foo = stx.ResolveAddress(addr)

这就是为什么在分配变量时以及何时不能获得不同结果的原因。

如果您正在调用.Net dll并从ASP环境运行,请确保.Net dll已在GAC中正确安装(VB6运行时环境有一些魔力允许非GAC的.Net DLL运行) 。 DLL必须在GAC中,或者它必须RegAsm'd并安装在与运行应用程序相同的目录中(不确定经典ASP,但我的猜测是它必须在与经典ASP进程相同的DLL中运行)。

相关问题