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

在经典ASP.NET中,通过COM调用.NET DLL方法的过程无效,com,vb6,Com,Vb6,尝试运行某些VB6代码时,出现以下错误: Microsoft VBScript runtime error: Invalid procedure call or argument: 'stx.ResolveAddress' 但是,在下面的代码中,如果我没有将返回“stx.resolvedAddress”设置为变量,则不会出现上述错误 Set stx = CreateObject("MyApp.Api.Wse3.STxTransactionService") Set addr = CreateO

尝试运行某些VB6代码时,出现以下错误:

Microsoft VBScript runtime error: Invalid procedure call or argument: 'stx.ResolveAddress'
但是,在下面的代码中,如果我没有将返回“stx.resolvedAddress”设置为变量,则不会出现上述错误

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)
我收到“无效过程调用”错误。有什么我遗漏的吗?为什么分配会导致错误发生

stx.ResolveAddress(addr)
VB6中的语法不正确。在参数周围使用括号仅适用于函数。您必须删除括号,或添加调用或返回变量:

stx.ResolveAddress addr

这就是为什么分配变量和不分配变量会得到不同的结果


如果您正在调用.Net dll并从ASP环境运行,请确保.Net dll已正确安装在GAC中(VB6运行时环境具有一些允许非GAC的.Net dll运行的魔力)。DLL必须位于GAC中,或者必须重新命名并安装在运行应用程序的同一目录中(不确定classic ASP,但我猜它必须与classic ASP进程在同一个DLL中运行).

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

result = stx.ResolveAddress((addr))

有一个关于这方面的讨论。

Kris,当我尝试运行类似“foo=stx.resolvedaddress(addr)”的东西时,就会出现“Invalid procedure call”错误。还有其他方法吗,我应该赋值“foo”?我认为他在示例
result=stx.resolvedaddress(addr)
中使用了正确的变量赋值语法。asp似乎找到了DLL,因为没有返回值的调用成功。编辑:Kris,因此查看DLL生成的一些日志记录,似乎调用了没有赋值给变量的“stx.resolvedAddress(addr)”。返回的“result”类型是什么?下一个想法是,应该将其设置为result=stx.resolvedAddress(addr),其中result是一个对象。你能在.Net中发布ResolveAddress函数的签名吗?你的意思是“Dim result As Object”,“result=stx.ResolveAddress(addr)”吗?.NET签名是“公共ResolveAddressResult ResolveAddress(地址a)”。没什么太复杂的。你试过使用Set吗?类似于此,Set result=stx.resolvedAddress(addr)
foo = stx.ResolveAddress(addr)
result = stx.ResolveAddress((addr))