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

问题描述:

当我尝试运行一些VB6代码,我得到以下错误:无效的过程通过COM调用.NET DLL方法在传统的ASP

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) 

我得到了“无效的过程调用”错误。有什么我失踪?为什么分配会导致错误发生?

+0

您是否尝试过使用Set?像这样设置结果= stx.ResolveAddress(addr) – MarkJ 2012-06-21 13:43:22

stx.ResolveAddress(addr) 

在VB6中的语法不正确。在参数周围使用括号只适用于函数。你必须去掉括号,或添加呼叫或返回一个变量:

stx.ResolveAddress addr 

Call stx.ResolveAddress(addr) 

foo = stx.ResolveAddress(addr) 

这就是为什么你当你得到不同的结果分配一个变量,当你不。

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

+0

Kris,当我尝试运行诸如“foo = stx.ResolveAddress(addr)”之类的东西时,那是当我得到“无效过程调用”错误。有另一种方法,我应该分配“富”? – 12983 2010-08-10 17:55:47

+0

我认为他在示例'result = stx.ResolveAddress(addr)'中使用了正确的变量赋值语法。该DLL似乎是由asp找到的,因为没有返回值的调用成功。 – 2010-08-10 17:58:39

+0

编辑:克里斯,所以看着由DLL生成的一些日志记录,似乎没有赋值给变量的“stx.ResolveAddress(addr)”会被调用。 – 12983 2010-08-10 19:45:46

我有什么似乎是通过添加额外的对括号里传递给有问题的函数的参数解决了,像这样完全一样的问题:

result = stx.ResolveAddress((addr)) 

有一个讨论,在这个上4guysfromrolla