Hi Classic ASP Experts,
基本上,我是Classic ASP和VBScript的新手,并且在尝试将复杂类型的参数传递给COM方法时获得了这个“VBScript运行时错误:无效的过程调用或参数”(下面的视频截图)。在创建服务器对象并将字符串传递给COM方法时,任何传递复杂类型参数的尝试都是徒劳的。
请帮忙。
以下是代码段:
ClassicASPHome.asp页面上的VBScript(服务器端):
<%
response.write("My first ASP script!")
set co = Server.CreateObject("ClassicASPCOM.ComplexObject")
co.Message = "Messi"
co.Number = 100
Dim ccom
Set ccom = Server.CreateObject("ClassicASPCOM.ClassCOM")
response.Write(ccom.GetMessage("1234567890"))
'---------------直到这里工作正常
Dim ret
'---------------以下语句抛出错误
ret = ccom.PaymentDetails(co)
response.Write("Fine")
代码段(C#):
// C# Code (ClassicASPCOM.dll) built with Strong Name and Registered for COM Interop:
// Executed the following in Visual Studio Command Prompt in bin\Release folder
// Regasm ClassicASPCOM.dll
// Regasm ClassicASPCOM.dll /codebase
// Regasm ClassicASPCOM.dll /tlb
// gacutil/i ClassicASPCOM.dll
using System;
using System.Runtime.InteropServices;
namespace ClassicASPCOM
{
[ComVisibleAttribute(true)]
[Guid("D355BC25-B85F-4476-8D38-582F92F7B6F4")]
public interface IComplexObject
{
[DispId(2221)]
int Number {get; set;}
[DispId(2222)]
string Message { get; set; }
[DispId(2223)]
DateTime Dtime { get; set; }
}
[ComVisibleAttribute(true)]
[Guid("4E602191-8D09-458E-A0D0-A0A267696F78"),
ClassInterface(ClassInterfaceType.None)]
public class ComplexObject : IComplexObject
{
int Nmbr;
public int Number
{
get
{
return Nmbr;
}
set
{
Nmbr = value;
}
}
string Msg;
public string Message
{
get
{
return Msg;
}
set
{
Msg = value;
}
}
DateTime Dt;
public DateTime Dtime
{
get
{
return Dt;
}
set
{
Dt = value;
}
}
}
[ComVisibleAttribute(true)]
[Guid("4042FE79-8ACA-4E5D-9F14-2FF7C6AE8D88")]
public interface IGetMessage
{
[DispId(2224)]
string GetMessage(string Message);
[DispId(2225)]
string PaymentDetails(ComplexObject cObject);
}
[ComVisibleAttribute(true)]
[Guid("9A133858-5893-4CA7-9048-345CD0FCF535"),
ClassInterface(ClassInterfaceType.None)]
public class ClassCOM : IGetMessage
{
public string GetMessage(string Message)
{
return "Your Message: " + Message;
}
public string PaymentDetails(ComplexObject cObject)
{
return " Message: " + cObject.Message + " Number: " + cObject.Number;
}
}
}
由于
答案 0 :(得分:1)
[我在尝试将类型类的参数传递给COM方法调用时遇到错误。
您没有将类型类的参数传递给COM方法调用。您传递的是字符串"co"
,而不是存储在变量co
中的对象引用。
答案 1 :(得分:0)
除了Eric Lippert的回答,我想知道你为什么要发表评论“工作正常到这里”因为这部分:
set co = Server.CreateObject("ClassicASPCOM.ComplexObject") ' <- variable co is now an object
co = "" ' <- variable co is now a string with value ""
co.Message = "Messi" ' <- You should get an "Object required" error on this line
co.Number = 100